基于单片机的液晶显示驱动程序的开发.doc

上传人:精*** 文档编号:847773 上传时间:2023-09-09 格式:DOC 页数:22 大小:243.73KB
下载 相关 举报
基于单片机的液晶显示驱动程序的开发.doc_第1页
第1页 / 共22页
基于单片机的液晶显示驱动程序的开发.doc_第2页
第2页 / 共22页
基于单片机的液晶显示驱动程序的开发.doc_第3页
第3页 / 共22页
基于单片机的液晶显示驱动程序的开发.doc_第4页
第4页 / 共22页
基于单片机的液晶显示驱动程序的开发.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、1 绪论1.1 课题背景液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。以往的测控仪器的显示部分大都采用LED式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便。随着单片机应用领域的不断扩大,用单片机控制汉字显示已成为一种单片机发展的必然趋势。以前那种将汉字点阵编

2、码存入ROM ,在显示时再调用的方法已经不能适应当前的需求。好的应用所能显示的决不能仅仅局限于显示事先定义好的个别汉字,而应该提供直接使用至少包含国家标准的一、二级汉字字库的功能。1.2 开发意义1液晶显示器主要采用串行数据传输的工作方式,但其数据传输的时序却有非常严格的要求。为了在普通单片机系统中也能使用性能良好的液晶显示器,并优化其数据传输效率,特做此设计,为设计更复杂的电子产品做准备。2在液晶显示器上显示汉字信息,如果采用带汉字库的液晶显示器会有一些弊端:成本高,汉字大小固定,缺乏一些特殊的功能函数。针对这种情况,本文分析了一种低成本的汉字液晶显示实现方法。1.3 课题完成功能结合该液晶

3、显示器的接口特点设计出与之相匹配的单片机最小系统,驱动液晶显示器正常显示。并在此基础上,为它外扩汉字库,完成键盘输入任意汉字的区位码、屏幕上能正确显示出该汉字的功能。2 系统硬件设计2.1 硬件设计框图系统主要由三部分组成,分别为单片机,LCD模块和FLASH字库,图1所示是该系统的硬件原理框图,由于显示所需要占用的资源过多(本设计采用的是12 x12点阵,每个汉字存储需要24个字节),而单片机内部RAM资源及其有限,所以系统设计时扩展一片FLASH存储器,键盘主要负责输入,该接口具有通讯速度较快,器件之间电气部分设计较好等特点,可以使接口部分达到设计标准。STC89C51LCDFLASHKE

4、Y图12.2 单片机2.2.1 单片机概述所谓单片机,就是把CPU和一定容量的存储器(ROM和RAM),中断系统,一些并/串接口电路以及定时器/计数器继承在一块芯片上,从构成和功能上看,它具有计算机系统的特点,因此它称为单片微型计算机SCMC,简称单片机。由于单片机主要用于控制领域,用于实现各种控制和测量功能。故也把它称为微控制器MCC,另外单片机在运用时经常处于被控制系统的核心地位,并容入其中,即以嵌入的方式进行使用,因此也称为嵌入式微控制器EMCU。2.2.2 单片机微处理器系列介绍20世纪80年代以来,单片机的发展非常迅速。就通用单片机而言,世界上一些著名的计算机厂家就已投放市场的产品就

5、有几十个系列,数百个品种。其中有Motorola公司的6801,6802,Ziliog公司的Z8系列rockwell公司的6501,6502,等。此外,荷兰的PHILIP公司,日本的NEC公司,日立公司等也不甘落后,推出了各自的单片机品种,许多国外的单片机公司以MCS-51的内核为基础,推出了个各种与MCS-51系列单片机兼容的衍生产品。2.3 CPU的选择及应用2.3.1 MCS-51单片机的内部结构及芯片图MCS-51单片机的片内结构如图2所示。MCS-51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它有如下功能部分组成:(1) 微处理器

6、(CPU)(2)数据存储器(RAM)(3)程序存储器(ROM)(4)4个8位并行I/O口(5)一个串行口(6)2个16位定时器/记数器(7)中断系统(8)特殊功能寄存器(SFR)上述各功能部件都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围处理芯片的传统结构模式。但CPU对各种功能部件的控制是采用特殊寄存器的集中式 8条8条XTAL2XTAL18条CPU(运算器)(控制器)RAMP1串行口定时中断P3P0P2ROM SFR8条图2 STC89C51芯片2.3.2 8D锁存器74LS373373为三态输出的八D透明锁存器,共有54/74S373和54/74LS373两种线路结构型式。

