液晶显示模块驱动.docx
《液晶显示模块驱动.docx》由会员分享,可在线阅读,更多相关《液晶显示模块驱动.docx(17页珍藏版)》请在冰豆网上搜索。
![液晶显示模块驱动.docx](https://file1.bdocx.com/fileroot1/2023-5/29/0790db9e-d3d9-4910-ac8d-c4ef003b1890/0790db9e-d3d9-4910-ac8d-c4ef003b18901.gif)
液晶显示模块驱动
数理与信息工程学院
课程设计
题目:
16X2字符型液晶显示模块驱动
专业:
计算机科学与技术(专升本)
班级:
计056班
姓名:
吴光均学号:
05191141
实验地点:
数理与信息工程学院电子系统设计室
指导老师:
余水宝
成绩:
(2006.6)
目录
第1节引言………………………………………………………………………3
1.116×2液晶显示模块概述……………………………3
1.2本设计任务………………………………………3
1.3系统基本功能………………………………………3
第2节系统硬件设计……………………………………………………………4
2.1系统的硬件构成及功能…………………………………………………4
2.2AT89C2051单片机及其引脚说明………………………………………5
2.3MD—162液晶显示模块及其引脚说明…………………………………6
第3节系统软件设计……………………………………………………………7
3.1系统主程序设计…………………………………………………………7
3.2字符发生存储器…………………………………………………………8
3.3MD-162内部控制器的指令……………………………………………9
3.4字符发生器RAM地址设置 ……………………………………………9
第4节系统调试与测试结果分析…………………………………………
第5节结束语………………………………………………………………………10
液晶显示模块的比较并举例其在实际中的应用等
参考文献…………………………………………………………………………11
附录……………………………………………………………………………12
1.液晶显示字符使用说明……………………………………………12
2.在第一行显示”HELLO”全部源程序………………………13
3.采用查表的方法实现字符显示……………………………………15
16X2字符型液晶显示模块的驱动
数理与信息工程学院05计算机专升本吴光均
指导教师:
余水宝
第1节引言
液晶显示器(LCD)以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等.这里以常用的2行16个字的DM-162液晶模块来驱动显示字符.
1.116×2液晶显示模块的驱动概述
16×2液晶显示模块的驱动采用AT89C2051芯片及DM-162显示模块实现16×2个字符的左移或者右移显示.AT89C2051用以控制显示字符的位置,字符的显示方式,及传递字符字码.
1.2本设计任务
使用AT89C2051实现液晶模块的字符控制显示.
1.3系统主要功能
16×2液晶显示模块的外观如图1所示。
其主要功能有:
在液晶显示模块的某个具体的存储位置显示指定的字符;控制一连串字符向左或者向右移动;控制单行或者双行显示。
图1:
第2节
系统硬件设计
本系统主要实现的硬件设计,包括三个方面的内容:
第一,我们所熟悉的单片机AT89C2051的引脚定义及设置;第二,DM—162与TA89C2051的引脚连接;第三,DM—162的电源部分.
2.1系统的硬件构成及功能
液晶显示模块的原理框图如图2所示。
它由以下几个部件组成:
单片机AT89C2051、电源、液晶字符显示部件DM-162、电源供电部分。
单片机部分:
采用AT89C2051芯片实现对DM-162的控制显示
字符显示模块:
选择2行16个字的显示容量.
电源部分:
+5V电压供电,维持系统的正常工作,同时加载10K电位器以适应不用亮度的显示字符即对比度的调整.
图2液晶显示系统原理框图
2.2AT89C2051单片机及其引脚说明
AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。
内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与IntelMCS-51系列单片机的指令和输出管脚相兼容。
由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。
AT89C2051是一个有20个引脚的芯片,引脚配置如图3所示。
与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚,因而芯片尺寸有所减小。
图3AT89C2051引脚配置
AT89C2051芯片的20个引脚功能为:
VCC电源电压。
GND接地。
RST复位输入。
当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。
XTAL1反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2来自反向振荡放大器的输出。
P1口8位双向I/O口。
引脚P1.2~P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。
P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LCD显示器;P1口引脚写入“1”后,可用作输入。
在闪速编程与编程校验期间,P1口也可接收编码数据。
P3口引脚P3.0~P3.5与P3.7为7个带内部上拉的双向I/0引脚。
P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。
P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。
P3口也可用作特殊功能口,其功能见表1。
P3口同时也可为闪速存储器编程和编程校验接收控制信号。
表1P3口特殊功能
P3口引脚
特殊功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
2.3DM-162液晶模块及其引脚说明
DM-162采用标准的14脚接口,其中:
VSS为地电源
VDD接5V正电源
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
D0~D7为8位双向数据线。
2.4DM-162液晶模块与单片机连接图
DM-162液晶显示模块可以和单片机AT89C2051直接相连,电路如图4所示
图4芯片连接图
第3节系统的软件设计
本系统的软件设计主要考虑到几个方面:
第一,显示控制的初始设置,即控制指令的选择;第二,显示字符的位置选择即显示存储单位的确定;第三,显示字符的内码的对应选择.
3.1系统主程序设计
是
不
图8系统程序流程图
3.2字符发生存储器
DM-162液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表2所示,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”.
表2字符代码对应表
3.3MD-162内部控制器的指令
DM-162液晶模块内部的控制器共有11条控制指令,如表3所示,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
表311条指令表
指令1:
清显示,指令码01H,光标复位到地址00H位置
指令2:
光标复位,光标返回到地址00H
指令3:
光标和显示模式设置 I/D:
光标移动方向,高电平右移,低电平左移 S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:
控制光标的开与关,高电平表示有光标,低电平表示无光标 B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁
指令5:
光标或显示移位 S/C:
高电平时移动显示的文字,低电平时移动光标
指令6:
功能设置命令 .DL:
高电平时为4位总线,低电平时为8位总线 N:
低电平时为单行显示,高电平时双行显示 F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符
指令7:
字符发生器RAM地址设置
指令8:
DDRAM地址设置
指令9:
读忙信号和光标地址 BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据
指令11:
读数据
3.4字符发生器RAM地址设置
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表4是DM-162的内部显示地址,比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?
这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H).
表4字符发生器RAM地址
结束语
本系统的实现相对比较简单,主要了解了AT89C2051与DM-162的连接显示.AT89C2051对液晶字符的控制显示.通过本系统的学习也让我比较深刻的认识到DM-162的显示原理及内部结构特征.这与书上8051芯片与HD44780显示模块的连接显示功能相近,也是经过两个主要的过程显示控制字符,首先就是对液晶显示模块进行初始化设置,即包括清除显示,功能设置,开关显示,方式设置等.然后,在判断为不忙的情况下写入显示的字符数据.看起来功能可能比较单一,只是涉及到了单处机对DM-162液晶字符模块的控制显示,而且这个字符的字码是每次经过人为的改变而实现其显示,所以从实用性方面考虑不怎么理想.但是从AT89C2051本身的功能特性考虑,我们可以设想,通过AT89C2051的串口自动得到外部的可变数据,再经过字码对照表所得待显示的数据不失为一种好的办法.在这里,自动获得的数据可以通过传感器来实现.比如,加油站里面的加油量控制显示,就可以通过测量检测传感器来实现输出的油量,然后输入到单片机的串口,再经过字码对应表来获得在液晶显示字符模块中显示的数据.再比如由温度传感器获取的温度经A/D转换后,读入到AT89C2051单片机中,就可以显示出当时的温度.总之,DM-162作为一种小型的字符显示器,在日常生活中碰到的一些仪器设备中还是比较有实用价值,因此值得我们去了解它,掌握如何去运用它.
参考文献
[1]高锋.《单片机应用系统设计及实用技术》.机械工业出版社.2004.4
附录
1.液晶显示字符使用说明
DM-162液晶显示模块的字符显示,可分为好几种显示模式,这主要取决于对具体的应用.如静态的显示,还是动态的左移或者右移显示.那么这个主要是在程序设计的过程中,进行初始化所决定的.因此,在使用之前先确定使用的目的,选择好显示的方式,当然得找出相应的显示字符的字符代码及在DM-162液晶显示模块的相应显示位置的RAM地址.然后进行每个字符的写入显示.在使用的过程中,还得注意的一点是,可能是显示驱动电压的不稳定性,或者是由于驱动电压的过高,会形成一种"鬼影"的现象,因此需要手动对10K的电位器进行对比度调整以达到显示的良好效果.
2.在第一行显示”HELLO”全部源程序
程序设计步骤详解:
参照图
显示HELLO字符的位置情况如表5:
表5:
H
E
L
L
O
根据所给字符首先确定它的字码对应情况:
H:
01001000B
E:
01000101B
L:
01001100B
O:
01001111B
根据表5所显示字符的具体位置找出相应的RAM地址位置:
H:
00000000B(00H)+00000110B(06H)=00000110B(06H)
E:
00000000B(00H)+00000111B(07H)=00000111B(07H)
L
(1):
00000000B(00H)+00001000B(08H)=00001000B(08H)
L
(2):
00000000B(00H)+00001001B(09H)=00001001B(09H)
O:
00000000B(00H)+00001010B(0A0H)=00001010B(0A0H)
这里须注意的地方:
如果HELLO显示在第二行的话,那么公式中前的00H应该换成40H,即最高位D7应保持高电平状态.
具体程序如下:
ORG0000H
RSEQUP3.7;确定硬件连接方式
RWEQUP3.5;确定硬件连接方式
EEQUP3.4;确定硬件连接方式
MOVP1,#00000001B;清屏并光标复位
ACALLENABLE;调用写入命令子程序
MOVP1,#00111000B;设置显示模式:
8位2行5x7点阵
ACALLENABLE;调用写入命令子程序
MOVP1,#00001111B;显示器开、光标开、光标允许闪烁
ACALLENABLE;调用写入命令子程序
MOVP1,#00000110B;文字不动,光标自动右移
;显示H
ACALLENABLE;调用写入命令子程序
MOVP1,#06H;写入显示起始地址(第一行第六个位置)
ACALLENABLE;调用写入命令子程序
MOVP1,#01001000B;字母H的代码
SETBRS;RS=1
CLRRW;RW=0;准备写入数据
CLRE;E=0;执行显示命令
ACALLDELAY;判断液晶模块是否忙?
SETBE;E=1;显示完成,程序停车
;显示E
ACALLENABLE;调用写入命令子程序
MOVP1,#07H;写入显示起始地址(第一行第七个位置)
ACALLENABLE;调用写入命令子程序
MOVP1,#01000101B;字母E的代码
SETBRS;RS=1
CLRRW;RW=0;准备写入数据
CLRE;E=0;执行显示命令
ACALLDELAY;判断液晶模块是否忙?
SETBE;E=1;显示完成,程序停车
;显示第一个L
ACALLENABLE;调用写入命令子程序
MOVP1,#08H;写入显示起始地址(第一行第八个位置)
ACALLENABLE;调用写入命令子程序
MOVP1,#01001100B;字母L的代码
SETBRS;RS=1
CLRRW;RW=0;准备写入数据
CLRE;E=0;执行显示命令
ACALLDELAY;判断液晶模块是否忙?
SETBE;E=1;显示完成,程序停车
;显示第二个L
ACALLENABLE;调用写入命令子程序
MOVP1,#08H;写入显示起始地址(第一行第九个位置)
ACALLENABLE;调用写入命令子程序
MOVP1,#01001100B;字母L的代码
SETBRS;RS=1
CLRRW;RW=0;准备写入数据
CLRE;E=0;执行显示命令
ACALLDELAY;判断液晶模块是否忙?
SETBE;E=1;显示完成,程序停车
;显示O
ACALLENABLE;调用写入命令子程序
MOVP1,#0A0H;写入显示起始地址(第一行第十个位置)
ACALLENABLE;调用写入命令子程序
MOVP1,#01001111B;字母L的代码
SETBRS;RS=1
CLRRW;RW=0;准备写入数据
CLRE;E=0;执行显示命令
ACALLDELAY;判断液晶模块是否忙?
SETBE;E=1;显示完成,程序停车
;完成显示原地踏步
AJMP$
;命令使能
ENABLE:
CLRRS;写入控制命令的子程序
CLRRW
CLRE
ACALLDELAY
SETBE
RET
;判断忙
DELAY:
MOVP1,#0FFH;判断液晶显示器是否忙的子程序
CLRRS
SETBRW
CLRE
NOP
SETBE
JBP1.7,DELAY;如果P1.7为高电平表示忙就循环等待
RET
END
3.采用查表的方法实现字符显示
程序开始时对液晶模块进行了功能设置,约定了显示的格式。
注意显示字符时光标是自动右移的,无需人工干预。
每次输入指令都先调用判断是否忙子程序DELAY,然后输入显示位置的地址0C0H,最后输入要显示的字符“A”的代码41H。
如果要显示很多字符,可以用查表的方法。
可以在表的末尾设置结束码,比如00H,如果查表查得00H,说明字符已经全部显示完。
以下是用查表法一次显示“GOOD”的程序。
(部分显示功能设置同上程序,调用功能写入部分及判断忙否的功能子程序略)
MOVDPTR,#TAB;表入口地址
REITE1:
MOVR1,00H;写入要显示的字符
SATRT:
MOVA,R1
MOVCA,@A+DPTR
MOVP1,A;写入P1口
CLRRE
CLRE
ACALLDELAY
SETBE
INCR1
CJNEA,#00H,START;非00H继续显示其它的字符
TAB:
DB47H,4FH,4FH,44FH,00H;字符代码GOOD