技术支持:/bbs主 讲:wang1jinWang1jin 带您从零学单片机配套开发板:WJ-V4.0 AVR+51开发板第三章:LCD部分技术支持:/bbs主 讲:wang1jin单片机驱动LEDØLCD1602简介ØLCD1602硬件原理图ØLCD1602工作方式ØLCD1602时序及应用ØLCD1602显示应用流程Ø实例操作:在LCD1602上显示一个字符Ø实例操作:在LCD1602上显示一串字符Ø实例操作:在LCD1602上显示自定义图形这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里我们使用常用的2行16个字的LCD1602液晶模块来介绍它的编程方法。
技术支持:/bbs主讲:wang1jinLCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,其代码与标准的ASCII字符代码一致。
因此,我们只要写入显示字符的ASCII码即可,这种标准化的设计给使用带来很大的方便。
比如大写的英文字母“A”的ASCII代码是01000001B (41H),显示时单片机往液晶模块写入显示指令,模块就把地址41H中的点阵字符图形显示出来,我们就能在相应位置上看到字母“A”。
技术支持:/bbs主讲:wang1jin技术支持:/bbs主 讲:wang1jinLCD1602引脚图RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
RW 为读写信号线,高电平时进行读操作,低电平时进行写操作。
E 端为使能端。
D0~D7为8位双向数据线。
各厂家生产的LCD1602液晶屏显示器其引脚不一定相同,在使用的时候要注意查阅厂家提供的技术资料。
技术支持:/bbs主 讲:wang1jinLCD1602硬件应用图VCCVCC R491KLED26LED12P12VCCLCD1602U17LCD1602G N D 1V C C 2V L 3R S 4R W 5E 6D 17D 28D 39D 410D 511D 612D 713D 814B L +15B L -16R514.7R551K00P00P01P02P04P03P10P05P12P11P06P07这个是LCD1602的应用图.这是8位总线的工作方式.如果需要工作在4位总线的方式,则数据是从D4-D7输入到LCD 内部.把8位数据分成二次送入进D4-D7就可以.LCD 的3脚是对比度控制电阻,一般1K 就可以满足要求.如果大于4.7K 后,LCD 可能显示不清楚.在应用LCD1602的时候最好在背光上加一个限流电阻.技术支持:/bbs主 讲:wang1jinLCD1602操作时序技术支持:/bbs主 讲:wang1jinLCD1602指令表指令1:清显示,指令码01H,光标复位到地址00H 位置。
指令2:光标复位,光标返回到地址00H 。
指令3:光标和显示模式设置 I/D :光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:显示开关控制。
D :控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C :控制光标的开与关,高电平表示有光标,低电平表示无光标 B :控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位 S/C :高电平时移动显示的文字,低电平时移动光标。
指令6:功能设置命令 DL :高电平时为4位总线,低电平时为8位总线 N :低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:字符发生器RAM 地址设置。
指令8:DDRAM 地址设置。
指令9:读忙信号和光标地址 BF :为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:写数据。
指令11:读数据。
技术支持:/bbs主 讲:wang1jinLCD1602内部RAM地址LCD1602内部RAM 显示缓冲区地址的映射图,00~0F 、40~4F 分别对应LCD1602的上下两行的每一个字符,只要往对应的RAM 地址写入要显示字符的ASCII 代码,就可以显示出来。
技术支持:/bbs主 讲:wang1jinLCD1602时序图我们关注的地方是中间的Valid Data 即有效数据区,在进行读或写,无非都是想进行数据的传送,在时序图中,为了看起来更清楚些,我们画上两根线,并标上A 、B 、C 、D 字样,注意这个位置各个引脚的状态,下面先来分析一下读操作时序。
技术支持:/bbs主 讲:wang1jin 在进行读操作的时候,RW 脚置于1,RS 脚则根据读的内容(状态或数据)置为1或0,注意看图中的A 和B 两根线,在A 位置,E 脚置为1,经过td 时间后,可以在数据口读到正确的数据,由于td 的时间极短(ns 级),我们的单片机操作一般是us 级,所以可以不考虑这个时间差,在将E 脚置为1之后,就可以紧跟着指令去读取数据,在读到数据后,再将E 脚置为0,经过THD2时间后,数据口上的数据失效。
Wang1jin 带您从零学单片机技术支持:/bbs主 讲:wang1jin LCD1602时序技术支持:/bbs主 讲:wang1jin在进行写操作的时候,RW 脚要置为0,RS 脚根据写的内容不同(指令或数据)置为1或0,同时,注意C 和D 两根线,我们在将E 脚置为1之前,要先将数据送到数据口上,然后,在C 位置,将E 脚置为1,经过tPW 延时后,再将E 脚置为0,在这个时间段内必须保证数据口上的数据稳定不变,为有效的数据。
同理,由于tPW 这些延时相对较短(ns 级),所以在单片里也不必考虑延时问题。
Wang1jin 带您从零学单片机技术支持:/bbs主 讲:wang1jin LCD1602显示流程1.设置显示模式2.写显示字符的位置3.写显示字符数据4.完成显示在对LCD1602进行操作的时候需要判断LCD1602是否处于忙的态.如果是处于忙的状态,就需要等LCD1602忙完,再对它进行读写作.技术支持:/bbs主 讲:wang1jin LCD1602自定义显示字符方法首先取得想要的中文或者图形的字模数组。
通过字模软件不能直接提取5*8点阵的字模数据,可以通过手动提取的方法。
如下图所示,对应一个字符显示区域。
每8个字节,组成一个点阵数组。
将生成的点阵数组保存到CGRAM存储器中,生成自定义字符。
1602内部CGRAM 用于自定义的字符点阵的存储,总共64字节。
由上一步点阵提取可知,每一个字符由8个字节数据组成。
所以64字节CGRAM 存储器,能够存储8组自定义字符的点阵数组。
按照CGRAM 地址划分为 0-7为第一组,8-15为第二组,依次类推56-63为第8组数据。
CHARACTER CODE是数据的显示地址.0-7的范围.能存储8位自定义的显示数据.CGRAM ADDRESS是存储数据的地址,从0-63共64个字节.存储64个数据.我们写入的数据是0x40 – 0x7F,共128位.CGRAM DATA是写入字符的地址,每一个数对应有8个数据.内部常用字符显示时,显示编码是从0x20开始的。
0x00-0x0F是专门留给自定义字符显示的。
0x00-0x07和0x08-0x0F内容是一样的。
例如:调用0x01 位置和0x09位置,显示的内容是一样的。
技术支持:/bbs主讲:wang1jin技术支持:/bbs 主讲:wang1jin技术支持:/bbs主 讲:wang1jin LCD1602自定义显示字符方法1.设置向CGRAM 中存入这个数据.初始地址是0x40.然后存一位向后加8.总共能存8位自定义的字符2.然后可以把自定义的数据送入到LCD 的CGRAM 中.3.向LCD 写指令,送入需要显示数据的地址.4.向LCD 写指令,把显示的数据指向LCD 的CGRAM 存储的位置.显示出自定义字符.LCD1602自定义显示字符的方式共四步,如下面所示:技术支持:/bbs主 讲:wang1jin LCD1602自定义字符方法1.建立一个字符数组uchar LCD_Data1[]={0x01,0x03,0x1D,0x11,0x1D,0x03,0x01,0x00};2.设置CGRAM 地址,写指令.Write_LCD(0x40,0);3.把数据送入CGRAM 地址内.for(i = 0; i < 8 ; i ++ ){Write_LCD(LCD_Data1[i],1);}4.写需要显示的位置指令.Write_LCD(0x80,0);5.把CGRAM 的0位的数据送向LCD1602,显示数据存储的数据.Write_LCD(0x00,1);技术支持:/bbs 主 讲:wang1jin 课后作业:1.在LCD1602上面第一行上面显示电子爱好者 网址.在第二行上面显示一个变量从 0一直加到9999 9999 循环.并在第二行上面显示按下按键的值和长短按标志.2.把本章中的LCD1602八位总线方式程序改成四位总线方式显示.3.利用本章的LCD 自定义的显示方式,在LCD 上显示一个自己设计的图形.然后轮流切换做成一个LCD 动画.Wang1jin 带您从零学单片机技术支持:/bbs 主 讲:wang1jin 欢迎光临我们的论坛:/bbs Wang1jin 带您从零学单片机。