7、373的输出端O0-O7可直接与总线相连。当三态允许控制端OE为低电平时,O0-O7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,O0-O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端LE为高电平时,O随数据D而变。当LE为低电平时,O被锁存在已建立的数据电平。当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。 373引出端符号: D0D7-数据输入端OE-三态允许控制端(低电平有效) LE-锁存允许端 O0-O7-输出端 373外部管腿图:2.4 LCD液晶显示器LCD按传输方式有串行和并行两种。并行方式:CPU输

8、出的是8位并行数据(Do7)、显示使能(DP-EN)、读写(R/W)和地址线(Ao)传送到控译码驱动电路,按照一定的速度将显示的点阵信息输出到行和列驱动器进行扫描。串行方式:LCD通过SDIN串行方式将串行数据(一条数据线)和串行时钟(SCLK)传送给液晶显示屏,控制屏的开关和显示。通常的液晶显示都采用并行的方法,然而并行数据传输需采用8条或16条线同时传送;串行数据传输只需要一条线传送。Nokia3310显示屏采用PCD8544驱动,PCD8544是一块低功耗的CMOS LCD 控制驱动器,设计为驱动48 行84 列的图形显示。所有必须的显示功能集成在一块芯片上,包括LCD 电压及偏置电压发

9、生器,只须很少外部元件且功耗小。PCD8544 与微控制器的接口使用串行总线。PCD8544 采用CMOS 工艺。其特点如下:1.单芯片LCD 控制/驱动2.48 行,84 列输出3.显示数据RAM 48*84 位4.芯片集成:LCD 电压发生器(也可以使用外部电压供应)LCD偏置电压发生器振荡器不需要外接元件(也可以使用外部时钟)5.外部RES(复位)输入引脚6.串行界面最高4.0Mbits/S7.CMOS 兼容输入8.混合速率:489.逻辑电压范围VDD 到VSS:2.7V3.3V10.显示电压范围VLCD 到VSS:6.08.5V LCD内部电压发生器(充许电压发生器)6.09.0V L

10、CD 外部电压供应(电压发生器关闭)11.低功耗,适用于电池供电系统12.关于VLCD 的温度补偿使用温度范围:-2570Nokia3310显示屏有8个引脚,名称和功能如下:名称VCCGNDsclksdinsced/cresvout功能电源电压地时钟串行数据串行时钟数据/命令复位电源 Nokia3310显示屏引脚与单片机连接图:VDD Pb5 Pb4 Pb3 Pb2 Pb1 Pb0GNDSCLK VCCRESSDINSCED/CVOUT GNDGND2.5 汉字库芯片- FLASH存储器 在单片机系统中对字模的存储,根据单片机的程序存储容量和其寻址空间情况,可采取3种方式。(1) 将提取的汉字

11、字模数据作为常量数组存放在程序存储区内,这种方法较为常用,针对程序不大或单片机无外部扩展数据存储区功能的情况。(2) 将提取的汉字字模数据存放在EPROM或E2PROM内,作为扩展的数据存储器供单片机调用采用哈佛结构的单片机,如8051单片机及其派生产品,程序存储器(ROM)和数据存储器(RAM)可分别寻址,51单片机ROM和RAM最大的寻址空间均为64K,通常来说,对于中型的嵌入式系统,尤其是带液晶的单片机系统,64k的程序空间并不富裕,而将汉字字模作为常量数组会大大占用ROM的空间,而相对来说,数将整个汉字字库存放在EPROM或E2PROM内,程序根据要显示汉字的机内码来调用汉字字模。(3

12、) 将整个汉字字库存放在EPROM或E2PROM内,程序根据要显示汉字的机内码来调用汉字字模。本设计把12*12点阵数据汉字库放在FLASH里,Flash存储器以其体积小、密度高、功耗低、操作易而备受青睐。 点阵字库是一个数据文件,在这个数据文件里面保存了所有文字的点阵数据。点阵、矩阵、位图这三个概念在本质上是有联系的,从某种程度上来讲,这三个就是同义词。点阵从本质上讲就是单色位图,他使用一个比特来表示一个点,如果这个比特为0,表示某个位置没有点,如果为1表示某个位置有点。矩阵和位图有着密不可分的联系,矩阵其实是位图的数学抽象,是一个二维的阵列。位图就是这种二维的阵列,这个阵列中的 (x,y)

