LCD_1602, 学过单片机的朋友们都知道它了吧,可以说是用的最广,最简单,也是学液晶入门级别的一块液晶了。LCD1602顾名思义就是两行显示的液晶,每行最多显示16个字符(里面总共有160个字符),其中包括阿拉伯数字、英文字母的大小写,常用符号,及日文的假名!每个字符对应一个ASCII码,我们通过向液晶送相应符号的ASCII码来显示这个字符。
0x00:第一个(0x40) 0x01:第二个(0x48) 0x02:第三个(0x50) 0x03:第四个(0x58) 0x04:第五个(0x60) 0x05:第六个(0x68) 0x06:第七个(0x70) 0x07:第八个(0x78)
具体的流程是这样的:“显示字符的数组数据”--->"定义第几个自定义字符"--->“像地址中发送数组数据”--->“规定显示位置”--->“显示第几个自定义字符”--->OK!
自己想显示什么字符或图像可以自己计算一下对应的数组数据,最好自己弄一个取模软件比较好,我一开始都是自己算的,感觉好麻烦。
/***** 下面我写一个用51驱动LCD1602的程序 *****/
接口方面根据自己的实际电路决定。程序的完整版本下载: http://www.51hei.com/f/1602cc.rar
/* 这里是我自己的经验:在数据手册中说下降沿写入命令,但是我用上升沿写入也是好使的,这里我还是用下降沿吧;下面这条是重点,自习看下你板子上的晶振大小,最好是在下程序的时候看下具体大小事多少,如果你的晶振>11.5M的话最好在下面我标注的地方加延时,不然很可能什么都不显示,而且找不到错误。 */[page]
#includesbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2;//LCD的三个控制端 unsigned char table[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A}; void delay(unsigned int i) { while(--i); } void Read_busy()
//忙检测,DB7为1则busy,不能进行读写操作 ;每次读写前应"读忙"检测 { P0=0x00; RS=0; RW=1; EN=1; while(P0 & 0x80); EN=0; } void write_LCD_command(unsigned char value)//写命令函数 { Read_busy(); RS=0; RW=0; EN=1; P0=value; delay(100); EN=0; } void write_LCD_data(unsigned char value)//写命令函数 { Read_busy(); RS=1; RW=0; EN=1; P0=value; delay(100); EN=0; } void init_LCD() { write_LCD_command(0x38); //在这里加延时 delay(5); write_LCD_command(0x0c);//开显示,不显示光标,且不闪烁 //在这里加延时 delay(5); write_LCD_command(0x06);//每次写入数据后地址指针加1 //在这里加延时 delay(5); write_LCD_command(0x01);//清屏 } void main() { unsigned char num; init_LCD(); write_LCD_command(0x40);
//对CGRAM第一个自定义字符操作,若是第二个则为0x48,其次类推(上面有对顶的关系) for(num=0;num<8;num++) { write_LCD_data(table[num]); } write_LCD_command(0x80); //规定显示在第一行第一个位置 write_LCD_data(0x00); //显示第一个自定义字符 (0x40对应第一个:0x00) while(1); } /*到这里程序结束了,第一次写可能说的不够清晰,有不懂的可以留言给我^_^*/
上一篇:arduino+STC89C52RC+nRF24L01制作远程测温系统
下一篇:感觉比较好的矩阵键盘扫描程序
推荐阅读最新更新时间:2024-03-16 13:05