资源描述:
《1602液晶显示汉字程序 》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1602液晶显不汉字程序利用1602显示汉字也不是新鲜的内容,今天不想颓废了。只是需要自己事先定义一下汉字的字模,就是显示出来的汉子字体结构。要定义字模就無要知道1602的CGRAM地址和显示字符的地址DDRAM图1:12345678910111213141516000102030405060708090AOB0C0D0E0F404142434445464748494A4B4C4D4E4F第一行第一个字符的地址是(0x80),后面的字符地址以此类推第二行第一个字符的地址为(0x80+Ox40),需要在第一行的基地址后面加上一个偏移量0)(
2、40,后面的地址在此基址上再依次加一。voiddelay(unsignedinttimej){inti;for(;tim>0;tim-){for(i=}}voidcommand_out(charout_data){RW=0;RS=0;EN=l;DB=out_data;EN=0;delay(10);}void0UTD(charout_data){RS=1;RW=0;EN=1;DB=out_data;EN=0;delay(lO);}OUT10是写入指令的函数,OUTDO是写入数据的函数。如:左上角第一个5*7的显示数据为:0x00,0x01,
3、0x81,0x12,0x24,0x41,Ox81,0x10蓝色区域的相应位为1这样就可以写出全部4个5*7点阵的显示数据了,把它封装在一个数组中,如数组,hanzi[]={OxO0,0x01,0x81,0x12,0x24,Ox41,0x81,0x10,}之后利用命令:OUTI(0X40);for(i=0{OUTD(neu[i]);}将这个数组中的数据赋值到1602内部CGRAM中。完成后,再设置数据在1602上的显示地址,根据图1的结构,设置好位置,如在第一行第一个字符和第二个字符以及第二行第一个字符和第二个字符处显示:Command_o
4、ut(0x80+0x00);;i++){data_out(i);}Command_out(0x80+0x40);for(i=4;{data_out(i);}command_out(}的作用是设置显示的起始地址,data_out()的作用是将hanzi[]数组中的16进制数据发送出去,每一个16进制数字对应之5*7点阵上的每一行内容。第1行第1个字符需要8个16进制数据,第1行第2个字符处也需要816进制数据。还有第2行的两个字符点阵,这样显示一个汉字需要32个16进制数据。下面列举一个实例(proteus仿真通过)I/♦*♦****木*♦
5、木*********************木**♦木♦木木*******木本木*本**木木*木木*************本木木木木木*木木本*木本木木//硬件连接:1602VDD接5V,V0接地,BL1接5V,BL2接地,8根数据线接P0口,RSRWE分别接P2.0、P2.1、P.4口Iy******本本本本本木木本本本本本本本本木本本本本本本*本本本本本本*氺本本木本本本木木木本本本本本*本本木本本本**本水本本木本本*木木本木本本*本*本**氺木木本木本木#i2.h>#includ#defineBusy0x80//用于检测LCM状
6、态字中的Busy标识#defineLCM_DataP0sbitLCM_RS=P2A0;//寄存器选择sbitLCM_RW=P2A1;//读/写控制sbitLCM_E=P2A4;//读/写使能inti,j;//自定义字符列表//=========================================================================unsignedcharcharacter0[8]={0x08,0x0f,0x12,0x0f,0x0a,0xlf,0x02,0x02},//年characterl[8]={
7、OxOf'Ox09,0x0^0x09,0x0^0x09,0xOb'Oxll},//月character2[8]={0x0f,0x09,0x09,0x09,OxOf,0x09,0x09,0xOf},//日characterN[8]={0x00,0x00,0x00,Ox00,0x00,0x00,0x00,0x00};//日//==========================================================//==================================================
8、=======//延时程序//=======================================================voidDelay5Ms(void){unsigne