总结资料_1602显示方法·.docx_第1页
总结资料_1602显示方法·.docx_第2页
总结资料_1602显示方法·.docx_第3页
总结资料_1602显示方法·.docx_第4页
总结资料_1602显示方法·.docx_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1602显示方法先写指令构成LCD初始化。(RS端为低电平,RW端为低电平,为选择指令寄存器)1. 第一个指令 功能设定指令2. 第二个指令 显示开关控制指令3. 第三个指令 进入模式设置指令 4. 第四个指令 清屏指令这些指令就构成了LCD的初始化。5. 写数据 (RS端为高电平,RW端为低电平,为选择数据寄存器)6. 使能端E,通过使能端的电平变化把指令送入(忙检测用延时来代替)7. 注意点:(在写字符显示位置时, 因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以 实际写入的数据应该是 01000000B(40H)+10000000B(80H)00000001B (00H) + 10000000B(80H) )一 最简单的显示方法:最直接把要显示的内容写在数组里,程序开始lcd初始化,写字符显示位置指令,然后根据显示的字符所占的位数,写个for循环语句,放入数据函数,这样就可以在指定位置开始显示要显示的内容。程序如下:#include/*程序中没有用到忙检测,而是用的是延时函数来替代忙检测*/#define uchar unsigned char#define uint unsigned int uchar code table=LCD 1602A; /要显示的内容1放入tableuchar code table1=zheng zhibin;/要显示的内容放入table1sbit rs=P07;/数据、指令选择控制线sbit rw=P06;/读写信号控制线sbit en=P05;/使能信号端void delay(uint a) /延时函数uchar b;while(a-)for(b=5000;b0;b-);void lcd_wcom(uchar com) /写指令函数rs=0; /选择指令寄存器rw=0; /选择写操作P2=com; /把指令送入P2口delay(100); /延时一小会,让1602准备接受数据en=1; /使用端电平变化,把指令送入1602delay(100);en=0;void lcd_wdat(uchar dat) /写数据函数rs=1; /选择数据寄存器rw=0; /选择写操作P2=dat; /把要显示的数据送入P2口delay(100); /延时一小会,让1602准备接受数据en=1; /使用端电平变化,把数据送入1602delay(100);en=0;void lcd_init() /1602初始化lcd_wcom(0x38); /选择8位数据总线,双列显示,5*7字形lcd_wcom(0x0c); /开启显示屏,关光标,光标不闪烁lcd_wcom(0x06); /显示地址递增,即写一个数据后,显示位置右移一位lcd_wcom(0x01); /清屏void main() /主函数uchar n,m;lcd_init(); /初始化lcd_wcom(0x80+0x04); /显示地址设为84H,上排第4位for(n=0;n9;n+) /将table中的数据依次写入1602显示lcd_wdat(tablen);delay(100);lcd_wcom(0x80+0x42); /重新设定显示地址为0xc4,即下排第3位for(m=0;m12;m+) /将table1中的数据依次写入1602显示lcd_wdat(table1m);delay(100);while(1);二 滚动的显示方法:之前设定步骤一样,只是在某些指令做更改,如果要使字符向右或向左滚动的话,在初始化中的第三指令(进入模式设置指令)要根据实际情况做更改调整。然后在完整的程序后添加一个指令函数,就是添加(设定显示屏或光标移动方向指令)使产生滚动效果。添加指令为:设定显示屏或光标移动方向指令1. 如果要显现显示屏整体右移就是滚动效果,如果没把初始化函数中的第三条(进入模式设置指令)指令做更改调整,显示效果会变成开始没滚动效果,等所有字符都显示出来后,才整体的向右移,产生滚动效果。就是把第三指令改为(写入新数据后显示屏整体右移1个字)。然后在完整的程序中主函数中最后面添加一个(设定显示屏或光标移动方向指令)指令,就可以显示向右滚动的效果了。2. 如果要显示向左滚动的效果,在之前初始化函数中的第三条(进入模式设置指令)指令中选择(写入新数据后显示屏不移动)指令,然后在完整的程序中主函数中最后面添加一个(设定显示屏或光标移动方向指令)指令,就可以显示向右滚动的效果了。向右滚动程序:#include/*程序中没有用到忙检测,而是用的是延时函数来替代忙检测*/#define uchar unsigned char#define uint unsigned int uchar code table=LCD 1602A; /要显示的内容1放入tableuchar code table1=zheng zhibin;/要显示的内容放入table1sbit rs=P07;/数据、指令选择控制线sbit rw=P06;/读写信号控制线sbit en=P05;/使能信号端void delay(uint a) /延时函数uchar b,c;while(a-)for(b=5000;b0;b-) for(c=5000;c0;c-);void lcd_wcom(uchar com) /写指令函数rs=0; /选择指令寄存器rw=0; /选择写操作P2=com; /把指令送入P2口delay(1); /延时一小会,让1602准备接受数据en=1; /使用端电平变化,把指令送入1602delay(1);en=0;void lcd_wdat(uchar dat) /写数据函数rs=1; /选择数据寄存器rw=0; /选择写操作P2=dat; /把要显示的数据送入P2口delay(1); /延时一小会,让1602准备接受数据en=1; /使用端电平变化,把数据送入1602delay(1);en=0;void lcd_init() /1602初始化lcd_wcom(0x38); /选择8位数据总线,双列显示,5*7字形lcd_wcom(0x0c); /开启显示屏,关光标,光标不闪烁lcd_wcom(0x07); /光标右移,显示屏整体右移lcd_wcom(0x01); /清屏void main() /主函数uchar n,m,d;while(1)lcd_init(); /初始化lcd_wcom(0x80); /显示地址设为84H,上排第4位for(n=0;n9;n+) /将table中的数据依次写入1602显示lcd_wdat(tablen);delay(1);lcd_wcom(0x80+0x40); /重新设定显示地址为0xc4,即下排第3位for(m=0;m12;m+) /将table1中的数据依次写入1602显示lcd_wdat(table1m);delay(1); for(d=0;d37;d+) (添加滚动的指令) lcd_wcom(0x1c); /显示器上字符全部右移一格,但光标不动 delay(50);向左滚动的程序:#include/*程序中没有用到忙检测,而是用的是延时函数来替代忙检测*/#define uchar unsigned char#define uint unsigned int uchar code table=LCD 1602A; /要显示的内容1放入tableuchar code table1=zheng zhibin;/要显示的内容放入table1sbit rs=P07;/数据、指令选择控制线sbit rw=P06;/读写信号控制线sbit en=P05;/使能信号端void delay(uint a) /延时函数uchar b,c;while(a-)for(b=5000;b0;b-) for(c=5000;c0;c-);void lcd_wcom(uchar com) /写指令函数rs=0; /选择指令寄存器rw=0; /选择写操作P2=com; /把指令送入P2口delay(1); /延时一小会,让1602准备接受数据en=1; /使用端电平变化,把指令送入1602delay(1);en=0;void lcd_wdat(uchar dat) /写数据函数rs=1; /选择数据寄存器rw=0; /选择写操作P2=dat; /把要显示的数据送入P2口delay(1); /延时一小会,让1602准备接受数据en=1; /使用端电平变化,把数据送入1602delay(1);en=0;void lcd_init() /1602初始化lcd_wcom(0x38); /选择8位数据总线,双列显示,5*7字形lcd_wcom(0x0c); /开启显示屏,关光标,光标不闪烁lcd_wcom(0x04); /光标左移,显示屏不移动lcd_wcom(0x01); /清屏void main() /主函数uchar n,m,d;while(1)lcd_init(); /初始化lcd_wcom(0x80+0x0f); /显示地址设为84H,上排第4位for(n=0;n9;n+) /将table中的数据依次写入1602显示lcd_wdat(tablen);delay(1);lcd_wcom(0x80+0x4f); /重新设定显示地址为0xc4,即下排第3位for(m=0;m12;m+) /将table1中的数据依次写入1602显示lcd_wdat(table1m);delay(1); for(d=0;d37;d+) (添加滚动的指令) lcd_wcom(0x18); /显示器上字符全部左移一格,但光标不动 delay(50);三.任意字符显示:1602中内部有个存储器CGROM;CGRAM中有一个可以供用户自义定的CGRAM,我们从CGROM表上可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个,实际只有8个字节可用。它的字符码是0000000000000111这8个地址,表的下面还有8个字节,但因为这个CGRAM的字符码规定02位为地址,3位无效,47全为零。因此CGRAM的字符码只有最后三位能用也就是8个字节了。等效为0000X111,X为无效位,最后三位为000111共8个。 就可以显示这8个用户自定义的字符了。可以显示任意字符图案。(其实1602每个显示格是由5*7或5*10的点阵显示的,所以可以自己定义什么图案或者字符,然后依次写出显示图案或字符的代码,就可以显示了)。具体方法就是在程序主函数中初始化LCD后写个写个设定CGRAM的地址的指令,然后利用(CGRAM或DDRAM读出数据的指令)指令在将代码写入CGRAM中,在设定显示位置,然后显示,就可以了。指令:显示任意字符程序:(在0x4f的地方显示字母C)从这个指令可以看出指令数据的高2位已固定是01,只有后面的6位是地址数据,而这6位中的高3位就表示这八个自定义字符,最后的3位就是字模数据的八个地址了。例如第一个自定义字符的字模地址为0100000001000111八个地址。我们向这8个字节写入字模数据,让它能显示出“”#include/*程序中没有用到忙检测,而是用的是延时函数来替代忙检测*/#define uchar unsigned char#define uint unsigned int uchar code table= 0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00 / 字符C字;sbit rs=P07;/数据、指令选择控制线sbit rw=P06;/读写信号控制线sbit en=P05;/使能信号端void delay(uint a) /延时函数uchar b,c;while(a-)for(b=500;b0;b-) for(c=500;c0;c-);void lcd_wcom(uchar com) /写指令函数rs=0; /选择指令寄存器rw=0; /选择写操作P2=com; /把指令送入P2口delay(1); /延时一小会,让1602准备接受数据en=1; /使用端电平变化,把指令送入1602delay(1);en=0;void lcd_wdat(uchar dat) /写数据函数rs=1; /选择数据寄存器rw=0; /选择写操作P2=dat; /把要显示的数据送入P2口delay(1); /延时一小会,让1602准备接受数据en=1; /使用端电平变化,把数据送入1602delay(1);en=0;void lcd_init() /1602初始化lcd_wcom(0x38); /选择8位数据总线,双列显示,5*7字形lcd_wcom(0x0c); /开启显示屏,关光标,光标不闪烁lcd_wcom(0x06); /光标左移,显示屏不移动lcd_wcom(0x01); /清屏void main() /主函数uchar n,m;lcd_init(); /初始化lcd_wcom(0x40);/设定CGRAM地址(地址从指令表中看出(CGRAM或DDRAM读出数据的指令)for(n=0;n8;n+) /将C字代码写入CGRAM中lcd_wdat(tablen);delay(1);lcd_wcom(0x80+0x4f); /设置C字的位置for(m=0;m1;m+)lcd_wdat(m);while(1);多个自定义字符的写法:利用CGRAM内置8个寄存器CGRAM地址:010000000x40首地址,代表字模数据从第一行开放入 010000010x41从第二行开始,上一行空出来010000100x42 010000110x43010001000x44010001010x45 010001100x46 010001110x47lcd_wcom(0x80);/设置字符显示位置第一行第一个位置设置显示地址,然后发送数据lcd_wdat(0x00);/给1602发送字符数据显示lcd_wcom(0x81);lcd_wdat(0x01);/显示一lcd_wcom(0x82);lcd_wdat(0x02);/显示二四显示CGROM寄存器中的字符:CGROM寄存器表中的每个字符都有着自己的地址显示出字符的方法就是在程序里主函数里,LCD初始化后,写显示位置指令,然后直接在数据函数中写字符地址就可以了。显示CGROM寄存器中的字符程序:#include/*程序中没有用到忙检测,而是用的是延时函数来替代忙检测*/#define uchar unsigned char#define uint unsigned int s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论