lcd1602按键显示程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includereg52.h#includeintrins.h//包含_nop_()函数定义的头文件typedefunsignedintuint;typedefunsignedcharuchar;sbitRS=P2^0;//寄存器选择位,将RS位定义为P2.0引脚sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚sbitE=P2^2;//使能信号位,将E位定义为P2.2引脚sbitBF=P0^7;//忙碌标志位,,将BF位定义为P0.7引脚ucharkeyscan();voiddelay1ms();voiddelay(unsignedcharn);unsignedcharBusyTest(void);voidWriteInstruction(unsignedchardictate);voidWriteAddress(unsignedcharx);voidWriteData(unsignedchary);voidLcdInitiate(void);voiddelay1ms(){unsignedchari,j;for(i=0;i10;i++)for(j=0;j33;j++);}voiddelay(unsignedcharn){unsignedchari;for(i=0;in;i++)delay1ms();}unsignedcharBusyTest(void){bitresult;RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;//E=1,才允许读写_nop_();//空操作_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间result=BF;//将忙碌标志电平赋给resultE=0;returnresult;}voidWriteInstruction(unsignedchardictate){while(BusyTest()==1);//如果忙就等待RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以应先置0_nop_();_nop_();//空操作两个机器周期,给硬件反应时间P0=dictate;//将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}voidWriteAddress(unsignedcharx){WriteInstruction(x|0x80);//显示位置的确定方法规定为80H+地址码x}voidWriteData(unsignedchary){while(BusyTest()==1);RS=1;//RS为高电平,RW为低电平时,可以写入数据RW=0;E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以应先置0P0=y;//将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}voidLcdInitiate(void){delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间WriteInstruction(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口delay(5);//延时5msWriteInstruction(0x38);delay(5);WriteInstruction(0x38);delay(5);WriteInstruction(0x0f);//显示模式设置:显示开,有光标,光标闪烁delay(5);WriteInstruction(0x06);//显示模式设置:光标右移,字符不移delay(5);WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除delay(5);}ucharkeyscan(void){ucharKey1,Key2,tt;uinttemp;P1=0x0f;if((P1&0x0f)==0x0f){return0xff;}delay(10);if((P1&0x0f)==0x0f)return0xff;//jiancha2=0;Key1=P1&0x0f;P1=0xf0;if((P1&0xf0)==0xf0)return0xff;delay(10);if((P1&0xf0)==0xf0)return0xff;Key2=P1&0xf0;while((P1&0xf0)!=0xf0);tt=Key1|Key2;switch(tt){case0xe7:temp='1';break;case0xd7:temp='2';break;case0xb7:temp='3';break;case0x77:temp='a';break;case0xeb:temp='4';break;case0xdb:temp='5';break;case0xbb:temp='6';break;case0x7b:temp='b';break;case0xed:temp='7';break;case0xdd:temp='8';break;case0xbd:temp='9';break;case0x7d:temp='c';break;case0xee:temp='*';break;case0xde:temp='0';break;case0xbe:temp='#';break;case0x7e:temp='d';break;}return(temp);}voidmain(){ucharb,i,j;LcdInitiate();//调用LCD初始化函数i=0;while(1){b=keyscan();if(b!=0xff){WriteData(b);i++;b=0xff;}//字符的字形点阵读出和显示由液晶模块自动完成if(b=='*'){j=i;}if(b=='#'){j++}if(j==i)Break;}}

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功