液晶屏负像=.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
液晶屏负像=

液晶屏负像 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_

文档评论(0)

173****7830 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档