- 1、本文档共76页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LCD1602的一般初始化设置为: 写命令38H,即显示模式设置(16?2显示,5?7点阵,8位接口)。 写命令08H,显示关闭。 写命令01H,显示清屏,数据指针清0。 写命令06H,写一个字符后地址指针加1。 写命令0CH,设置开显示,不显示光标。 需说明,在进行上述设置及对数据进行读取时,通常需要检测忙标志位BF,如果为1,则说明忙,要等待;如果BF为0,则可进行下一步操作。 5.LCD1602基本操作 LCD慢显示器件,所以在写每条命令前,一定要查询忙标志位BF,即是否处于“忙”状态。如LCD正忙于处理其他命令,就等待;如不忙,则向LCD写入命令。标志位BF连接在8位双向数据线的D7位上。如果BF=0,表示LCD不忙;如果BF=1,表示LCD处于忙状态,需等待。LCD1602的读写操作规定见表5-4。 图5-18 单片机与LCD1602接口电路 由图5-18可看出,LCD1602的RS、R/W和E这3个引脚分别接在P2.0、P2.1和P2.2引脚,只需通过对这3个引脚置“1”或清“0”,就可实现对LCD1602的读写操作。具体来说,显示一个字符的操作过程为“读状态→写命令→写数据→自动显示”。 * (1)读状态 是对LCD1602 的“忙”标志BF进行检测,如果BF=1,说明LCD处于忙状态,不能对其写命令;如果BF=0,则可写入命令。检测忙标志的函数具体如下: void check_busy(void) //检查忙标志函数 { uchar dt; do { dt=0xff; // dt为变量单元,初值为0xff E=0; RS=0; //按照表5-4读写操作规定RS=0,E=1时才可以读忙标志 RW=1; E=1; dt=out; // out为P0口,P0口的状态送入dt中 }while(dt0x80); // 如果忙标志BF=1,继续循环检测,等待BF=0 E=0; // BF=0,LCD不忙,结束检测 } 函数检测P0.7脚电平,即检测忙标志BF,如=1,说明LCD处于忙状态,不能执行写命令;=0,可以执行写命令。 (2)写命令 写命令函数如下: void write_command(uchar com) //写命令函数 { check_busy(); E=0; //按规定RS和E同时为0时可以写入命令 RS=0; RW=0; out=com; //将命令com写入P0口 E=1; //按规定写命令时,E应为正脉冲,即正跳变,所以前面先置E=0 _nop_( ); //空操作1个机器周期,等待硬件反应 E=0; // E由高电平变为低电平,LCD开始执行命令 delay(1); //延时,等待硬件响应 } * (3)写数据 将要显示字符的ASCII码写入LCD中的数据显示RAM(DDRAM),例如将数据“dat”,写入LCD模块,写数据函数如下: void write_data(uchar dat) //写数据函数 { check_busy(); //检测忙标志BF=1则等待,若BF=0,则可对LCD操作 E=0; //按规定写写数据时,E应为正脉冲,所以先置E=0 RS=1; //按规定RS=1和RW=0时可以写入数据 RW=0; out=dat; //将数据dat从P0口输出,即写入LCD E=1; // E产生正跳变 _nop_(); //空操作,给硬件反应时间 E=0; //E由高电平变为低电平,写数据操作结束 delay(1); } (4)自动显示 数据写入LCD模块后,自动读出字符库ROM(CGROM)中的字型点阵数据,并将字型点阵数据送到液晶显示屏上显示,该过程是自动完成的。 * 6. LCD 1602初始化 使用LCD 1602前,需对其显示模式进行初始化设置,初始化函数如下: void LCD_initial(void) //液晶显示器初始化函数 { write_command(0x38); //写入命令0x38:两行显示,5×7点阵,8位数据 _nop_(); //空操作,给硬件反应时间 write_command(0x0C); //写入命令0x0C:开整体显示,光标关,无黑块 _nop_(); //空操作,给硬件反应时间 write_command(0x06); //写入命令0x06:光标右移 _nop_(); //空操作,给硬件反应时间 write_command(0x01); //写入命令0x01:清屏 delay(1); } 注意:在函数开始处,由于LCD尚未开始
文档评论(0)