以下是我的程序,编译连接能通过,也能生成hex文件,就是不能显示,不知道是什么问题。望高手求救!
/**************************************************************************************
file name : 1602.C
Chip type : ATmega16
Program type : Application
Clock frequency : 12.000000 MHz
Declare : PB口做八位数据; PD口的4,5,6位分别为RS,RW,EN的接口.
***************************************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "delay.h"
#define uint unsigned int
#defien uchar unsigned char
//子程序声明部分
void chushihua(); // 初始化子程序
void write_cmd(uchar cmd); //写指令子程序
void write_data(ucahr data); //写数据子程序
void SetCursor(uchar x, uchar y); //设置显示地址
void PutChar(uchar x,uchar y,uchar data); //写一个字符
void PutStr(uchar x,uchar y,flash uchar *s); //写一个字符串
void PutNum(uchar x,uchar y,uint intdata); //写无字符型整形数
//主程序
void main()
{
chushihua();
PutChar(x,y,' ');
PutStr(x,y," ");
PutNum(x,y,);
while(1);
}
void chushihua()
{
DDRB=0XFF; // PB口做八位数据
DDRD|=BIT(4)|BIT(5)|BIT(6); // PD口的4,5,6位分别为RS,RW,EN的接口
PORTD&=~BIT(6); //EN=0
write_cmd(0X38); //置功能位,8位两行5*7显示
delay(5);
write_cmd(0X01); //清屏
delay(5);
write_cmd(0X0c); //关闭光标显示,若为0x0f,则为光标闪烁显示;
delay(5);
write_cmd(0X06); //置地址增方式,整体移位的输入方式
delay(5);
}
//写指令子程序
void wirte_cmd(uchar cmd)
{
PROTD&=~BIT(4); //RS=1
PROTD&=~BIT(5); //RW=0
PROTB=cmd; //输出命令
delay(1);
PROTD|=BIT(6); //EN=1,开始写命令
delay(1);
PROTD&=~BIT(6);
}
//写数据子程序
void write_data(uchar data)
{
PROTD&=~BIT(4);
PROTD&=~BIT(5);
PROTB=data; //输出数据
delay(1);
PROTD|=BIT(6); //EN=1,开始写数据
delay(1);
PROTD&=~BIT(6); //EN=0
}
//设置显示地址:X为横轴(0-15),Y为纵轴(0-1)
void SetCursor(uchar x,uchar y)
{
uchar address;
x&=0x0f;
if(y==0)
address=0x80+x;
else
address=0xc0+x;
write_cmd(address);
}
void PutChar(uchar x,uchar y,uchar data)
{
SetCursor();
write_data(data);
}
//写一个字符串:X为横轴(0-15),Y为纵轴(0-1)
void PutStr(uchar x,uchar y,flash uchar *s)
{
SetCursor();
while(*s)
{
write_data(*s);
delay(5);
}
}
//写一个无字符整数:X为横轴(0-15),Y为纵轴(0-1)
void PutNum(uchar x,uchar y,uint intdata)
{
uchar i=0,temp[5];
while(num/10 || num%10)
{
temp
=num%10;
num/=10;
i++;
}
SetCursor(x,y);
while(i)
{
i--;
write_data(temp+0x30);
}
}
此帖出自小平头技术问答
一周热门 更多>