ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:1.30MB ,
资源ID:29903585      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29903585.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(lcd0602使用说明.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

lcd0602使用说明.docx

1、lcd0602使用说明5.自制单片机之五 LCD1602的驱动LCD1602已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于 HD44780液晶芯片的,控制原理是完全相同的, 因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型 LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线 VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,定义 如下表所示:字符型LCD的引脚定义引脚号引脚名电平输入#输岀作用1Uss电源地 |2Ucc电源C+5U)3Uee对比调整电压4RS8/1输入咼入数据5R/w0/1输入”向

2、LCD写入指今或数据 从LCD谏取信息6E1输入使能信号,=吋谖取信息. 毗下降沿)齡指令1Dsa0/1输入#输岀数据总线lirw肌最低位)8DB10/1输入禽岀数据总线9DB20/1输入#输出数据总线HneZ1Q0/1输入#输岀数据总线lines11DE即0/1输入#输岀数据总线lineH120/1输入#输出数据总线lines13DBG0/1输入#输出数据总线140/1输入#输岀数据总线line7(最高位)15(I+UccLCD背光电源正极16K接地LCD背光电源员极HD44780 内置了 DDRAMCGRO和 CGRAMDDRA就是显示数据 RAM用来寄存待显示的字符代码。 共80个字节,

3、其地址和屏幕的对应关系如下表:显示位置1234567DDRAM第一行D1H03H0UH05H06 H 27H地址第二行40HMH42HH3H44H屿H昨H67H也就是说想要在 LCD1602屏幕的第一行第一列显示一个 A字,就要向DDRA的00H地址写入 “ A”字的代码就行了。但具体的写入是要按 LCD模块的指令格式来进行的,后面我会说到的。那么一行可有 40个地址呀?是的,在 1602中我们就用前16个就行了。第二行也一样 用前16个地址。对应如下:DDRAM地址与显示位置的对应关系OOH 05H 06H Q7H 08H 09H 0仙 OBH OCH ODH OEH 6FH40H 41H

4、I2H 43H 耳H 45H 46H 47H 49H 4AH 4BH UCH 4DH 4EH 4FH我们知道文本文件中每一个字符都是用一个字节的代码记录的。 一个汉字是用两个字节的代码记录。在PC上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里 和BIOS里都固化有字符字模。什么是字模?就代表了是在点阵屏幕上点亮和熄灭的信息数 据。例如“ A”字的字模:0111010001100011000111111 10001100010,用“”代表1。看上图左边的数据就是字模数据,右边就是将左边数据用“O”代表出是个“A”字了吗?在文本文件中“ A”字的代码是 41H,PC收到41H的

5、代码后就去字模文件中将代表A字的这一组数据送到显卡去点亮屏幕上相应的点,你就看到“ A”这个字了。刚才我说了想要在 LCD1602屏幕的第一行第一列显示一个 A字,就要向DDRA啲00H地址写入“A”字的代码41H就行了,可41H这一个字节的代码如何才能让 LCD模块在屏幕的阵点上显示“A”字呢?同样,在 LCD模块上也固化了字模存储器,这就是 CGRO和CGRAMHD44780内置了 192个常用字符的字模,存于字符产生器 CGROM(Character Generator ROM) 中,另外还有8个允许用户自定义的字符产生 RAM称为CGRAM(Character Generator RA

6、M。卜图说明了 CGROM和 CGRA与字符的对应关系。CGMM中字符诃与字字符字複关系对胆表wentao 口 rogramfBii con从上图可以看出,“A”字的对应上面高位代码为 0100,对应左边低位代码为 0001,合起来就是01000001,也就是41H。可见它的代码与我们 PC中的字符代码是基本一致的。因此我们在向DDRAM写 C51字符代码程序时甚至可以直接用 P1= A这样的方法。PC在编译时就把“A”先转为41H代码了。字符代码0x000x0F为用户自定义的字符图形 RAM对于5X8点阵的字符,可以存放 8组,5X10点阵的字符,存放 4组),就是CGRAMT。后面我会详细

