基于52单片机控制LCD汉字滚动显示.docx
《基于52单片机控制LCD汉字滚动显示.docx》由会员分享,可在线阅读,更多相关《基于52单片机控制LCD汉字滚动显示.docx(18页珍藏版)》请在冰豆网上搜索。
基于52单片机控制LCD汉字滚动显示
目录
一、引言6
(一)课题研究背景6
(二)课题设计过程及工艺要求6
1、基本功能6
2、主要技术参数6
3、设计的重点与难7
二、系统设计框图7
三、硬件电路设计7
(一)AT89C52单片机概述7
1.主要特性8
2.引脚功能说明8
3.AT89C52单片机的内部结构9
4.AT89C52单片机的最小系统11
(二)LCD显示屏介绍12
1、LCD的定义及作用12
2、LCD显示器的工作原理12
3、LCD的分类13
4、LCD的特点14
(三)系统硬件设计电路组成14
1、时钟电路的设计14
2、复位电路的设计15
四、软件程序实现15
五、源程序16
(一)、子函数的调用:
16
(二)、主函数:
16
(三)、LCD初始化程序:
17
(四)、LCD写命令程序:
18
(五)、写汉字程序:
19
总结20
参考文献21
致谢22
附录23
摘要
电子技术的日新月异,使我们的生活更加方便、快捷。
任何一个领域,技术总是在不停地向前发展。
而随着技术的发展,新的产品应用也会跟着出现,然后成熟和普及。
正如在显示器领域,由球面CRT到纯平CRT,由纯平CRT到如今主流的LCD液晶显示,而LCD汉字滚动显示更是应用广泛。
本文设计了一种以AT89C51单片机为核心的低成本、高精度、微型化LCD汉字滚动显示系统,并使用一些常用芯片如:
AMPIRE128×64、SMG12864A等。
系统由单片机、外围电路、单片机最小系统以及显示电路构成。
本系统具有易安装检测、软件功能完善,工作可靠、准确度高等优点。
本文论述了由单片机控制的LCD汉字滚动显示系统的基本原理,并阐述了运用Proteus软件实现系统的设计与仿真以及该系统所应用的领域。
关键词:
单片机,LCD,Proteus.
ABSTRACT
Rapiddevelopmentofelectronictechnology,makeourlifemoreconvenientandquick.Anyfield,technologyisconstantlyforwarddevelopment.Butwiththedevelopmentoftechnology,newproductapplicationwillalsofollowappear,thenthematureandpopularity.Asinthedisplayfield,bysphericalCRTtoflat-screenbyflat-screenCRTCRTtonowmainstreamLCDdisplay,andLCDcharactersdisplayediswideapplication.ThispaperintroducesadesignofAT89C51withlowcost,highprecision,miniaturizationLCDdisplaysystem,andChinesescrollusesomecommonchipssuchas:
AMPIRE128x64,SMG12864Aetc.SystemconsistsofSCM,peripheralcircuit,singlechipminimizesystemanddisplaycircuitconstitutes.Thissystemiseasytoinstalldetection,softwarefunctionperfect,reliableoperation,highaccuracyadvantages.
Keywords:
Single-chipmicrocomputer,LCD,Proteus
一、引言
(一)课题研究背景
在现实社会中亮丽实用的广告牌可以给我们的生活添加光彩、可以给店铺招揽生意。
传统的广告牌都是固定的汉字,并且时间长了会掉色,使汉字模糊难认,这给我们的生活带来很多的不便。
尤其是到了晚上传统的广告牌就失去了作用。
因此我们需要一种造价低廉、使用方便、可以发光、可以方便改变汉字且比较耐用的电子显示广告牌。
。
亮丽实用的广告牌可以给我们的生活添加光彩、可以给店铺招揽生意。
传统的广告牌都是固定的汉字,并且时间长了会掉色,使汉字模糊难认,这给我们的生活带来很多的不便。
尤其是到了晚上传统的广告牌就失去了作用。
因此我们需要一种造价低廉、使用方便、可以发光、可以方便改变汉字且比较耐用的电子显示广告牌。
本文主要介绍LCD汉字化滚动显示的基本原理及制作流程来解决以往的传统的广告牌并且做到节约资源来达到比以往更好的效果。
本课题设计了一种以AT89C51单片机为核心的低成本、高精度、微型化LCD汉字滚动显示系统且具有易安装检测、软件功能完善,工作可靠、准确度高等优点来实现以往广告牌所达不到的效果。
(二)课题设计过程及工艺要求
1、基本功能
①可以发光
②可以滚动
③可以用电脑改变汉字
2、主要技术参数
①单片机选择AT89C52
②LCD显示器选择SMG12864A或AMPIRE128×64
③晶振选择12MHz
④两个输出电容选择30pF
⑤两个外围电阻选用10K和100Ω
3、设计的重点与难
本设计的主要任务是显示标语,因此在硬件安装方面需要有适当的面积来安装电子显示屏,并且还要通过数据线把电子显示屏和电脑连起来。
软件设计的难点是:
①所需汉字程序的编译
②整体电路的设计与调试
③Proteus与KeiluVision两种软件的运用
二、系统设计框图
系统框图如图1所示。
本篇论文以单片机AT89C52单片机为核心加各种接口电路组成,共有六个主要组成部分:
AT89C52芯片、复位电路、外围电路、电源电路、编译程序模块以及LCD液晶显示器模块。
图1系统框图
三、硬件电路设计
(一)AT89C52单片机概述
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用
1.主要特性
⏹兼容MCS51指令系统
⏹8k可反复擦写(大于1000次)FlashROM;
⏹32个双向I/O口;
⏹256x8bit内部RAM;
⏹3个16位可编程定时/计数器中断;
⏹时钟频率0-24MHz;
⏹2个串行中断,可编程UART串行通道;
⏹2个外部中断源,共8个中断源;
⏹2个读写中断口线,3级加密位;
⏹低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;
⏹有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求
2.引脚功能说明
引脚图如图2所示:
图2AT89C52引脚图
AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
⏹电源引脚:
VCC(40):
+5V电源
GND(20):
接地。
⏹时钟引脚:
XTAL1(19):
反向振荡放大器的输入,
XTAL2(18):
来自反向振荡器的输出。
⏹控制引脚:
RST(9):
复位输入。
当振荡器复位时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG(30):
地址锁存有效信号输出端。
/PSEN(29):
外部程序存储器的选通信号。
/EA/VPP(31):
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
⏹I/O引脚:
P0口:
无片外存储器时,可作通用I/O口使用,访问外存储器时,用作地址总线的低8位和数据总线。
P1口:
仅用作I/O口。
P2口:
无片外存储器时,作通用I/O口使用,访问外存储器时,用作地址总线的低8位。
P3口:
用作I/O口,用于串行口、中断源输入、计数器、片外RAM选通。
3.AT89C52单片机的内部结构
AT89C52的工作电源电压为5(1±0.2)V且典型值为5V,最高工作频率为24MHz.
AT89C52各部分的组成及功能如图3所示:
图3MCS-52系列单片机的内部结构
(1)、特殊功能寄存器
在AT89C52片内存储器中,80H-FFH共128个单元为特殊功能寄存器(SFR),SFR的地址空间映象。
并非所有的地址都被定义,从80H—FFH共128个字节只有一部分被定义,还有相当一部分没有定义。
对没有定义的单元读写将是无效的,读出的数值将不确定,而写入的数据也将丢失。
不应将数据写入未定义的单元,由于这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单元数值总是“0”。
AT89C52除了有AT89C51所有的定时/计数器0和定时/计数器1外,还增加了一个定时/计数器2。
定时/计数器2的控制和状态位位于T2CON、T2MOD,寄存器对(RCAO2H、RCAP2L)是定时器2在16位捕获方式或16位自动重装载方式下的捕获/自动重装载寄存器。
(2)、数据存储器
AT89C52有256个字节的内部RAM,80H-FFH高128个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128字节的RAM和特殊功能寄存器的地址是相同的,但物理上它们是分开的。
当一条指令访问7FH以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128字节
RAM还是访问特殊功能寄存器。
如果指令是直接寻址方式则为访问特殊功能寄存器。
例如,下面的直接寻址指令访问特殊功能寄存器0A0H(即P2口)地址单元。
MOV0A0H,#data
间接寻址指令访问高128字节RAM,例如,下面的间接寻址指令中,R0的内容为0A0H,则访问数据字节地址为0A0H,而不是P2口(0A0H)。
MOV@R0,#data
堆栈操作也是间接寻址方式,所以,高128位数据RAM亦可作为堆栈区使用。
·定时器0和定时器1:
AT89C52的定时器0和定时器1的工作方式与AT89C51相同。
(3)、时钟振荡器
AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。
4.AT89C52单片机的最小系统
从本质上讲,单片机本身就是一个最小应用系统。
AT89C52虽然有内部振荡电路,但要形成时钟,必须外部附加电路。
由于晶振、开关等器件无法集成到芯片内部,这些器件又是单片机工作所必需的器件,因此,由单片机与晶振电路及由开关、电阻、电容等构成的复位电路就是单片机的最小应用系统。
AT89C52单片机的时钟产生方法有两种。
内部时钟方式和外部时钟方式。
本设计采用内部时钟方式,利用芯片内部的振荡电路,在XTAL1、XTAL2引脚上外接定时元件,内部的振荡电路便产生自激振荡。
本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。
振荡晶体可在1.2MHZ到12MHZ之间选择。
电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,CX1、CX2可在20pF到100pF之间取值。
所以本设计中,振荡晶体选择12MHZ,电容选择30pF。
如图4所示,AT89C52片内有Flash程序存储器,由它构成的最小应用系统简单可靠。
图4AT89C52单片机最小应用系统
(二)LCD显示屏介绍
1、LCD的定义及作用
①LCD液晶显示器是LiquidCrystalDisplay的简称,LCD的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。
比CRT要好的多,但是价钱较其稍贵。
②LCD主要应用于电脑的显示屏,随着电子技术的发展越来越多的手写手机也大量使用LCD做显示屏,还有一些广告牌、标语栏等也都用LCD来显示。
2、LCD显示器的工作原理
从液晶显示器的结构来看,无论是笔记本电脑还是桌面系统,采用的LCD显示屏都是由不同部分组成的分层结构。
LCD由两块玻璃板构成,厚约1mm,其间由包含有液晶材料的5μm均匀间隔隔开。
因为液晶材料本身并不发光,所以在显示屏两边都设有作为光源的灯管,而在液晶显示屏背面有一块背光板(或称匀光板)和反光膜,背光板是由荧光物质组成的可以发射光线,其作用主要是提供均匀的背景光源。
背光板发出的光线在穿过第一层偏振过滤层之后进入包含成千上万液晶液滴的液晶层。
液晶层中的液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。
在玻璃板与液晶材料之间是透明的电极,电极分为行和列,在行与列的交叉点上,通过改变电压而改变液晶的旋光状态,液晶材料的作用类似于一个个小的光阀。
在液晶材料周边是控制电路部分和驱动电路部分。
当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。
液晶显示技术也存在弱点和技术瓶颈,与CRT显示器相比亮度、画面均匀度、可视角度和反应时间上都存在明显的差距。
其中反应时间和可视角度均取决于液晶面板的质量,画面均匀度和辅助光学模块有很大关系。
对于液晶显示器来说,亮度往往和他的背板光源有关。
背板光源越亮,整个液晶显示器的亮度也会随之提高。
而在早期的液晶显示器中,因为只使用2个冷光源灯管,往往会造成亮度不均匀等现象,同时明亮度也不尽人意。
一直到后来使用4个冷光源灯管产品的推出,才有很大的改善。
信号反应时间也就是液晶显示器的液晶单元响应延迟。
实际上就是指的液晶单元从一种分子排列状态转变成另外一种分子排列状态所需要的时间,响应时间愈小愈好,它反应了液晶显示器各像素点对输入信号反应的速度,即屏幕由暗转亮或由亮转暗的速度。
响应时间越小则使用者在看运动画面时不会出现尾影拖拽的感觉。
有些厂商会通过将液晶体内的导电离子浓度降低来实现信号的快速响应,但其色彩饱和度、亮度、对比度就会产生相应的降低,甚至产生偏色的现象。
这样信号反应时间上去了,但却牺牲了液晶显示器的显示效果。
有些厂商采用的是在显示电路中加入了一片IC图像输出控制芯片,专门对显示信号进行处理的方法来实现的。
IC芯片可以根据VGA输出显卡信号频率,调整信号响应时间。
由于没有改变液晶体的物理性质,因此对其亮度、对比度、色彩饱和度都没有影响,这也是为什么华硕、三星、LG等技术型厂商的液晶产品画面效果更好的原因,但是这种方法的制造成本也相对较高。
由上便可看出,液晶面板的质量并不能完全代表液晶显示器的品质,没有出色的显示电路配合,再好的面板也不能做出性能优异的液晶显示器。
随着LCD产品产量的增加、成本的下降,液晶显示器会大量普及。
3、LCD的分类
液晶显示器按照控制方式不同可分为被动矩阵式LCD及主动矩阵式LCD两种。
段码式显示和点阵式显示。
段码是最早最普通的显示方式,比如计算器,电子表这些。
自从有了MP3,就开发了点阵式,如MP3,手机屏,数码相框这些高档消费品。
被动矩阵式LCD在亮度及可视角方面受到较大的限制,反应速度也较慢。
由于画面质量方面的问题,使得这种显示设备不利于发展为桌面型显示器,但由于成本低廉的因素,市场上仍有部分的显示器采用被动矩阵式LCD。
被动矩阵式LCD又可分为TN-LCD(TwistedNematic-LCD,扭曲向列LCD)、LCD(SuperTN-LCD,超扭曲向列LCD)和DSTN-LCD(DoublelayerSTN-LCD,双层超扭曲向列LCD)。
目前应用比较广泛的主动矩阵式LCD,也称TF-LCD(ThinFilmTransistor-LCD,薄膜晶体管LCD)。
液晶显示器是在画面中的每个像素内建晶体管,可使亮度更明亮、色彩更丰富及更宽广的可视面积。
与CRT显示器相比,LCD显示器的平面显示技术体现为较少的零件、占据较少的桌面及耗电量较小,但CRT技术较为稳定成熟。
4、LCD的特点
低压微功耗、平板型结构、被动显示型(无眩光,不刺激人眼,不会引起眼睛疲劳)、显示信息量大(因为像素可以做得很小)、易于彩色化(在色谱上可以非常准确的复现)、无电磁辐射(对人体安全,利于信息保密)、长寿命(这种器件几乎没有什么劣化问题,因此寿命极长,但是液晶背光寿命有限,不过背光部分可以更换)。
(三)系统硬件设计电路组成
1、时钟电路的设计
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us,故而一个机器周期为1us[5]。
如图2所示为时钟电路。
图2时钟电路图
2、复位电路的设计
复位方法一般有上电自动复位和外部按键手动复位,单片机在时钟电路工作以后,在RESET端持续给出2个机器周期的高电平时就可以完成复位操作[6]。
例如使用晶振频率为12MHz时,则复位信号持续时间应不小于2us[7]。
本设计采用的是外部手动按键复位电路。
如图3示为复位电路。
图3复位电路图
四、软件程序实现
主程序工作流程图:
如图3:
五、源程序
(一)、子函数的调用:
voidlcd_cmd_wr(ucharcmdcode,ucharf);/调用写命令函数/
voidlcd_data_wr(ucharldata,ucharf);/调用写数据函数/
voidchech_busy(ucharf);/调用读忙函数/
voidlcd_hz_wr(ucharposx,ucharposy,uchar*hz);/调用写汉字函数/
voidlcd_str_wr(ucharrow,ucharcol,ucharn,uchar*str);/调用写结构/
voidlcd_rol();/调用滚屏程序/
voidlcd_init();/调用初始化/
voiddelay(uintn);/延调用时/
LCD12864的汉字显示是利用不同的子函数共同构成的,子函数调用是其一个特点。
(二)、主函数:
voidmain()/主函数/
{
while
(1)
{
lcd_init();
lcd_str_wr(0,0,8,hz0);/汉字0的结构/
delay(100);/延时100/
lcd_str_wr(1,0,8,hz1);/汉字1的结构/
delay(100);/延时100/
lcd_str_wr(2,0,8,hz2);/汉字2的结构/
delay(100);/延时100/
lcd_str_wr(3,0,8,hz3);/汉字3的结构/
delay(100);/延时100/
lcd_rol();/滚屏程序/
delay(1000);/延时1000/
lcd_rol();/滚屏程序/
delay(1000);/延时1000/
}
}
主函数是程序的开始部分。
主函数意味着建立一个独立进程,且该进程成为了程序的入口,对其它各函数进行调用,当然其它被调用函数也可以再去调用更多函数。
主函数既是程序的入口,又是程序的出口。
(三)、LCD初始化程序:
voidlcd_init()/LCD初始化程序/
{
uinti;
lcd_cmd_wr(0x3f,0);
lcd_cmd_wr(0xc0,0);
lcd_cmd_wr(0xb8,0);
lcd_cmd_wr(0x40,0);
lcd_cmd_wr(0x3f,1);
lcd_cmd_wr(0xc0,1);
lcd_cmd_wr(0xb8,1);
lcd_cmd_wr(0x40,1);
for(i=0;i<256;i++)/循环256/
{
lcd_data_wr(0x00,0);
lcd_data_wr(0x00,1);
}
lcd_cmd_wr(0xb8+4,0);
lcd_cmd_wr(0xb8+4,1);
for(i=0;i<256;i++)/循环256/
{
lcd_data_wr(0x00,0);
lcd_data_wr(0x00,1);
}
}
LCD初始化程序是为第一次显示做准备,初始化要做的有:
显示模式设置,显示开、关和光标设置,清屏,显示光标移动设置,显示开及光标设置……
(四)、LCD写命令程序:
voidlcd_cmd_wr(ucharcmdcode,ucharf)/LCD写命令程序/
{
chech_busy(f);/读忙/
if(f==0)LLCD_CMD_WR=cmdcode;
elseRLCD_CMD_WR=cmdcode;
}
将汉字代码写入程序。
读忙程序:
voidchech_busy(ucharf)/读忙程序/
{
if(f==0)LLCD_CMD_RD;/左屏读命令/
elseRLCD_CMD_RD;/右屏读命令/
while(busy);
}
这是检测LCD忙否的函数,如果是1说明数据还没传完,此时LCD忙碌,否则LCD空闲。
voidlcd_str_wr(ucharrow,ucharcol,ucharn,uchar*str)/写结构函数/
{
uchari;
for(i=0;i{
lcd_hz_wr(row,col,str+i*32);/写汉字/
delay(50);/延时50/
col++;
}
}
(五)、写汉字程序:
voidlcd_hz_wr(ucharposx,ucharposy,uchar*hz)/写汉字程序/
{
uchari;
if(posy<4)
{
lcd_cmd_wr(0xb8+2*posx,0);/写命令/
lcd_cmd_wr(0x40+16*posy,0);/写命令/
for(i=0;i<16;i++)lcd_data_wr(hz[i],0);/循环16写数据/
lcd_cmd_wr(0xb8+2*