1、2 VDD 电源正极 10 D3 数据 3 VL 液晶显示偏压 11 D4 数据 4 RS 数据/命令选择 12 D5 数据 5 R/W 读/写选择 13 D6 数据 6 E 使能信号 14 D7 数据 7 D0 数据 15 BLA 背光源正极 8 D1 数据 16 BLK 背光源负极 表 10-13:引脚接口说明表 第 1 脚:VSS 为地电源。第 2 脚:VDD接 5V正电源。第 3 脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低
2、电平时选择指令寄存器。第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS和 R/W共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W为低电平时可以写入数据。第 6 脚:E端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。第 714脚:D0D7为 8 位双向数据线。第 15脚:背光源正极。第 16脚:背光源负极。LCD寄存器的选择ER/WRS功能说明1写入命令寄存器写入数据寄存器读取忙碌标志及RAM地址读取RAM数据X不动作LCD指令表指令功能控制线数据线D7D6D5D4D3D2D1
3、D0清除屏幕清除屏幕,并把光标移至左上角光标回到原点x光标移至左上角,显示内容不变设定进入模式I/DSI/D=1:地址递增,I/D=0:地址递减 S=1:开启显示屏,S=0:关闭显示屏显示器开关DCBD=1:开启显示幕 C=1:开启光标 B=1:光标所在位置的字符闪烁移位方式S/CR/LS/C=0、R/L=0:光标左移;S/C=0、R/L=1:光标右移 S/C=1、R/L=0:字符和光标左移;S/C=1、R/L=1:字符和光标右移功能设定DLNFDL=1:数据长度为8位,DL=0:数据长度为4位 N=1:双列字,N=0:单列字;F=1:5x10字形,F=0:5x7字形CG RAM地址设定CG
4、RAM地址将所要操作的CG RAM地址放入地址计数器DD RAM地址设定DD RAM地址将所要操作的DD RAM地址放入地址计数器忙碌标志位BFBF地址计数器内容读取地址计数器,并查询LCM是否忙碌,BF表示LCM忙碌写入数据将数据写入CG RAM或DD RAM读取数据读取CG RAM或DD RAM的数据图 10-57 1602LCD 内部显示地址 例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)+10000000B(8
5、0H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同的点阵字符图形,如图 10-58 所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是 01000001B (41H),显示时模块把地址 41H中的点阵字符图形显示出来,我们就能看到字母“A”图表 1写数据流程图表 2写命令流程图表 3判断LCD是否忙碌,忙
6、则返回1#include intrins.hsbit rs= P35; /寄存器类型,1表示数据寄存器,2表示指令寄存器sbit rw = P36; /读写选择,1表示读,0表示写sbit ep = P37; /读写使能,下降沿使能void delay(unsigned char ms) /延时n ms unsigned char i; while(ms-) for(i = 0; i123; i+) ; bit lcd_bz() /判断LCD是否忙碌,1忙碌 bit result; rs = 0; rw = 1; ep = 1; _nop_(); result = (bit)(P1 & 0x8
7、0); ep = 0; return result;void lcd_wcmd(unsigned char cmd) /写指令 while(lcd_bz();/判断 LCD是否忙碌 rw = 0; P1 = cmd;void lcd_pos(unsigned char pos) /显示地址 lcd_wcmd(pos | 0x80); /写数据void lcd_wdat(unsigned char dat) rs = 1; P1 = dat;void lcd_wstr(const unsigned char *s) /写字符串 unsigned char i = 0; while(si != 0
8、) lcd_wdat(si);/ 显示字符 delay(1000); i+;void lcd_init() /LCD初始化 lcd_wcmd(0x38); /功能设定 delay(1); lcd_wcmd(0x0c); /显示器开关 lcd_wcmd(0x06); /设定进入模式 lcd_wcmd(0x01); /清除显示屏,把光标移至左上角void main(void) lcd_init();/ 初始化 LCD delay(10); lcd_pos(0x01);/设置显示位置 /i = 0; while(1) lcd_wstr(abcdefg); lcd_pos(0x42); lcd_wcmd(0x01); delay(3);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1