7、说的。0x200x7F为标准的ASCII码,0xA00xFF为日文字符和希腊文字符, 其余字符码(0x10Ox仆及0x800x9F)没有定义。那么如何对DDRAM勺内容和地址进行具体操作呢,下面先说说HD44780的指令集及其设置说 明,请浏览该指令集,并找出对 DDRA啲内容和地址进行操作的指令。共11条指令:1.清屏指令指令功能指令编码时囘/nsRSDB7DB6DBSDBU063DB2DD1DBS清屏0000000011.64功能:1清除液晶显示器,即将 DDRA的内容全部填入空白”的ASCII码20H; 2光标归位,即将光标撤回液晶显示屏的左上方 3将地址计数器(AC)的值设为0。2.光

8、标归位指令指令功能指令编码理行 时I可/msRSR/UDB7DB6DBSDBMDB3DB2DB1DBO光标归位000000001器104功能:1把光标撤回到显示器的左上方 ;2把地址计数器(AC)的值设置为0;3保持DDRA的内容不变。3.进入模式设置指令扌旨令功能指令编码时冋/USRSR/WD87DB6DB4DB3DB20B1逬入模式设置000E)0041I/DS功能:设定每次定入 1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。 参数设定的设置情况如下所示: 位名标左移显示屏不移动1=写入新数据后光标右移S 0=写入新数据后1=写入新数据后显示屏整体右移 1个字符4.显示开关

9、控制指令位名D设置0=显示功能关1=显示功能开C0=无光标仁有光标B0=光标闪烁1=光标不闪烁5.设定显示屏或光标移动方向指令指令功能指令编码/usRSR/WDB7DB6DBSDB4DB3DB2DB1DBO00g00 |1S/CR/LXX功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:S/C R/L设定情况0 0光标左移1格,且AC值减10 1光标右移1格,且AC值加11 0显示器上字符全部左移一格,但光标不动1 1显示器上字符全部右移一格,但光标不动6.功能设定指令1=数据总线为8位N 0=显示11=显示2行F 0=5X7点阵/每1=5X 10点阵/每字符7.设定CGRA哋址指令指

10、令功能指令编码/sRSR/WDB7DB6DBSDB4DB3DB2DB1DBO设定CGRAI4地址0g1地址位)40功能:设定下一个要存入数据的 CGRAI的地址。8.设定DDRA地址指令指令功能拒令编码/USRSR/UDB7DB6DBliDB3082DB1DB0设定DDRAM 地址001CGRAM的地址“位)3功能:设定下一个要存入数据的 CGRAI的地址。9.读取忙信号或AC地址指令指令功能指钟码RSR/WDB7DBA DB5 DR已 DS3 DB2 DB101rn盹内容卩位)功能:1读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的 数据或指令;当BF=O时,液晶显

11、示器可以接收单片机送来的 数据或指令;2读取地址计数器(AC)的内容。10.数据写入DDRA或CGRAI指令一览指令功能指令编码/USRSR/lDB7DB6DBSDB4DB3DB2D叭DB0数据写入到DDR朋或 CGRAM10要写入的数据叮ME功能:1将字符码写入 DDRAM以使液晶显示屏显示出相对应的字符 ;2将使用者自己设计的图形存入 CGRAM11.从CGRAM或 DDRA读出数据的指令一览指令功能扌自令编码I聽/usKSR/UDB7DB6DBSDB4DB3DB2DB1DBO从仙RAH或 DDRAMi咚出 数据11要读出的数据D0功能:读取 DDRAM或 CGRAI中的内容。基本操作时序

