LCD1602工作原理

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

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

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

资源描述

1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别1602LCD主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95×4.35(W×H)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表10-13:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。LCD寄存器的选择ER/WRS功能说明100写入命令寄存器101写入数据寄存器110读取忙碌标志及RAM地址111读取RAM数据0X不动作LCD指令表指令功能控制线数据线RSR/WD7D6D5D4D3D2D1D0清除屏幕0000000001清除屏幕,并把光标移至左上角光标回到原点000000001x光标移至左上角,显示内容不变设定进入模式00000001I/DSI/D=1:地址递增,I/D=0:地址递减S=1:开启显示屏,S=0:关闭显示屏显示器开关0000001DCBD=1:开启显示幕C=1:开启光标B=1:光标所在位置的字符闪烁移位方式000001S/CR/LxxS/C=0、R/L=0:光标左移;S/C=0、R/L=1:光标右移S/C=1、R/L=0:字符和光标左移;S/C=1、R/L=1:字符和光标右移功能设定00001DLNFxxDL=1:数据长度为8位,DL=0:数据长度为4位N=1:双列字,N=0:单列字;F=1:5x10字形,F=0:5x7字形CGRAM地址设定0001CGRAM地址将所要操作的CGRAM地址放入地址计数器DDRAM地址设定001DDRAM地址将所要操作的DDRAM地址放入地址计数器忙碌标志位BF01BF地址计数器内容读取地址计数器,并查询LCM是否忙碌,BF表示LCM忙碌写入数据10写入数据将数据写入CGRAM或DDRAM读取数据11读取数据读取CGRAM或DDRAM的数据图10-571602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”开始结束判断LCD是否忙碌?rs=1;rw=0;ep=0;P1=dat;延时4usep=1;延时4usep=0;否是图表1写数据流程开始结束判断LCD是否忙碌?rs=0;rw=0;ep=0;P1=dat;延时4usep=1;延时4usep=0;否是图表2写命令流程开始结束rs=0;rw=1;ep=1;P1=dat;延时4usresult=(bit)(P1&0x80);ep=0;返回result图表3判断LCD是否忙碌,忙则返回1#includereg51.h#includeintrins.hsbitrs=P3^5;//寄存器类型,1表示数据寄存器,2表示指令寄存器sbitrw=P3^6;//读写选择,1表示读,0表示写sbitep=P3^7;//读写使能,下降沿使能voiddelay(unsignedcharms)//延时nms{unsignedchari;while(ms--){for(i=0;i123;i++){;}}}bitlcd_bz()//判断LCD是否忙碌,1忙碌{bitresult;rs=0;rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P1&0x80);ep=0;returnresult;}voidlcd_wcmd(unsignedcharcmd)//写指令{while(lcd_bz());//判断LCD是否忙碌rs=0;rw=0;ep=0;_nop_();_nop_();P1=cmd;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidlcd_pos(unsignedcharpos)//显示地址{lcd_wcmd(pos|0x80);}//写数据voidlcd_wdat(unsignedchardat){while(lcd_bz());//判断LCD是否忙碌rs=1;rw=0;ep=0;P1=dat;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidlcd_wstr(constunsignedchar*s)//写字符串{unsignedchari=0;while(s[i]!='\0'){lcd_wdat(s[i]);//显示字符delay(1000);i++;}}voidlcd_init()//LCD初始化{lcd_wcmd(0x38);//功能设定delay(1);lcd_wcmd(0x0c);//显示器开关delay(1);lcd_wcmd(0x06);//设定进入模式delay(1);lcd_wcmd(0x01);//清除显示屏,把光标移至左上角delay(1);}voidmain(void){lcd_init();//初始化LCDdelay(10);lcd_pos(0x01);//设置显示位置//i=0;while(1){lcd_wstr(abcdefg);lcd_pos(0x42);lcd_wstr(abcdefg);lcd_wcmd(0x01);delay(3);}}

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

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

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

×
保存成功