1、 数理与信息工程学院课 程 设 计 题 目: 16X2字符型液晶显示模块驱动 专 业: 班 级: 姓 名: 学号: 实验地点:指导老师: 成 绩: ( 2006.6 )目 录第1节 引 言3 1.1 162液晶显示模块概述31.2 本设计任务 31.3 系统基本功能3第2节 系统硬件设计42.1 系统的硬件构成及功能42.2 AT89C2051单片机及其引脚说明52.3 MD162液晶显示模块及其引脚说明 6第3节 系统软件设计73.1 系统主程序设计73.2 字符发生存储器83.3 MD-162内部控制器的指令 93.4 字符发生器RAM地址设置 9第4节 系统调试与测试结果分析 第5节 结
2、束语10 液晶显示模块的比较并举例其在实际中的应用等参考文献 11附录 12 1. 液晶显示字符使用说明12 2. 在第一行显示”HELLO”全部源程序133. 采用查表的方法实现字符显示15word文档 可自由编辑16X2字符型液晶显示模块的驱动第1节 引 言液晶显示器(LCD)以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等.这里以常用的2行16个字的DM-162液晶模块来驱动显示字符.1.1 162液晶显示
3、模块的驱动概述162液晶显示模块的驱动采用AT89C2051芯片及DM-162显示模块实现162个字符的左移或者右移显示.AT89C2051用以控制显示字符的位置,字符的显示方式,及传递字符字码.1.2 本设计任务使用AT89C2051实现液晶模块的字符控制显示.1.3 系统主要功能 162液晶显示模块的外观如图1所示。 其主要功能有:在液晶显示模块的某个具体的存储位置显示指定的字符;控制一连串字符向左或者向右移动;控制单行或者双行显示。图1:第2节 系统硬件设计 本系统主要实现的硬件设计,包括三个方面的内容:第一,我们所熟悉的单片机AT89C2051的引脚定义及设置;第二,DM162与TA8
4、9C2051的引脚连接;第三,DM162的电源部分.2.1 系统的硬件构成及功能液晶显示模块的原理框图如图2所示。它由以下几个部件组成:单片机AT89C2051、电源、液晶字符显示部件DM-162、电源供电部分。单片机部分:采用AT89C2051芯片实现对DM-162的控制显示字符显示模块: 选择2行16个字的显示容量.电源部分: +5V电压供电,维持系统的正常工作,同时加载10K电位器以适应不用亮度的显示字符即对比度的调整.AT89C2051显示驱动DM-162电源供电 图2 液晶显示系统原理框图22 AT89C2051单片机及其引脚说明AT89C2051单片机是51系列单片机的一个成员,是
5、8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。AT89C2051是一个有20个引脚的芯片,引脚配置如图3所示。与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚,因而芯片尺寸有所减小。图3 AT89C205
6、1引脚配置AT89C2051芯片的20个引脚功能为:VCC 电源电压。GND 接地。RST 复位输入。当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 来自反向振荡放大器的输出。P1口 8位双向I/O口。引脚P1.2P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LCD显示器;P1口引脚写入“1” 后,可用作输入。
7、在闪速编程与编程校验期间,P1口也可接收编码数据。P3口 引脚P3.0P3.5与P3.7为7个带内部上拉的双向I/0引脚。P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。P3口也可用作特殊功能口,其功能见表1。P3口同时也可为闪速存储器编程和编程校验接收控制信号。表1 P3口特殊功能 P3口引脚特殊功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入) 23 DM-162液晶模块及其
8、引脚说明DM-162采用标准的14脚接口,其中:VSS为地电源VDD接5V正电源V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0D7为8位双向数据线。24 DM-162液晶模
9、块与单片机连接图 DM-162液晶显示模块可以和单片机AT89C2051直接相连,电路如图4所示图4 芯片连接图第3节 系统的软件设计 本系统的软件设计主要考虑到几个方面:第一,显示控制的初始设置,即控制指令的选择;第二,显示字符的位置选择即显示存储单位的确定;第三,显示字符的内码的对应选择.31 系统主程序设计 调用写入命令子程序初始化数据写入显示起始地址DM-162显示初始化判断忙否?写入字符并显示等待空闲完成显示并停止移动是不图8 系统程序流程图32 字符发生存储器 DM-162液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表2所示,这些字符有:阿拉伯
10、数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“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:光标移动方向,高电平右移,低电
11、平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标指令6:功能设置命令. DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符指令7:字符发生器RAM地址设置指令8:DDRAM地址设置指令9:读忙信号和光标地址 BF:为忙标志
12、位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据指令11:读数据34 字符发生器RAM地址设置 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表4是DM-162的内部显示地址,比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000
13、B(C0H). 表4 字符发生器RAM地址结 束 语 本系统的实现相对比较简单,主要了解了AT89C2051与DM-162的连接显示.AT89C2051对液晶字符的控制显示.通过本系统的学习也让我比较深刻的认识到DM-162的显示原理及内部结构特征.这与书上8051芯片与HD44780显示模块的连接显示功能相近,也是经过两个主要的过程显示控制字符,首先就是对液晶显示模块进行初始化设置,即包括清除显示,功能设置,开关显示,方式设置等.然后,在判断为不忙的情况下写入显示的字符数据.看起来功能可能比较单一,只是涉及到了单处机对DM-162液晶字符模块的控制显示,而且这个字符的字码是每次经过人为的改变
14、而实现其显示,所以从实用性方面考虑不怎么理想.但是从AT89C2051本身的功能特性考虑,我们可以设想,通过AT89C2051的串口自动得到外部的可变数据,再经过字码对照表所得待显示的数据不失为一种好的办法.在这里,自动获得的数据可以通过传感器来实现.比如,加油站里面的加油量控制显示,就可以通过测量检测传感器来实现输出的油量,然后输入到单片机的串口,再经过字码对应表来获得在液晶显示字符模块中显示的数据.再比如由温度传感器获取的温度经A/D转换后,读入到AT89C2051单片机中,就可以显示出当时的温度.总之,DM-162作为一种小型的字符显示器,在日常生活中碰到的一些仪器设备中还是比较有实用价
15、值,因此值得我们去了解它,掌握如何去运用它.参考文献1高锋. 单片机应用系统设计及实用技术.机械工业出版社.2004.4附 录1. 液晶显示字符使用说明 DM-162液晶显示模块的字符显示,可分为好几种显示模式,这主要取决于对具体的应用.如静态的显示,还是动态的左移或者右移显示.那么这个主要是在程序设计的过程中,进行初始化所决定的.因此,在使用之前先确定使用的目的,选择好显示的方式,当然得找出相应的显示字符的字符代码及在DM-162液晶显示模块的相应显示位置的RAM地址.然后进行每个字符的写入显示.在使用的过程中,还得注意的一点是,可能是显示驱动电压的不稳定性,或者是由于驱动电压的过高,会形成
16、一种鬼影的现象,因此需要手动对10K的电位器进行对比度调整以达到显示的良好效果.2. 在第一行显示”HELLO”全部源程序程序设计步骤详解:参照图显示HELLO字符的位置情况如表5:表5:HELLO根据所给字符首先确定它的字码对应情况:H:01001000BE:01000101BL:01001100BO:01001111B根据表5所显示字符的具体位置找出相应的RAM地址位置:H: 00000000B(00H)+00000110B(06H)=00000110B(06H)E: 00000000B(00H)+00000111B(07H)=00000111B(07H)L(1): 00000000B(0
17、0H)+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 ;清屏并光标复位ACAL
18、L ENABLE;调用写入命令子程序 MOV P1,#00111000B ;设置显示模式:8位2行5x7点阵 ACALL ENABLE ;调用写入命令子程序 MOV P1,#00001111B ;显示器开、光标开、光标允许闪烁ACALL ENABLE ;调用写入命令子程序MOV P1,#00000110B ;文字不动,光标自动右移 ;显示HACALL ENABLE ;调用写入命令子程序MOV P1,# 06H ;写入显示起始地址(第一行第六个位置)ACALL ENABLE ;调用写入命令子程序MOV P1,01001000B ;字母H的代码 SETB RS ;RS=1 CLR RW ;RW=0
19、 ;准备写入数据CLR E ;E=0 ;执行显示命令ACALL DELAY ;判断液晶模块是否忙?SETB E ;E=1 ;显示完成,程序停车;显示EACALL 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 ;显示完成,程序停车;显示第一个LACALL ENABLE ;调用写入
20、命令子程序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 ;显示完成,程序停车;显示第二个LACALL ENABLE ;调用写入命令子程序MOV P1,# 08H ;写入显示起始地址(第一行第九个位置)ACALL ENABLE ;调用写入命令子程序MOV P1,01001100B ;字母L的代码 SETB RS
21、;RS=1 CLR RW ;RW=0 ;准备写入数据CLR E ;E=0 ;执行显示命令ACALL DELAY ;判断液晶模块是否忙?SETB E ;E=1 ;显示完成,程序停车;显示OACALL 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 ;显示完成,程序停车;完成显示原地踏
22、步AJMP $;命令使能ENABLE: CLR RS ;写入控制命令的子程序CLR RW CLR E ACALL DELAY SETB E RET ;判断忙DELAY: MOV P1,#0FFH ;判断液晶显示器是否忙的子程序CLR RS SETB RWCLR E NOP SETB E JB P1.7,DELAY ;如果P1.7为高电平表示忙就循环等待 RETEND 3. 采用查表的方法实现字符显示程序开始时对液晶模块进行了功能设置,约定了显示的格式。注意显示字符时光标是自动右移的,无需人工干预。每次输入指令都先调用判断是否忙子程序DELAY,然后输入显示位置的地址0C0H,最后输入要显示的字
23、符“A”的代码41H。如果要显示很多字符,可以用查表的方法。可以在表的末尾设置结束码,比如00H,如果查表查得00H,说明字符已经全部显示完。以下是用查表法一次显示“GOOD”的程序。(部分显示功能设置同上程序,调用功能写入部分及判断忙否的功能子程序略)MOV DPTR,#TAB ;表入口地址REITE1:MOV R1,00H ;写入要显示的字符SATRT:MOV A,R1MOVC A,A+DPTRMOV P1,A ;写入P1口CLR RECLREACALL DELAYSETB EINC R1CJNE A,#00H,START ;非00H继续显示其它的字符TAB:DB 47H,4FH,4FH,44FH,00H;字符代码GOOD