资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
首先,谈一下自己的感想:刚开始不懂得怎么驱动1602液晶,不知道如何去驱动它,所以就去查资料,而我查到的资料都是罗列式的讲述关于1602的指令操作,显得不是很系统,所以我刚开始看了一遍感觉收获不多,而且有的中文翻译还不是很正确,有的指令和英文的原意有差别,也就是翻译错误!所以,鼓励尽量看英文文档!所以,我就结合自己编写1602驱动的经历写一篇系统的文档! 一 入门篇1. 主要技术参数:一般我们使用一个器件都要先大体了解它的一些技术参数显示容量: 162 字符(两行) 芯片工作电压: 4.55.5V 工作电流: 2.0mA(5.0V) 模块最佳工作电压: 5.0V 字符尺寸: 2.95(W)4.35(H)mm2. 接口的功能说明:知道了一些具体的参数,我们就要知道应用道我们的工程中如何控制它的引脚,也就是如何设计电路编号符号引脚说明1VSS电源地2VDD电源正极3VL液晶显示偏压信号4RS数据/命令选择端(H/L)5R/W读/写选择端(H/L)6E使能信号714D0D7Data I/O (07)15BLA背光正极16BLK背光负极其实外形尺寸,我们去查参考资料就可以啦,通过看了1602的介绍,它的显示原理就是:规定一个字符是由2.95(W)4.35(H)mm的点阵组成,我们通过控制点阵中的哪些点显示出灰度来显示不同的字符!到了这里没有具体介绍这些字符的来源,不过看技术资料就可以了!我们知道1602的RAM存储区有字符库,而和这些字符库通信的是 Data I/O口,这些字符库大体的编码规则是I/O口的高4位和低4位组成一个矩阵,不同字符的显示就是通过控制I/O 口的高低电平,然后形成不同的字符!所以我们可以在程序的控制下,给Data I/O赋值(要显示的字符),然后根据赋的值查字符库,对应的显示在屏幕上! 所以,我们只是大体知道1602的显示原理,没有必要太深入,只要知道这一点,我们就应该有点思路,下面我们要掌握的就是如何编程序,因为不只是简单的给Data I/O一个值他就可以显示的,这是要通过一些控制指令来实现的!3. 第2步说到给Data I/O赋值,也就是 “写数据”,而这些数据写到了哪里呢?通过看液晶的内部结构,知道它的控制器里有808位(80字节)的RAM缓存区,但是如何访问呢?规定:控制器内部有一个数据地址指针,可以通过它来访问!而数据指针的设置是由“指令码”来完成的!指令码是如何构成的呢?数据指针设置如下:指令码功能80H+地址码设置数据地址指针也就是说只要确定了地址码就OK了!从图中看出,1602 第一行的地址码为00-27H 第二行的地址码为40-67H但是从前面知道,1602的屏幕长度只能显示16个字符,所以第一行能显示出字符的地址为00-0FH 第二行能显示出字符的地址为40-4FH所以,当要设置数据地址指针也即在LCD上的哪行显示字符时,由80H+加地址码构成指令码,如 写入到第一行, 则80H+00H=80H,(00h为RAM的首地址对应LCD的第一行首地址)写入到第二行, 则80H+40H=C0H,(40h为RAM的首地址对应LCD的第二行首地址)其实,我刚开始不会驱动1602就是因为不知道向1602的RAM缓存区写数据的原理,现在搞通了,剩下的就是来掌握控制1602显示的一些指令!因为,生手可能看得懂这些指令,但是不知道如何下手来些驱动程序,下面我就结合一下我写过的程序讲一下使用这些指令的思路,记住:指令是固定的,就那么些,我们要作的就是掌握调用这些指令的顺序,让1602按我们的主观意愿来显示出我们想要的东西! 二 指令篇1.先来说一下1602的基本操作时序(中文版的资料,一些时序参数不精确,尽量看英文的)读状态:输入:RS=L RW=H(读) E=H 输出:D0D7=状态字 读数据: 输入:RS=H RW=H(读) E=H 输出:D0D7=数据(时序图参考英文的技术文档)写命令: 输入: RS=L RW=L(写) D0D7=指令码,E=高脉冲 输出:无写数据: 输入: RS=H RW=L(写) D0D7=数据, E=高脉冲 输出:无(时序图参考英文的技术文档)2状态字(STATUS)STA7STA6STA5STA4STA3STA2STA1STA0D7D6D5D4D3D2D1D0STA06当前数据地址指针的数值0027 和 4067STA7读写操作使能1:禁止 0:允许注:对控制器每次读写操作之前,都要进行读写检测,确保STA7为0即只有先进行忙测试,等到SAT7为0时,才可进行读写,这里的忙测试就是基本操作时序里的“读状态”!忙测试(读状态)的程序只要严格按照时序图来些就可以了!但是有个例外:就是在设定数据地址指针的数值时,不用进行忙检测,因为这个地址的构成为0x80H+地址码,STA7肯定为1,因此这一步不需要进行忙检测,所以在编写“写命令”这个函数时要注意设定一个参数,用来判别用不用进行忙测试!(三)所有指令总结:(参考英文版技术文档)描述指令码D7 D6 D5 D4 D3 D2 D1 D0功能清屏(01H)0 0 0 0 0 0 0 1显示清屏:1.数据指针清零 2.所以显示清零回车(02H)0 0 0 0 0 0 1 0显示回车:数据指针清零进入模式设置(主要是在初始化时用到的指令,这些指令就是来设定怎么把字符一个一个读/写入指定地址,当然字符写入后都会静态的显示在屏幕上!怎么让这些静态显示的字符移动,不是在这里设定的)0 0 0 0 0 1 0 0(04H)光标从设定的起始地址向右移动;每读/写一个字符,指针地址加1(写/读下一个字符);0 0 0 0 0 1 0 1(05H)光标停留在设定的起始地址处;每读/写一个字符,指针地址减1(写/读下一个字符)0 0 0 0 0 1 1 0(06H)光标从设定的起始地址向右移动;每读/写一个字符,指针地址加1(写/读下一个字符);0 0 0 0 0 1 1 1(07H)光标停留在设定的起始地址处;每读/写一个字符,指针地址减1(写/读下一个字符)显示(开/关) 光标(开/关) 闪烁(开/关)0 0 0 0 1 A B CA=1:开显示 A=0:关显示B=1:光标开 B=0:光标关C=1:光标闪烁 C=0:不闪烁当将预定的字符写到设定的地址处后,会静态的显示在那里!如何让光标和静态显示的字符移动起来?通过如下指令就可以0 0 0 1 0 0 (10H)字符还是静态显示;光标向左边移动0 0 0 1 0 1 (14H)字符还是静态显示;光标向右边移动0 0 0 1 1 0 (18H)光标和字符整体一起向左移动0 0 0 1 1 1 (1CH)光标和字符整体一起向左移动显示模式设置0 0 1 a b c a=1:数据转换长度为8位(D07)a=0:数据4位(D74)b=1:显示两行b=0:显示一行c=1:510的点阵c=0:58的电阵当了解了这些知识之后剩下的就是按照固定的步骤来写驱动程序了! 三 编程篇1. 初始化化步骤:(1)延时15ms(2)写指令38H(不检测忙信号)(3)延时5ms(4)写指令38H(不检测忙信号)(5)延时5ms(6)写指令38H(不检测忙信号)(7)延时5ms 以后每次写指令、读/写数据之前都要进行忙检测(8)写指令38H (进行检测忙) 延时5ms (9)写指令08H: 关闭显示延时5ms(10)写指令01H: 清屏 延时5ms(11)写指令06H:光标”移动”设置 延时5ms(12)写指令0CH:打开显示 及 光标设置延时5ms (太阳人技术文档中,第8步到12步的延时没有加,这是我调试程序时加上的!所以,如果字符不显示或遇到其它一些问题,可以尝试增大延时时间!)这个初始化步骤是固定的,我们只需修改其中的指令值,达到我们想要的结果,所以我们可以把它封装成一个初始化的函数!2. 其实下一步就是看着时序图写程序了,我们可以把“忙检测(读状态)”、“写指令”、“写数据”、“读数据”分别封装成四个函数,方便调用!3. 下一步就是设置字符显示的位置,这一步我们在第一篇的第3步里已经讲的很清楚了,注意:这一步是不需要忙测试的奥,前面有解释!4. 最后一步就是如何让静态字符移动,这是通过“写指令”来实现的,至于在程序中怎么实现,就看个人的编程习惯了,大体的思路就是设定一个循环,然后在循环里调用一个写指令,实现移动!下面就贴一个具体的实例(模板),有比较详细的说明:使用1602液晶显示的c代码日期:2005-12-15来源:极品蛤蟆的笔记 作者:明皓字体: SMC1602A(16*2)模拟口线接线方式 连接线图: - |LCM-51 | LCM-51 | LCM-51 | -| |DB0-P1.0 | DB4-P1.4 | RW-P2.0 | |DB1-P1.1 | DB5-P1.5 | RS-P2.1 | |DB2-P1.2 | DB6-P1.6 | E-P2.2 | |DB3-P1.3 | DB7-P1.7 | VLCD接1K电阻到GND| - 注:AT89S51使用12M晶振 =*/ #define LCM_RW P2_0 /定义引脚 #define LCM_RS P2_1 #define LCM_E P2_2 #define LCM_Data
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号