单片机控制的LCD汉字显示电路设计(独家完整版) - 图文(6)

2019-03-11 09:19

void display(void) {

write_12864com(0x80);// RAM区首地址,第一行首地址 write_12864dat(0xb0);// “ ” write_12864dat(0xa0); delay2(20);

write_12864dat(0xb3);// “锄” write_12864dat(0xfa); delay2(20);

write_12864dat(0xba);// “禾” write_12864dat(0xcc); delay2(20);

write_12864dat(0xc8);// “日” write_12864dat(0xd5); delay2(20);

write_12864dat(0xb5);// “当” write_12864dat(0xb1); delay2(20);

write_12864dat(0xce);// “午” write_12864dat(0xe7); delay2(20);

write_12864dat(0x2c);// “,” delay2(40);

write_12864com(0x90);//第二行首地址 write_12864dat(0xb0);// “ ” write_12864dat(0xa0); delay2(20);

write_12864dat(0xba);// “汗” write_12864dat(0xba); delay2(20);

21

write_12864dat(0xb5);// “滴” write_12864dat(0xce); delay2(20);

write_12864dat(0xba);// “禾” write_12864dat(0xcc); delay2(30);

write_12864dat(0xcf);// “下” write_12864dat(0xc2); delay2(20);

write_12864dat(0xcd);// “土” write_12864dat(0xc1); delay2(20);

write_12864dat(0x2e);// “。” delay2(40);

write_12864com(0x88);//第三行首地址 write_12864dat(0xb0);// “ ” write_12864dat(0xa0); delay2(20);

write_12864dat(0xcb);// “谁” write_12864dat(0xad); delay2(20);

write_12864dat(0xd6);// “知” write_12864dat(0xaa); delay2(20);

write_12864dat(0xc5);// “盘” write_12864dat(0xcc); delay2(20);

write_12864dat(0xd6);// “中” write_12864dat(0xd0); delay2(20);

22

write_12864dat(0xb2);// “餐” write_12864dat(0xcd); delay2(20);

write_12864dat(0x2c);// “,” delay2(40);

write_12864com(0x98);//第四行首地址 write_12864dat(0xb0);// “ ” write_12864dat(0xa0); delay2(20);

write_12864dat(0xc1);// “粒” write_12864dat(0xa3); delay2(20);

write_12864dat(0xc1);// “粒” write_12864dat(0xa3); delay2(20);

write_12864dat(0xbd);// “皆” write_12864dat(0xd4); delay2(20);

write_12864dat(0xd0);// “辛” write_12864dat(0xc1); delay2(20);

write_12864dat(0xbf);// “苦” write_12864dat(0xe0); delay2(20);

write_12864dat(0x2e);// “。” delay2(40); }

5.3程序调试中的注意问题

1、数据类型要正确,头文件要包含iom8v.h和macros.h。

23

2、延时函数的使用。在初始化及显示函数中,延时时间要适当长些,以正常稳定地显示汉字。所以,在编写程序时,我编写了两个延时函数,以供不同延时时间的需要。同时,在进行LCD显示时,我发现每个汉字显示时,同样要较长时间的延时间隔,以达到观察清晰的效果。

3、PORTB和PORTC均为输出,所以应将DDRX相应位设为1,即打开PORTB和PORTC端口。

4、逻辑运算符号不能出错,‘&’表示按位与的运算,‘&&’表示和运算。我在编写程序时,将write函数中的‘&’写成了‘&&’,导致程序编译时正确,但将程序写入芯片时,LCD却不能显示汉字。

5、值得提出的是,当硬件焊接完成,程序编写完成后,将程序下载到单片机上时,LCD并没有出现预期的结果,即并没有显示汉字。这时,当初步检查了程序和硬件焊接均无误后,继续下载程序,但仍然不显示汉字。所以,就用了一个测试函数来测试该单片机是否焊接正确。该函数为:

Void test (void) {

DDRB=0XFF; DDRC=0XFF;

PORTC|=0x08;//0000,1000 PC3=1 //PORTC&=0xf7;//1111,0111 PC3=0 PORTC|=0x10;//0001,0000 PC4=1 //PORTC&=0xef;//1110,1111 PC4=0 PORTC|=0x20;//0010,0000 PC5=1 //PORTC&=0xdf;//1101,1111 PC5=0 PORTB|=0x01;//0000,0001 PB0=1 //PORTB&=0xfe;//1111,1110 PB0=0 PORTB|=0x02;//0000,0010 PB1=1 //PORTB&=0xfd;//1111,1101 PB1=0 PORTB|=0x04;//0000,0100 PB2=1 //PORTB&=0xfb;//1111,1011 PB2=0 PORTB|=0x08;//0000,1000 PB3=1 //PORTB&=0xf7;//1011,1111 PB3=0 PORTB|=0x10;//0001,0000 PB4=1 //PORTB&=0xef;//1110,1111 PB4=0 }

执行该函数后,用万用表分别测试ATMEGA8的PC3、PC4、PC5、PB0、PB1、PB2、

24

PB3、PB4是否均为高电平;之后再修改上述函数将相应端口的位置为0,再用万用表分别测试ATMEGA8的PC3、PC4、PC5、PB0、PB1、PB2、PB3、PB4是否均为低电平。

通过测试,发现将ATMEGA8的第23引脚和第24引脚相连了,经过拨离后,执行该函数,并进行硬件检测,得出结果ATMEGA8焊接最终正常。

再次进行下载程序,但LCD仍然没有显示汉字。之后,又进行了对RS,RW,E引脚的检测。检测函数为:

Void test2(void)

{

DDRB=0XFF; DDRC=0XFF;

PORTC|=0x01;//0000,0001 rs=1 PC0=1 PORTC&=0xfd;//1111,1101 rw=0 PC1=0 PORTC&=0xfb;//1111,1011 e=0 PC2=0 PORTC&=0xfe;//1111,1110 rs=0 PC0=0 PORTC|=0x02;//0000,0010 rw=1 PC1=0 PORTC|=0x04;//0000,0100 e=1 PC2=1 }

检测方法同上,检测结果为焊接正确。

鉴于以上检测,则对initial函数进行检测。由于initial函数中先执行延时函数,之后执行了write_12864com函数,则进入write_12864com函数检测,而该函数在执行了RS=0,RW=0和E=0后,又执行了延时函数,上面已检测过RS、RW、E均无焊接错误,且延时函数无误,接着,执行write函数。于是进行write函数检测,检测函数为:

Void test3(void) {

DDRB=0XFF; DDRC=0XFF; Write_12864com(0x30); }

void write_12864com(unsigned char b) {

PORTC&=0xfe;//1111,1110 rs=0 PC0=0 PORTC&=0xfd;//1111,1101 rw=0 PC1=0 PORTC&=0xfb;//1111,1011 e=0 PC2=0

25


单片机控制的LCD汉字显示电路设计(独家完整版) - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年中国纸基覆铜板行业调研分析报告目录

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: