文档详情

液晶屏负像=.doc

发布:2018-03-21约2.27千字共9页下载文档
文本预览下载声明
液晶屏负像 proteus截图。 实际显示效果: 因为我用的1602液晶第二排显示有问题(硬件原因),所以图片中的第二排只显示了一半,如果你们使用的液晶是正常的话绝对不会出现这种问题。 1602液晶是一款价格便宜使用方便的字符液晶,使用非常广泛,下面就来介绍一下这款液晶的使用方法。 要想驱动液晶正常显示字符,必需先弄清楚它的读写时序,弄清了时序其它就简单了。 下面是读写时序的简要文字说明(截图来自1602的datasheet) 下面再来看一下1602的具体时序图,弄清楚了这个写程序就不难了: 时序详细分析:以读状态为例分析,先将EN置低,RS置低,RW置高,等待Tsp1的时间,具体时间(datasheet中有说明),然后将EN拉高,持续tpw的时间,将EN拉低,紧接着读取IO口的数据就可以了,一个字节的读取就完毕了。 读数据,写数据的分析方法类似,在这里我就不在赘述。直接给出程序,大家一看就应该能明白。 void write_data(uchar date) //写数据程序 { read_busy(); //都忙操作 lcdrs=1; lcdrw=0; P0=date; lcden=1; delay(10); lcden=0; } void write_com(uchar com) //写命令程序 { read_busy(); lcdrs=0; lcdrw=0; P0=com; lcden=1; delay(10); lcden=0; } 下面是都忙操作的时序,都忙很重要,因为液晶反应比较慢,只有等待它不忙的时候我们才能进行读写操作,否则都是无效的,所以我们在进行读写操作时一定要进行读忙检测,才能确保每次读写数据都是有效的。 void read_busy() //读忙检测,每次对液晶进行读写操作是,都要进行读忙检测 { ?lcdrs=0; ?lcdrw=1; ?lcden=1; ?while(P0 0x80); ?lcden=0; } 下面贴出完整的程序: /***************/zhangjiayue123/home******************** 程序功能:1602逐个字符显示 程序编译环境:keil4 程序运行环境:QC1602-7 测试板:hot 51 整理人:张家越???QQ:435835181 整理时间:2011-04-19 *******************/zhangjiayue123/home**********/ #include reg52.h #define uchar unsigned char #define uint unsigned int uchar tab1[]=zhangjiayue;??? //将需要显示的字符先放在数组中,显示的时候直接调用 uchar tab2[]=1990-09-29; sbit lcden=P2^7;????? //位定义 sbit lcdrw=P2^6; sbit lcdrs=P2^5; void delay(uint t)??????? //延时函数,液晶反应比较慢需要一定延时 { ?uint i,j; ?for(i=120;i0;i--) ?for(j=t;j0;j--); } void delay1(uint i)???????? //短暂延时 { ?while(--i); } void read_busy()??????? //读忙检测,每次对液晶进行读写操作是,都要进行读忙检测 { ?lcdrs=0; ?lcdrw=1; ?lcden=1; ?while(P0 0x80); ?lcden=0; } void write_com(uchar com)????? //写命令程序 { ?read_busy(); ?lcdrs=0; ?lcdrw=0; ?P0=com; ?lcden=1; ?delay(10); ?lcden=0; } void write_data(uchar date)????? //写数据程序 { ?read_busy();??? //先进行都忙操作 ?lcdrs=1;????? ?lcdrw=0; ?P0=date; ?lcden=1; ?delay(10); ?lcden=0; } void init()????????? //液晶初始化 { ?write_com(0x38); ?write_com(0x0C); ?write_com(0x06); }? void main() {? ?uchar m,n; ??write_com(0x01);?? //清屏显示 ?init();????? //1602的初始化 ?write_
显示全部
相似文档