13、 位置上的数据代表的就是对原始图形进行采样量化后的颜色值。但是,另一方面,我们要面对的问题是,计算机中数据的存放都是一维的,线性的。因此,我们需要将二维的数据线性化到一维里面去。通常的做法就是将二维数据按行顺序的存放,这样就线性化到了一维。12*12 的点阵一行的前面8个点存放在一个字节里面,每一行的剩下的4点就使用一个字节来存放,也就是说剩下的4个点将占用一个字节的高4位,而这个字节的低4位没有使用,全部都默认的为零。汉字库芯片与单片机连接原理图:A8 ASS。 A0。 A1。 A2。 A3。 A4。 A5A17 A6A71Q2Q D13Q D24Q D35Q D46Q D57Q D68Q

14、D7 D8P1.0P1.0P1.0P1.0P1.0P1.0P1.0P1.0P2.0至P2.7P4.0P4.1汉字库芯片74L373单片机2.6 硬件原理图硬件PCB图3 系统软件设计3.1 软件设计思想本方案的软件系统主要包含下列模块:LCD显示:LCD显示驱动程序,实现文本、图形显示等功能。字模提取:通过标准PS2键盘输入汉字(区位输入法)1提取所需显示汉字的12*12点阵字模,并在LCD上显示出来。3.2 系统程序流程图1 LCD显示流程图如下: 开始初始化LCDLCD是否忙LCD写指令LCD清屏写点阵数据是否写完24次结束NYNY2字模提取流程图如下:入口跳线成立吗根据区位码进行字库定位

15、连续读出24个字节到缓存出口3.3 各功能模块软件程序设计3.3.1系统主流函数将LCD显示器的时钟信号sclk接到单片机的P1.1引脚,数据sdin接到单片机的P1.2引脚,数据命令选择接到单片机的P1.3引脚, P1.4接片选sce,复位连接在P1.7#include #define uchar unsigned char#define uint unsigned intsbit sclk=P11;/时钟(-3310pin2)sbit sdin=P12;/数据(-3310pin3)sbit dc=P13;/1写数据,0写指令(-3310pin4)sbit sce=P14;/片选(-3310

16、pin5)sbit res=P17;/复位,0复位(-3310pin8)void init(void) /初使化Lcdvoid clear(void) /清屏函数void qzm(void) /取字模点阵数据函数void WriteCh(void):显示汉字3.3.2 LCD显示函数在LCD显示中首先设置LCD驱动器。当SCE为高时,串行接口被初始化。在这个状态,SCLK时钟脉冲不起作用,串行接口不消耗电力。SCE上的负边缘使能串行接口并指示开始数据传输。1. 当SCE 为高时,忽略 SCLK 时钟信号;在SCE为高期间,串行接口被初始化.2. SDIN 在SCLK的正边缘取样。3. D/C

17、指出字节是一个命令 (D/C = 0)或是一个RAM数据(D/C = 1);它在第八个SCLK脉冲被读出。4. 在命令/数据字节的最后一位之后,如果SCE为低,串行接口在下一个SCLK正边缘等待下一个字节的位7。5. RES端的复位脉冲中断传输。数据不会写进RAM。寄存器被清除。如果在RES正边缘之后SCE为低,串行接口准备接收命令/数据字节的位7。在驱动器完成后,根据指令集完成LCD的驱动指令D/C命令字 描述DB7DB6DB5DB4DB3DB2DB1DB0(H=0or1)NOP000000000空操作功能设置000100PDVH掉电模式:进入模式(PD)扩展指令设置(h)写数据1D7D6D

18、5D4D3D2D1D0写数据到显示RAM(H=0)保留0000001XX不可使用显示控制000001D0E设置显示配置保留00000XXXX不可使用设置RAM的Y地址001000Y2Y1Y0设置RAM的Y地址 0=Y=5设置RAM的X地址01X 6X5X4X3X2X1X0设置RAM的X地址 0=X=83在上述表格中PD=0时,芯片时活动的,PD=1时芯片处于掉电模式。V为寻址方式,通过地址指针寻址,地址范围为:X083(1010011),Y 05(101)。地址不充许超出这个范围。在垂直寻址模式(V=1),Y地址在每个字节之后递增)。经最后的Y地址(Y=5)之后,Y绕回0,X递增到下一列的地址