12、:输入:RS=L RW=H读状态E=H输出:DBA DB7= 犬态字写指令码读数据E=H输出:DBA DB7=据写数据据输入:RS=L,RW=L E= 下降沿脉冲,DB0- DB7=旨令输出:无输入:RS=H,RW=,H输入:RS=H RW=L E= 下降沿脉冲,DBZ DB7=输出:无看了那么多是不是有些晕?我也是啊,不过慢慢理解还是没问题的。 实际上面说了那么多具体怎么操作我还是没会啊?好 ! 咱就简单点。举个实例,就在 LCD1602屏幕上第一行第一列显示个“ A”字。1. 先初始化。(老大!好像上面没初始化这条指令啊!)先别拿东西扔我,说明书上是这么说的。也就先写入些指令。/ 先定义接

13、口# include *P1DB0 DB7P2.0 RSP2.1 RWP2.2 E*/# define LCD_DB P1sbitLCD_RS=P2A0;sbitLCD_RW=P2A1;sbitLCD_E=P2A2;定义函数 *# define uchar unsigned char# define uint unsigned intvoid LCD_init(void);/ 初始化函数void LCD_write_command(uchar command);/ 写指令函数void LCD_write_data(uchar dat);/ 写数据函数void LCD_disp_char(uch

14、ar x,uchar y,uchar dat);/ 在某个屏幕位置上显示一个字符 ,X(0-16),y(1-2)/void LCD_check_busy(void);/ 检查忙函数。我没用到此函数,因为通过率极低。 void delay_n40us(uint n);/ 延时函数*delay_n40us(100); 实践证明,我的LCD1602上,用for循环200次就能可靠完成清屏指令。*void LCD_write_command(uchar dat)LCD_DB=dat;LCD_RS=0; 指令LCD_RW=0; 写入LCD_E=1;/ 允许LCD_E=0;delay_n40us(1);

