- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
12.1.1 硬件电路设计 本项目电路图如下: 12.1.2 基本功能 LCM1602在AT89C51的控制下第一行静止显示“”,第二行以闪烁方式显示“”。 12.2 程序设计 12.2.1 程序代码设计 采用C语言编写了液晶显示程序。程序由LCM1602.c和l602drv8i.c这两个文件组成,LCM1602是本项目的主程序;1602drv8i.c是液晶显示模块LCM1602的驱动程序 。在此,仅介绍本项目的驱动程序,其代码如下: /************************************************* LCM1602驱动程序 8线间接控制方式 晶体频率12MHz ***************************************************/ /*1602接口定义*/ #define LCM P0 #define RS P2^5 // 0,command;1,data #define RW P2^6 // 0,write;1,read #define E P2^7 // 下降沿有效 /*常数定义*/ #define CMD 0 // RS=0,命令 #define DAT 1 // RS=1,数据 // 模块忙闲判断 void RdBusy(void){ char flag=0xff; do{ LCM=0xff; RS=CMD; RW=1; E=1; _nop_(); _nop_(); _nop_(); // 这三句很重要 flag=LCM; E=0; flag=0x80;} while(flag); } // 写命令 void WrCommand(char command) { LCM=command; RS=CMD; RW=0; E=1; E=0; RW=1; RdBusy(); } // 等待LCM完成本次操作 // 写数据 void WrData(char wrdata) { LCM=wrdata; RS=DAT; RW=0; E=1; E=0; RW=1; RdBusy(); } // 等待LCM完成本次操作 12.2.2 仿真结果 下图是PROTEUS中仿真结果的截图,第一行显示内容始 终保持不变,第二行显示内容每隔0.5秒变化一次。 12.3 相关知识 12.3.1 LCM1602外观及功能 LCM1602是最常见的点阵字符型液晶显示模块,由 液晶板、控制器HD44780、驱动器HD44100及若干电 阻电容组成。其液晶板上分2行,每行排列着16个 5×7的点阵,专门用于显示字母、数字以及符号。 下图是带背光的LCM1602的实物图: 12.3.2 LCM1602与单片机连接 下图是8位直接控制方式电路: 4位间接控制方式电路: 4位直接控制方式电路: 12.3.3 LCM1602的读写操作 要正确操作LCM1602,就必须满足它的时序要求,内 嵌HD44780控制器的液晶显示模块的读、写操作时序 如下图所示 : 12.3.4 LCM1602的指令 LCM1602的指令集 如下表所示: 12.3.5 LCM1602字符显示位的控制 LCM1602的显示位与DDRAM地址的对应关系如下表所示。 12.3.6 LCM1602的初始化 单片机开始运行时必须先对LCM1602进行初始化,否则模块无法正常显示。LCM1602有两种初始化方式,一种是模块内部硬件初始化,另一种是软件初始化。硬件初始化执行以下动作:清除显示,设置为8位数据接口,单行显示,5×7点阵字符,关显示,关光标,关闪烁,地址自动递增,关显示移位。硬件初始化并不适合LCM1602,要让LCM1602正常工作,必须对其进行软件初始化,软件初始化过程见下面的代码。 //模块初始化 void LcmInit(void) { LCM=0; delayx5ms(40); // 延迟200ms WrCommand(0x38);// 8bit接口,两行显示,5×7点阵 delayx5ms(2); // 延迟10ms WrCommand(0x38); // 同上,该指令要写两次 delayx5ms(1); // 延迟5ms WrCommand(0x06); // 地址加一,字符不移动 WrCommand(0x0c);// 开显示,光标不显示,光标不闪烁 WrCommand(0x01); // 清屏 }
原创力文档


文档评论(0)