51单片机驱动1602液晶(4线串行).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51单片机驱动1602液晶(4线串行)

51单片机驱动1602液晶(4线串行) 2015-06-26 12:04:01???来源:51hei ?? 关键字: 51单片机??1602液晶??4线串行 /*单片机I/O 口使单片机资源的重要组成部分,也是用来扩展外围设备的必选资源,尽可能以更少的I/O口实现更多的功能是单片机工程师追求的目标,现在的一些串行器件也 为这一目标的实现添加了更多的可能性,比如I2C总线,MAXIM力推的1-WIRE等等,都可以以很少的I/O口实现更多的功能,当然这是以降低一定的 速度为代价的。 废话少说,进入正题。 显示器件多见的是LED数码管,LCD液晶屏等。一般的数码管成本低廉,在显示内容要求不多的时候适用;LCD液晶屏以更多的显示空间得到了许多人的爱好,不过成本上要高的多(市场价在20元左右),本文以LCD1602为例说明如何驱动液晶屏。 LCD1602外接的控制接口有RS,R/W,E;数据接口为DB7--DB0。总共有11跟线与单片机的I/O口连接,若使用标准的51单片机, 至少占用了一个端口再加上另一个端口的部分I/O口。这再很多应用场合是不大可取的。所以很有必要减少连接数。从其数据手册上介绍的4线连接方式可以达到 只使用7个I/O口即可满足要求,其中为3个控制口RS,R/W,E和数据口的DB7--DB4;写入数据或指令的顺序是先写高半个字节,再写低半个字 节。 其中P0口的高四位接到LCD1602的DB7-DB4,P3.0-P3.1分别接RS,R/W,E; 下面给出驱动源程序*/ #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char #define TRUE 1 #define FALSE 0 #define nop _nop_() #define PtData P0 //定义连接口线, #define PtContr P3 sbit RS=PtContr^0; sbit RW=PtContr^1; sbit E=PtContr^2; void InitialLcd(); void WriteLcdInstr(uchar); void WriteLcdData(uchar); void CheckLcdBusy(); uchar HexToDdram(uchar); void Delay(unsigned int); main() {Delay(1000); InitialLcd(); WriteLcdInstr(0x80); WriteLcdData(e); WriteLcdData(l); WriteLcdData(k); WriteLcdData(e); WriteLcdData(l); WriteLcdData(i); WriteLcdData(k); WriteLcdData(e); WriteLcdInstr(0xc0); WriteLcdData(L); WriteLcdData(C); WriteLcdData(D); WriteLcdData(1); WriteLcdData(6); WriteLcdData(0);? WriteLcdData(2); while(1) { WriteLcdInstr(0x0f); Delay(30000);? WriteLcdInstr(0x08); Delay(40000); } } //----------------LCD1602函数---------------------// //---初始化 void InitialLcd() {Delay(600);//延时应大于15ms,不同的晶振使需要修改,本程序再6M下调试通过 RS=0; RW=0;nop; E=0;nop; E=1;nop; PtData=0x20;//??? nop; E=0; Delay(200);//延时应大于4.1ms E=1;nop; PtData=0x20;//??? nop; E=0; Delay(5);//延时应大于100us E=1;nop; PtData=0x20;//? nop; E=0;//设置4位操作; WriteLcdInstr(0x01);//清屏 WriteLcdInstr(0x28);//设置4位操作,1行显示,5x8 WriteLcdInstr(0x02);//光标归位 WriteLcdInstr(0x06);//AC自动加1,画面不动 WriteLcdInstr(0x0f);//0x0f:光标闪烁开; } //---写指令 void WriteLcdInstr(uchar Temp) {CheckLcdBusy(); RS=0;

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档