ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:277.33KB ,
资源ID:1318121      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1318121.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(1602显示屏C语言驱动程序及相关上传资料.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

1602显示屏C语言驱动程序及相关上传资料.docx

1、1602显示屏C语言驱动程序及相关上传资料 1602液晶驱动程序及相关资料简介:本文的内容包括1602的电路连接图,C语言编写的驱动程序,及说明书资料。初学者按图连接并烧好程序就可以直接点亮显示屏。是初学者不可多得的参考资料,可大大节约初学者的学习时间。需要说明的是本例用到的单片机是 AT89S52或AT89S51型单片机。如果别的型号的单片机需要足以更新头文件。 1602液晶屏通用连接图 C语言编写的程序再说明的下面1602显示屏的使用方面的知识。一般市场上的1602液晶使用的驱动器为HD44780U或HD44780S,市场上大部分液晶用的是后者。HD44780S的供电电压为5V10%,而H

2、D44780U的供电电压为2.7V5.5V。也就是说,绝大部分1602液晶只能工作在5V电压下,其供电电压必须为5V。经过试验发现,1602液晶的供电虽然必须为5V,但其控制总线和数据总线可以用3.3V电平(因为对于TTL电平,一般大于2.5V以上都算高电平,不过最可靠的是大于3.6V),只不过在3.3V电平下,数据的通信速度会大大降低,这一点需要在写驱动时注意。需要时,可以将MCU的IO配置为漏极开路方式,用上拉电阻拉到5V电平;实在不能配置为漏极开路方式时,请查阅MCU的电气参数,在允许的条件下,直接使用电阻弱上拉也可以。2、 硬件连接1602液晶可以使用4位或8位通信模式,通信可以是双向

3、的或单向的,双向通信主要是为了读取LCD忙标志和AC地址寄存器和DDRAM和CGRAM中的值,一般用处不大,因为1602不支持点阵绘图功能。在连接时,注意4位通信方式下,LCD只使用DB7DB4,一般情况下会使用MCU某端口的高4位或低4位与之连接,注意写驱动时在必要的情况下对端口的其它几位要保护,防止破坏其数据;当然如果没有使用其它4位时则不必要保护(奇怪,不使用其它4位干嘛用4位通信方式嘛?)。还要注意的是,如果需要双向通信,则必须选择既能做输入又能做输出的IO口,特别是对于RS、RW和E这三条控制线,若能选择支持位寻址的IO口则可以方便编程。3、底层驱动问题通用1602液晶的时序如图:(

4、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;、从数据线上

5、读取数据;、E=0 。在读操作时,E一旦变为高电平,LCD马上将数据发到数据线上并保持,一直到E=0为止。即写操作时E高电平有效。一般如果时序没有错,不会出什么问题。绝大部分问题都是延时不够造成的,注意看上面两个图表,有许多时间参数的。要注意的是这些参数的条件,如“Vdd=5V5V5%,Vss=0,Ta=25”,其它条件下这些指标都要留有余量。此外,电源电压、MCU数据线的电平、驱动能力、PCB布局 均会影响速度,注意留有足够的余量,建议先留大的余量,调通后再逐渐减小延时。4、 1602液晶的初始化通用1602液晶的初始化需要注意一个问题,即一定要在最开始写入功能设定指令,该指令用以控制LCD

6、的数据通信位数,及显示行数和字型。并且强烈建议将此指令写两次,因为LCD启动后并不知道您使用的是4位数据通信方式还是8位方式,所以它总是先执行高4位的指令,也就是说第一次写入该指令时,低四位的数据可能被忽略(这是我根据使用其它液晶的猜测)。总之为了可靠,最好写两遍该指令。 #include /*/硬件连接:1602VDD接5V,VO接地,BL1接5V,BL2接地,8根数据线接P0口,RS RW E分别接P2.0、P2.1、P.4口 下载下面的程序可直接点亮显示屏/*#include #define Busy 0x80 /用于检测LCM状态字中的Busy标识#define LCM_Data P0

7、sbit LCM_RS=P20; /寄存器选择sbit LCM_RW=P21; /读/写控制sbit LCM_E=P22; /读/写使能int i,j;/自定义字符列表/=unsigned char character08 = 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02, /年 character18 = 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11, /月 character28 = 0x0f,0x09,0x09,0x09,0x0f,0x09,0x09,0x0f, /日 characterN8 = 0x00,0x00,0x

8、00,0x00,0x00,0x00,0x00,0x00; /日/=/=/延时程序/=void Delay5Ms(void)unsigned long int TempCyc = 5552;while(TempCyc-);void Delay400Ms(void)unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA-)TempCycB=7269;while(TempCycB-);/=/读写子程序/=/*读数据*unsigned char ReadDataLCM(void)LCM_RS = 1; LCM_RW = 1;LCM

9、_E = 1;LCM_E = 0;for(i=0;i100;i+);LCM_E = 1;return(LCM_Data);/*读状态*unsigned char ReadStatusLCM(void)LCM_Data = 0xFF; LCM_RS = 0;LCM_RW = 1;LCM_E = 1;LCM_E = 0;for(i=0;i100;i+);LCM_E = 1;return(LCM_Data); /反回读取的数据。/*写数据子汉字子函数void WriteDataLCM(unsigned char WDLCM)ReadStatusLCM(); /检测忙LCM_Data = WDLCM;

10、 /送数据到IO口 。LCM_RS = 1;LCM_RW = 0;LCM_E = 1; LCM_E = 0; /若晶振速度太高可以在这后加小的延时for(i=0;i100;i+); /延时LCM_E = 1; /使能/写指令void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC为0时忽略忙检测if (BuysC) ReadStatusLCM(); /根据需要检测忙LCM_Data = WCLCM; /送指令到IO口 。LCM_RS = 0;LCM_RW = 0; LCM_E = 1;LCM_E = 0;for(i=0;i100;i+);LC

11、M_E = 1; /=/初始化子程序/=void LCMInit(void) /LCM初始化设置LCM_Data = 0;WriteCommandLCM(0x38,0); / 三次显示模式设置,不检测忙信号Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,1); / 显示模式设置,开始要求每次检测忙信号Delay5Ms();WriteCommandLCM(0x08,1); / 关闭显示Delay5Ms();WriteCommandLCM(0x01,1); / 清屏Delay5Ms();WriteCommandLCM(0x06,1); / 显示光标移动设置Delay5Ms();WriteCommandLCM(0x0c,1); / 显示开及光标设置Delay5Ms();/=/按指定位置显示一个字符/=void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1