19、。在水平寻址模式(V=0),X地址在每个字节之后递增,经最后的X地址(X=83)之后,X绕回0,Y递增到下一行的地址。经每一个最后地址之后(X=83,Y=5),地址指针绕回地址(X=0,Y=0)。D and E设置显示模式,3310分别有4种显示模式:00显示空白,10普通模式,01开所有显示段,11反转映象模式。LCD显示模块函数如下:void write_byte(uchar datatemp,uchar mod)/写一字节 mod=0,命令模式 通用 uchar i;dc=mod;dc=mod;for(i=0;i8;i+) sclk=0;sclk=0;if (datatemp&0x80)

20、 sdin=1;sdin=1;else sdin=0;sdin=0;sclk=1;sclk=1;datatemp=1; void init(void) /初使化Lcd uint i;res=0;delay(100);res=1;sce=0;delay(1);write_byte(0x21,0);/初始化Lcd,功能设定使用扩充指令write_byte(0xd3,0);/设定液晶偏置电压(高-低)write_byte(0x20,0);/使用基本指令write_byte(0x0C,0);/设定显示模式,正常显示void set_xy(unsigned char x,unsigned char y)

21、 /设定地址 y=05,x=083 write_byte(y|0x40,0);/设置y轴。write_byte(x|0x80,0);/设置x轴。 void WriteCh(void):显示汉字void LCD_WriteCh() unsigned char *p=hzbufunsigned char z;unsigned int i,j,n=504; for(i=0;i6;i+) set_xy (0,i);for(j=0;j84;j+) while(n-)write_byte(*p,1); delay(); p+; /写下一位 z+; /数组长度 if(z=24) j+=2; n-=2; z=

22、0; 3.3.3 汉字点阵字模提取汉字一般是以点阵式存储的,如1616,12 12点阵,汉字的字模其实是汉字字形的图形化,所谓16点阵字模,就是把汉字写在一个1616的网格内,汉字的笔划通过某网格时该网格就对应1,否则该网络对应0,这样,每一网络均对应1或0,把对应1的网格连起来看,就是这个汉字,汉字就是这样通过字节表示其点阵存储在字符字库中的,12*12 的点阵,每一行的前面8个点存放在一个字节里面,每一行的剩下的4点就使用一个字节来存放,也就是说剩下的4个点将占用一个字节的高4位,而这个字节的低4位没有使用,全部都默认的为零。处理汉字显示时,由于3310液晶模块是4884点阵的,所以显示1

23、212点阵的汉字一行最多显示7个,且最多显示4行。对于每一个汉字的显示,首先应该计算该汉字在字库中的地址,然后读出该汉字的点阵排列。当显示至一行的末尾时要换行显示。在处理汉字显示时有两种方法:一是一次只显示一个汉字,即对于每一个汉字,先计算出此汉字地址,读出其点阵数据,显示完毕再处理下一个汉字,直到处理完所有的汉字;第二种方法是将所要显示的所有汉字的点阵数据从字库中读出存放外部RAM中,再集中处理显示的问题。为了方便查找所需汉字的点阵,每个汉字都对应一个区位码,通过汉字的区位码可以计算出它的点阵起始字节。现以12点阵为例来进行说明,当这些区位码被计算出来之后,就可以用区位码得到它在汉字库中字模

24、第一个字节的位置,即:(BQ94+Bw)24这样,接下来就可以向连续读出由24个字节组成的该字的点阵数据。字模提取函数如下char hzbuf28; unsigned int i,j,k;unsigned long address;for(k=0,k23,k+) i=qwmnumber/100; j=qwmnumber%100; address= (i*94+j)*24+k;hz_buf = XBYTE(unsigned int) address; hz_buf+;4 开发环境4.1 系统调试软件Keil uVision3 Keil C51是美国Keil Software公司出品的51系列兼容

25、单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻4.1.1,主界面4.1.2 调试的主要方法uVision3包括一个项目管理器,它可以使你的8051应用系统设计变得简单。创建一个应用,一般需要下列几个步骤: 启动uVision2,新建一个项目文件 从器件库中选择适用的51芯片。 新建一个源文件并把它加入到项目中。 增加并配置你选择的器件的启动代码。 针对目标硬件进行配置。 编译项目并生成可以编程PROM的HEX文件。4.2在调试中遇到的问题及解决方法51芯片选择错误解决方法:从器件库中选择适用

