16X2字符型液晶显示模块驱动)
- 格式:doc
- 大小:472.38 KB
- 文档页数:15
数理与信息工程学院课程设计
题目:16X2字符型液晶显示模块驱动专业:
班级:
姓名:学号:
实验地点:
指导老师:
成绩:
( 2006.6 )
目录
第1节引言 (3)
1.116×2液晶显示模块概述 (3)
1.2本设计任务 (3)
1.3系统基本功能 (3)
第2节系统硬件设计 (4)
2.1 系统的硬件构成及功能 (4)
2.2 AT89C2051单片机及其引脚说明 (5)
2.3 MD—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字符型液晶显示模块的驱动
第1节引言
液晶显示器(LCD)以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等.这里以常用的2行16个字的DM-162液晶模块来驱动显示字符.
1.1 16×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.2 AT89C2051单片机及其引脚说明
AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。
内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。
由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。
AT89C2051是一个有20个引脚的芯片,引脚配置如图3所示。
与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚,因而芯片尺
寸有所减小。
图3 AT89C2051引脚配置
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口同时也可为闪速存储器编程和编程校验接收控制信号。
表1 P3口特殊功能
(外部中断0)
(外部中断1)
2.3 DM-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.3 MD-162内部控制器的指令
DM-162液晶模块内部的控制器共有11条控制指令,如表3所示,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:1为高电平、0为低电平)
表3 11条指令表
指令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:
根据所给字符首先确定它的字码对应情况:
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应保持高电平状态.
具体程序如下:
ORG 0000H
RS EQU P3.7;确定硬件连接方式
RW EQU P3.5 ;确定硬件连接方式
E EQU P3.4 ;确定硬件连接方式
MOV P1,#00000001B ;清屏并光标复位
ACALL ENABLE;调用写入命令子程序
MOV P1,#00111000B ;设置显示模式:8位2行5x7点阵ACALL ENABLE ;调用写入命令子程序
MOV P1,#00001111B ;显示器开、光标开、光标允许闪烁ACALL ENABLE ;调用写入命令子程序
MOV P1,#00000110B ;文字不动,光标自动右移
;显示H
ACALL ENABLE ;调用写入命令子程序
MOV P1,# 06H ;写入显示起始地址(第一行第六个位置)ACALL ENABLE ;调用写入命令子程序
MOV P1,#01001000B ;字母H的代码
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
ACALL DELAY ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
;显示E
ACALL ENABLE ;调用写入命令子程序
MOV P1,# 07H ;写入显示起始地址(第一行第七个位置)ACALL ENABLE ;调用写入命令子程序
MOV P1,#01000101B ;字母E的代码
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
ACALL DELAY ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
;显示第一个L
ACALL ENABLE ;调用写入命令子程序
MOV P1,# 08H ;写入显示起始地址(第一行第八个位置)ACALL ENABLE ;调用写入命令子程序
MOV P1,#01001100B ;字母L的代码
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
ACALL DELAY ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
;显示第二个L
ACALL ENABLE ;调用写入命令子程序
MOV P1,# 08H ;写入显示起始地址(第一行第九个位置)ACALL ENABLE ;调用写入命令子程序
MOV P1,#01001100B ;字母L的代码
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
ACALL DELAY ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
;显示O
ACALL ENABLE ;调用写入命令子程序
MOV P1,#0A0H ;写入显示起始地址(第一行第十个位置)ACALL ENABLE ;调用写入命令子程序
MOV P1,#01001111B;字母L的代码
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
ACALL DELAY ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
;完成显示原地踏步
AJMP $
;命令使能
ENABLE:
CLR RS ;写入控制命令的子程序
CLR RW
CLR E
ACALL DELAY
SETB E
RET
;判断忙
DELAY:
MOV P1,#0FFH ;判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7,DELAY ;如果P1.7为高电平表示忙就循环等待RET
END
3. 采用查表的方法实现字符显示
程序开始时对液晶模块进行了功能设置,约定了显示的格式。
注意显示字符时光标是自动右移的,无需人工干预。
每次输入指令都先调用判断是否忙子程序DELAY,然后输入显示位置的地址0C0H,最后输入要显示的字符“A”的代码41H。
如果要显示很多字符,可以用查表的方法。
可以在表的末尾设置结束码,比如00H,如果查表查得00H,说明字符已经全部显示完。
以下是用查表法一次显示“GOOD”的程序。
(部分显示功能设置同上程序,调用功能写入部分及判断忙否的功能子程序略)
MOV DPTR,#TAB ;表入口地址
REITE1:
MOV R1,00H ;写入要显示的字符
SATRT:
MOV A,R1
MOVC A,@A+DPTR
MOV P1,A ;写入P1口
CLR RE
CLRE
ACALL DELAY
SETB E
INC R1
CJNE A,#00H,START ;非00H继续显示其它的字符
TAB:
DB 47H,4FH,4FH,44FH,00H;字符代码GOOD。