15、实践证明,我的 LCD1602上,用for循环1次就能完成普通写指令。*void LCD_write_data(uchar dat)LCD_DB=dat;LCD_RS=1; 数据LCD_RW=0; 写入LCD_E=1;/ 允许LCD_E=0;delay_n40us(1);*void LCD_disp_char(uchar x,uchar y,uchar dat)uchar address;if(y=1)address=0x80+x;elseaddress=0xc0+x;LCD_write_command(address);LCD_write_data(dat);*/*检查忙函数 *void L

16、CD_check_busy() /实践证明,在我的 LCD1602上,检查忙指令通过率极低,以/至于不能正常使用 LCD因此我没有再用检查忙函数。而使do/ 用了延时的方法,延时还是非常好用的。我试了一下,用 LCD_E=0;普通指令只要 1 次循就可完成。清屏指令LCD_RS=0;能完成。LCD_RW=1;LCD_DB=0xff;LCD_E=1;while(LCD_DBA7=1);/for 循环作延时,/ 要用 200 次循环便*void delay_n40us(uint n) uint i;uchar j;for(i=n;i0;i-)for(j=0;j2;j+); / 在这个延时循环函数中

17、 我只做了 2 次循环,/ 实践证明我的 LC D 1 602上普通的指令只需 1 次循环就能可靠完成。/*/*主函数 *void main(void)LCD_init();LCD_disp_char(0,1,A);while(1);/*具体电路的制作是很简单的,就接了两个电阻,一个是 10 欧姆的背光限流电阻,另一个是2K的LCD极板电压调节电阻。这两个电阻的阻值怎么定呢?背光比较简单,它就相当于在 后面接了几个发光二极管,任何时候你只要在 15、16 脚串上个 1 00欧的电位器接上电源,调节电位器,觉得亮度合适。此时的阻值便可。 LCD液晶极板驱动电压调节电阻的确定就稍微麻烦一点。在各数

18、据线,控制线接好关通上电源的前提下在第 3脚(VEE)和地之间接一个10K的电位器。调节电位器。当 3脚电压高时为全亮,电压为 0时为全暗(液晶全显示为黑 块) 。你用电位器把屏幕从全暗刚好调到变亮。这时便可调试程序。待屏幕能正确显示后再 细调电位器,使对比度合适。这时的阻值便可确定,然后换成等值的固定电阻焊上便可。我们接着上次的系统板制做:LLLLLLL1hiiriirrnTriiiiirri I门 v1、小 r7 n - 丄-r h j T-8.8. Q 8.8.8.新买的1602LCD, 20元,贵不?反面:组装后:具体电路图:_ 自己选择号ATT芻51 的PD-阳捋 :自己迤择与Are

19、aesi 的三幄珥0 口接DSODBTESe/f LCD t 1602UL1UBLA接口说明:运行:用户自定义字符的应用:我们从CGRO表上可以看到,在表的最左边是一列可以允许用户自定义的 CGRAM从上往下看着是16个,实际只有8个字节可用。它的字符码是00000000 00000111这8个地址,表 的下面还有8个字节,但因为这个 CGRA的字符码规定0 2位为地址,3位无效,4 7全 为零。因此CGRA的字符码只有最后三位能用也就是 8个字节了。等效为0000X111, X为无 效位,最后三位为 000 111共8个。如果我们要想显示这 8个用户自定义的字符,操作方法和显示 CGROM的

20、一样,先设置 DDRAM位置,再向DDRAMI入字符码,例如“ A”就是 41H。现在我们要显示 CGRAI的第一个自定义字符,就向DDRA写入00000000B(00H),如果要显示第 8个就写入00000111(08H),简单吧!好!现在我们来看怎么向这八个自定义字符写入字模。 有个设置CGRAI地址的指令大家还记得吗?赶快再找出来看看。九设定CGRftlflte址指令指令功能指令编码/J5RSR/WDB7DB6BB5DMD83DB2DB1设定CGRAM 地址0001CGRflM的地址位)J10功能:设定下亠个要存入数据的WR刪的地址。从这个指令可以看出指令数据的高 2位已固定是01,只有

21、后面的6位是地址数据,而这 6 位中的高3位就表示这八个自定义字符, 最后的3位就是字模数据的八个地址了。 例如第一个自定义字符的字模地址为01000000 01000111八个地址。我们向这 8个字节写入字模数据,让它能显示出“C地址:01000000数据:0001000001000001000001100100001000001001010000110000100001000100000010000100010100001001图示:OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO oooooooo8 个自定义字符显示出一个心的图案:# include uns

22、igned char table1=0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,0x18,0x1E,0x1f,0x1f,0x1f,0 x1f,0x1f,0x1f,0x07,0x1f,0x1f,0x1f,0x1f,0 x1f,0x1f,0x1f,0x10,0x18,0x1c,0x1E,0x1E,0 x1E,0x1E,0x1E,0x0f,0x07,0x03,0x01,0x00,0 x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0 x0f,0x07,0x01,0x1f,0x1f,0x1f,0x1f,0x1f,0 x1c,0x18,0

23、x00,0x1c,0x18,0x10,0x00,0x00,0 x00,0x00,0x00;/ 心图案un sig ned char table=0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00; 字符C#defineCLEARSCREEN LCD_write_command(0x01)/*定义接口 */#defineLCDIO P2sbit LCD1602_RS=P3P;sbit LCD1602_RW=P3A1;sbit LCD1602_EN=P3A2;void LCD_write_command(unsigned char command);/ 写入指令函数vo

24、id LCD_write_dat(unsigned char dat);/ 写入数据函数void LCD_set_xy( unsigned char x, unsigned char y );/ 设置显示位置函数void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat);/ 显示一个字符函数void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s);/ 显示字符串函数void LCD_init(void);/ 初始化函数void delay_nm

25、s(unsigned int n);/ 延时函数void LCD_init(void)CLEARSCREEN;/clear screenLCD_write_command(0x38);/set 8 bit data transmission mode LCD_write_command(0x0c);/open display (enable lcd display) LCD_write_command(0x80);/set lcd first display addressCLEARSCREEN;/clear screen/*void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat) LCD_set_xy( x, y ); LCD_write_dat(dat);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1