LCD1602液晶显示C程序.doc

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

1、关于1602液晶的电气参数 ???????? 一般市场上的1602液晶使用的驱动器为HD44780U或HD44780S,市场上大部分液晶用的是后者。HD44780S的供电电压为5V±10%,而HD44780U的供电电压为2.7V~5.5V。也就是说,绝大部分1602液晶只能工作在5V电压下,其供电电压必须为5V。经过试验发现,1602液晶的供电虽然必须为5V,但其控制总线和数据总线可以用3.3V电平(因为对于TTL电平,一般大于2.5V以上都算高电平,不过最可靠的是大于3.6V),只不过在3.3V电平下,数据的通信速度会大大降低,这一点需要在写驱动时注意。需要时,可以将MCU的IO配置为漏极开路方式,用上拉电阻拉到5V电平;实在不能配置为漏极开路方式时,请查阅MCU的电气参数,在允许的条件下,直接使用电阻弱上拉也可以。 2、 硬件连接 1602液晶可以使用4位或8位通信模式,通信可以是双向的或单向的,双向通信主要是为了读取LCD忙标志和AC地址寄存器和DDRAM和CGRAM中的值,一般用处不大,因为1602不支持点阵绘图功能。在连接时,注意4位通信方式下,LCD只使用DB7~DB4,一般情况下会使用MCU某端口的高4位或低4位与之连接,注意写驱动时在必要的情况下对端口的其它几位要保护,防止破坏其数据;当然如果没有使用其它4位时则不必要保护(奇怪,不使用其它4位干嘛用4位通信方式嘛?)。还要注意的是,如果需要双向通信,则必须选择既能做输入又能做输出的IO口,特别是对于RS、RW和E这三条控制线,若能选择支持位寻址的IO口则可以方便编程。 3、底层驱动问题 通用1602液晶的时序如图: (1)、写时序 ?????????(2)、读时序 总的说来,按照这个时序图来编写驱动程序是不会出什么问题的,只是要深刻理解时序图中各参数的涵义。编程中要特别关注E这根控制线。 写操作的时序应该是:①、RS=0(写指令寄存器)或RS=1(写数据寄存器);②、RW=0(写操作);③、将数据写到数据线上;④、E=1;⑤、E=0 。在写操作时,LCD是在E的下降沿将数据锁存,即写操作时E下降沿有效。但尽管这样,为防止LCD出错,在E变为高电平后,尽量不要再改变数据线上的数据值。即最好按照上述的时序来操作。 读操作的时序应该是:①、RS=0(读忙标志BF和地址计数器AC)或RS=1(读数据寄存器);②、RW=1(读操作);③、E=1;④、从数据线上读取数据;⑤、E=0 。在读操作时,E一旦变为高电平,LCD马上将数据发到数据线上并保持,一直到E=0为止。即写操作时E高电平有效。 一般如果时序没有错,不会出什么问题。绝大部分问题都是延时不够造成的,注意看上面两个图表,有许多时间参数的。要注意的是这些参数的条件,如“Vdd=5V5V±5%,Vss=0,Ta=25℃”,其它条件下这些指标都要留有余量。此外,电源电压、MCU数据线的电平、驱动能力、PCB布局… …均会影响速度,注意留有足够的余量,建议先留大的余量,调通后再逐渐减小延时。 4、 1602液晶的初始化 通用1602液晶的初始化需要注意一个问题,即一定要在最开始写入功能设定指令,该指令用以控制LCD的数据通信位数,及显示行数和字型。并且强烈建议将此指令写两次,因为LCD启动后并不知道您使用的是4位数据通信方式还是8位方式,所以它总是先执行高4位的指令,也就是说第一次写入该指令时,低四位的数据可能被忽略(这是我根据使用其它液晶的猜测)。总之为了可靠,最好写两遍该指令。 下面是1602的接线 1602液晶显示C程序 * 描??? 述 : *??????????????? 此程序实现,完成液晶的驱动程序,可以显示任意的ASCII字符*************************************************************************** */ #include reg52.h //调用头文件(单片机内部的寄存器定义) /******本段为硬件I/O口定义********/ sbit KEY0?? = P0 ^ 0; //KEY和发光管复用,请将跳线插到KEY端 sbit KEY1?? = P0 ^ 1; sbit KEY2?? = P0 ^ 2; sbit KEY3?? = P0 ^ 3; sbit DIG0?? = P0 ^ 4; //数码管位0sbit DIG1?? = P0 ^ 5; //数码管位1 sbit BUZZ?? = P3 ^ 3; //蜂鸣器sbit LCD_RW = P3 ^ 6; sbit LCD_RS = P3 ^ 7; sbit LCD_E = P3 ^ 4; #define LED_SEG??? P1 //数码管#define L

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档