26、的51芯片stc89c51 无法点亮液晶显示器3310 解决方法:从新检查程序,发现是时序问题,修改延时和sclk行列控制出错 解决方法:修改程序,首先显示全白,在写入数据查对 显示乱码 解决方法,查对程序中数据,行列控制。总 结由于自己在平时没有上好数字逻辑,单片机,C语言和计算机组成原理等课,使我在做论文的时候有一种恐惧心理,总想着这个一点都不懂,怎么学啊,又想想自己又不搞硬件这块,混个及格就行了,可是通过老师不倦的讲解,论文设计时一次一次的动手编程,调试运行,老师检查,最后终于基本搞定了这个系统,完全实现了汉字液晶显示的整个过程。特别是通过这次课题设计,让我,从硬件接口、底层函数、高级函

27、数等方面有了一个比较深的理解。还有就是增强了自身的动手能力,把以前书本上讲的或是没有讲的,通过一次课程设计具体的实施,使自己真正得到锻炼。注 释1 区位输入法是最典型的一个输入法,只要接收到4个数字ASCII码,就组合一个汉字。区位输入法是利用区位码进行汉字输入的一种方法,又叫内码输入法。汉字区位码是一个四位的十进制数,属于流水码,不按字的音和形排列每个区位码都对应着一个唯一的汉字或符号,它的前两位叫做区号(或称“区码”),后两位叫做位号(或称“位码”)。例如,“宝”字的区位编码为,输入数字,就输入了“宝”字。这种数字也是有含义的,它们与每个汉字或字母符号所在的区和位是一一对应的。在区位码汉字

28、输入方法中,汉字编码无重码,在熟练掌握汉字的区位码后,录入汉字的速度是很快的。若是遇到特殊情况,如需输入发音、字形不规则的汉字、生僻字时,区位输入法便更能派上用场了。区位输入法是最典型的一个输入法,只要接收到4个数字ASCII码,就组合成一个汉字。参考文献1 王为青. 单片机Keil Cx51应用开发技术. 北京: 人民邮电出版社, 20072 先锋工作室. 单片机程序设计实例,北京: 清华大学出版社, 2003.1 3 何立民. 单片机高级教程. 北京: 北京航空学院出版社, 2000 4 何立民. 单片机高级教程. 北京: 北京航空航天大学出版社, 20075 陈小忠. 单片机接口技术实用

29、子程序. 北京: 人民邮电出版社, 20056 周坚. 单片机轻松入门. 北京: 北京航空航天大学出版社, 2004 7 刘同法. 单片机基础与最小系统实践. 北京: 北京航空航天大学出版社, 20078 李光飞. 单片机C程序设计实例指导 北京: 北京航空航天大学出版社, 20059 李伯成. 单片机及嵌入式系统 北京: 清华大学出版社, 200510 刘同法. 单片机基础与最小系统实践 北京: 北京航空航天大学出版社, 200711 周立功. 单片机实验与实践 北京: 北京航空航天大学出版社, 200412 李学海. 单片机实用教程 北京: 北京航空航天大学出版社, 2002.213 沙占

30、友. 单片机外围电路设计 北京: 出版社, 2003.114 刘守义. 单片机应用技术 西安: 西安电子科技大学出版社, 2002.815 靳达. 单片机应用系统开发实例导航 北京: 人民邮电出版社, 2003致 谢四年一个轮回,四年前,我们随着世界杯的落幕而走进我们的大学,而四年后的如今要迎来世界杯的时刻我们又要离开,满是不舍与依恋却注定要走。 毕业论文正代表着大学的终结,完成它既有一种收获感,又有一种失落感,可无论如何它代表着我四年的努力,代表了我四年的历程。当它终于完工的时候,我不禁想起了很多人,很多事,尤其是辛勤培养我的老师们,谢谢你们!论文是在导师杨增宝老师的悉心指导下完成的。导师渊

31、博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我影响深远不仅使我树立了远大的学术目标、掌握基本的研究方法,还使我明白了许多待人接物与为人处世的道理。本论文从选题到完成,每一步都是在导师的指导下完成的,倾注了导师大量的心血。在此,谨向导师表示崇高的敬意和衷心的感谢!本论文的顺利完成,离不开各位老师、同学和朋友的关心和帮助。其中给与我最大帮助的是姚荣,真的很感谢,在硬件和软件的设计中都给了我莫大的支持,没做好的部分一直都是他在不懈的努力,我想再次说深感谢。本文是通过网络收集的资料,如有侵权请告知,我会第一时间处理。 .第 22 页 共 22 页

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922