《基于单片机的液晶显示设计-毕设论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的液晶显示设计-毕设论文.doc(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、苏州经贸职业技术学院苏州经贸职业技术学院毕业设计(论文)材料 毕业设计(论文)课题:12864液晶显示的设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文
2、)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 目 录摘 要3前 言4第一章 绪 论11.1 单片机选型11.2 LCD方案论证11.3 LCD显示原理11.4 设计要求1第二章 硬件电路设计22.1. 硬件系统结构图22.2 AT89S52单片机最小系统设计22.2.1 AT89S52单片机22.2.2 电源电路设计32.2.3 时钟电路设计32.2.4 复位电路设计42
3、.3 AMPIRE128*64LCD简介42.3.1主要参数42.3.2 主要指令代码52.3.3 写操作时序52.3.4 读操作时序52.4 LCD与单片机接口62.5 电路设计图6第三章 系统软件设计63.1 总体流程图63.2 12864LCD程序73.3 程序清单及注释10第四章 仿真调试和结果分析104.1 仿真步骤104.2 仿真结果及分析12第五章 取模软件的使用方法145.1 PCtoLCD2002取模软件的使用方法145.2 畔畔字模提取软件的使用方法17总 结18致 谢19参 考 文 献20附录A 程序清单与解释21附录B 电路设计图63摘 要本文设计主要介绍了以AT89S
4、52单片机为控制设备,AMPIRE128*64液晶显示器为显示设备,实现的一个可以显示静态汉字、动态汉字、字符、图片以及由多个图片形成的简单动画的液晶显示设计。通过设置PCtoLCD2002取模软件和畔畔字模提取软件的相关参数值,再根据AMPIRE128*64LCD的指令表及程序设计等提取所要用的汉字、字符、图片程序送往液晶显示器显示,并可做一些灵活的动态显示变换,提升显示效果。本文在KEIL软件下,采用的是C语言进行软件设计,C语言使用助记符、符号、和数字等来表示指令的程序语言,容易理解和记忆且通用性强,设计方便。利用Proteus软件进行仿真和验证系统的正确性。 关键词:单片机、AMPIR
5、E128*64LCD显示、Proteus 前 言毕业设计,要求学生更多的完成软硬件结合的动手实践方案,解决目前学生课程设计过程中普遍存在的缺乏动手能力的现象。而单片机设计的目的与任务是训练学生综合运用已学课程“单片机工程项目应用技术”的基本知识,独立进行单片机应用技术和开发工作,掌握单片机程序设计和应用电路设计、分析及调试检测。在单片机应用系统中,良好的人机界面是不可缺少的重要组成部分,用户可通过人机界面获取系统运行状态及一些过程参数,方便用户操作。在通常情况下,人机界面用两种方法实现,一种是用普通的数码管LED实现,LED显示器价格低廉,发光强度高,机械性能好,在普通单片机系统中应用较为广泛
6、;另一种则是液晶显示。本设计使用的是AMPIRE128*64LCD。随着社会的发展,越来越多的地方需要应用显示功能,例如,各种数字显示仪器中的显示、广告屏、数码产品等。传统的数码管显示已经远远不能满足各行各业的需求。基于单片机LCD显示是一种用单片机来控制的显示系统,它不仅能显示各种数字、字母,还能显示各种字体的汉字以及一些简单的图像和动画,使用起来极为便利,只要通过对单片机写入一定的程序来控制LCD的显示即可完成,根据程序的不同而产生不同效果以满足各种需求。本设计采用AT89S52模拟仿真,大致要求为:设计12864液晶显示与单片机的显示接口电路,显示简单的静态/动态汉字,图片以及由多个图片
7、组成的简单动画。64第一章 绪 论1.1 单片机选型此设计是通过单片机来控制LCD来显示一些要求的汉字、字符、图片及简单动画等。单片机种类繁多,由于上课着重介绍了51系列的单片机,故对此类型的单片机比较熟悉,故在此设计中选用的单片机为AT89S52,方便操作和进一步学习加深。1.2 LCD方案论证方案一:使用LCD1602成本低,程序控制简单,但它只能显示16*2个半宽字型符,不能显示汉字,比较单调。方案二:LCD128*64硬件上提供8位,4位并行接口及串行接口供选择,64*16位字符显示RAM,2M位中文字型ROM,总共提供8192个中文字型(16*16点阵),16K位半宽字型ROM,总共
8、提供126个西文字型(16*8点阵),64*16位字符产生RAM。在软件上提供文字与图形混合显示、画面清除、显示移位、反白显示等功能,相对于LCD1602来说功能丰富且由于AMPIRE128*64LCD能够显示的资料比较容易得到,又比较通俗易懂,便于快速上手。综合以上方案,决定选用AMPIRE128*64LCD用来作为显示。1.3 LCD显示原理LCD由两块玻璃板构成,厚约1mm,其间由包含有液晶材料的5m均匀间隔隔开。因为液晶材料本身并不发光,所以在显示屏两边都设有作为光源的灯管,而在液晶显示屏背面有一块背面板(或称匀光板)和反光膜,背光板是由荧光物质组成的可以发射光线,其作用主要是提供均匀
9、的背景光源。背光板发出的光线在穿过第一层偏振过滤层之后进入包含成千上万液晶液滴的液晶层。液晶层中的液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。在玻璃板与液晶材料之间是透明的电极,电极分为行和列,在行与列的交叉点上,通过改变电压而改变液晶的旋光状态,液晶材料的作用类似于一个个晓得光阀。在液晶材料周边是控制电路部分和驱动电路部分。党LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。1.4 设计要求 在本次课题研究中我将参考从各个方面收集到的文献,博取其精华。研究方法则是采用单片机设计LCD显
10、示,通过初始化12864LCD,并设定各个汉字、字符、图片的地址信息,以研究AMPIRE128*64LCD的工作原理及设计。研究的设计要求包括以下方面:1、通过LCD将所设定的汉字、图片等显示在外;2、汉字可做简单的移动变换等;3、可以显示一些图片;4、利用图片做出简单的动画效果;5、单片机C程序编程语言。第二章 硬件电路设计2.1. 硬件系统结构图此设计控制系统由AT89S52单片机芯片、LCD显示电路、电源电路、复位电路、晶体振荡电路组成。 单片机 LCD显示器 电源电路 复位电路晶振电路 图2.1 总设计框图2.2 AT89S52单片机最小系统设计 单片机最小系统主要由单片机AT89S5
11、2、电源电路、复位电路、时钟电路组成。2.2.1 AT89S52单片机 AT89S52主要功能特性: 一个8位微处理器 256字节的数据存储器和32个特殊功能寄存器,用于存放可读/写的数据 8K字节的内部快闪程序存储器,用于存放程序、原始数据或表格 3个16位定时/计时器,用以对外部事件进行计数,也可用作定时器 4个8位可编程的输入/输出(I/O)并行端口,每个端口既可做输入,也可做输出 一个全双工异步串行口(UART)串行通道,用于数据的串行通信 6个中断源,2个优先级 可寻址各64KB的外部程序存储器、数据存储器空间 有位寻址功能 片内振荡器即内部时钟电路,石英晶体和微调电容需要外接。最高
12、允许振荡频率为32MHz 可降至0Hz静态逻辑操作,具有支持2种软件,可选择节电工作方式,即休闲方式及掉电方式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 在线编程(ISP)功能 内部集成看门狗计时器 双数据指示器 电源关闭标记 全新的加密算法 向下完全兼容MCS-51全部子系列产品,兼容MCS-51指令系统2.2.2 电源电路设计单片机所使用的电源根据实际需要设计,这里将220v电压转变为+5v电压。如下图,利用桥式整流电路将220v电压降压整流,然后经过电容滤
13、波,LM7805稳压电路,最后转为+5v直流电压。稳压二极管VD3的作用有两个:一个是降低集成稳压电路7805(U1)的输入电压;二是防止总线断电时,电容C5上所存储的电荷向总线释放。电容C8、C9是滤波电容,7805是+5V的集成稳压电路,C10、C11是去耦电容,发光二极管VD4是电源指示灯,R13是VD4的限流电阻。图2.2 +5v直流电路2.2.3 时钟电路设计单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得到的时钟信号比较稳定,实际使用中常采用这种方式。图2.3振荡电路图2.2.4 复位电
14、路设计单片机在启动运行时,都需要先复位,它的作用是使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51系列单片机本身,一般不能自动进行复位,必须配合相应的外部电路才能实现。复位电路的作用就是使单片机在上电时能够复位或运行出错时进行复位状态。图2.2按键与上电复位电路2.3 AMPIRE128*64LCD简介本系统采用液晶显示模块AMPIRE128X64,为单色LCD。屏幕分为两半控制,控制引脚为CS1和CS2,数据通过移位寄存器输入。图2.3 AMPIRE128*64外形图管脚一共18个。CS1左半屏片选端,CS2右半屏片选端;VCC、GND就是VCC、GND
15、,没啥好说的;V0液晶显示驱动电压,在网上找的仿真实例中有的这个脚就悬空,我是通过一个电位器接到VCC;RS数据指令选择信号,H为数据,L为指令,有的资料上也叫D/I,我估计是DATA和INSTRUCTIONS这两个单词的缩写;R/W读写选择信号,H为读,L为写,这肯定是READ和WRITE的缩写。E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E为H,DDRAM数据读到DB7-DB0,如果只写不读的话可以接地处理。DB0-DB7数据传输端口。RST复位信号,不过还没弄明白是怎么回事,参考一些资料后接VCC处理。-VOUT估计和V0差不多,液晶显示驱动电压。2.3
16、.1 主要参数表2-1主要参数显示容量:128*64点阵模块最佳工作电压:5.0V工作电压:4.85.2V点尺寸:0.48*0.48 mm工作电流:5.1mA(5.0V)工作温度:-2060背光源颜色:黄绿储存温度:-3070背光源电流:140mA2.3.2 主要指令代码表2-2 指令代码指令码功能3EH关显示3FH开显示指令码功能0C0H设置显示初始行指令码功能0B8H+页码(07)设置数据地址页指针40H+列码(063)设置数据地址列指针2.3.2 写操作时序(时序参数均为NS级,单片机为US级,故不用考虑延时)图2.4 写操作时序图2.3.4 读操作时序(时序参数均为NS级,单片机为US
17、级,故不用考虑延时)图2.5 读操作时序图2.4 LCD与单片机接口表2-3 引脚简介编号符号引脚说明编号符号引脚说明1VCC电源地10DB3Data I/O2VDD电源正极(+5V)11DB4Data I/O3V0LCD偏压输入12DB5Data I/O4RS数据/命令选择端(H/L)13DB6Data I/O5R/W读写控制信号(H/L)14DB7Data I/O6E使能信号15CS1片选IC1信号7DB0Data I/O16CS2片选IC2信号8DB1Data I/O17RTS复位端(H:正常工作,L:复位)9DB2Data I/O18VEELCD驱动负压输出 2.5 电路设计图 见附录
18、第三章 系统软件设计3.1 总体流程图基于单片机的12864液晶显示软件设计主要由显示子程序、读出并处理12864LCD显示程序等组成。为了充分发挥AT89S52优越的性能价格比,系统软件采用C语言编写以增强系统的实时性。在设计上尽量做到硬件“软化”,使系统硬件设计得到简化。开 始LCD初始化检测忙信号左写指令子程序左写数据子程序右写指令子程序右写数据子程序清屏程序结 束延时程序LCD显示图3.1总体流程图3.2 12864LCD程序void init(void) /*左边屏初始化 l_wcode(0x3f); /*屏幕开显示 l_wcode(0xc0); l_wcode(0xb8);/*第一
19、页开始 l_wcode(0x40); /*第一列开始 r_wcode(0x3f); /*右边屏初始化 r_wcode(0xc0); r_wcode(0xb8); r_wcode(0x40); void checkbusy(void) /*忙检测函数* E=1; RS=0; /命令 RW=1; /写 P0=0xff; ACC=P0; while(!busy);void l_wcode(char l_code) /*左写命令函数 checkbusy(); P2=0xf2;/1111 0010;E=1,RW=0,RS=0,CS2=1,CS1=0 P0=l_code; E=1; E=0; void l
20、_wdata(char l_data) /*左写数据显示 checkbusy(); P2=0xf6;/1111 0110;E=1,RW=0,RS=1,CS2=1,CS1=0 P0=l_data; E=1; E=0; void r_wcode(char r_code)/*右命令函数 checkbusy(); P2=0xf1;/1111 0001;E=1,RW=0,RS=0,CS2=0,CS1=1 P0=r_code; E=1; E=0; void r_wdata(char r_data)/*右数据函数 checkbusy(); P2=0xf5;/1111 0101;E=1,RW=0,RS=1,C
21、S2=0,CS1=1 P0=r_data; E=1; E=0;void show()/*显示从四个角回到中间*图片 ywei=0xb8;end=0xba; over=0xbe; for(lshu=0x40,you=0x70;lshu0x71;lshu=lshu+0x17,you=you-0x17) k=0;for(i=ywei;i0;j-) l_wdata(tab2k+);/j=16是为了显示一个字的控制 r_wcode(i); r_wcode(you); for(j=16;j0;j-) r_wdata(tab2k+); k=k+32; k=32; for(fan=over;fan0;j-)
22、l_wdata(tab2k+); r_wcode(fan); r_wcode(you); for(j=16;j0;j-) r_wdata(tab2k+); k=k+32; over-; if(lshu=0x60) /*if为真是四个字汇聚后的稍长延时时间 delay(800); else delay(500);clean();ywei=ywei+0x01; /*为每次控制移动的增量(页数)end=end+0x01;if(end=0xbe) break; void delay(int ms) /*延时函数 int f,n; for(f=ms;f0;f-) for(n=110;n0;n-);voi
23、d clean() /*清屏函数for(i=0xb8;i0;j-) l_wdata(0x00); for(i=0xb8;i0;j-) r_wdata(0x00); 3.3 程序清单及注释 见附录第四章 仿真调试和结果分析4.1 仿真步骤第一步 在Proteus中画好电路图在Proteus中新建空白文件保存,从元件库中选取并放置元器件和电源、地终端,按原理图连好线。第二步 电气检测电路设计完成后,单击工具栏中电气检查按钮“”,会跳出检查结果窗口,如图4-1所示。窗口前面是一些文本信息,完成接着是电气检查结果列表。若有错,会有详细说明。当规则检查出现:NETLIST GENERATED OK NO
24、 ERC ERRORD FOUND ,表示通过检查。图4-1 电气检测窗口第三步 加载目标代码文件和设置时钟频率将两种方法得到的目标代码文件心梦.hex 加载到单片机中。在ISIS编辑区中双击单片机,则弹出如图4-2所示的加载目标代码文件和设置时钟频率的窗口。单击在Program File栏右则“”的按钮,弹出文件列表,将心梦.hex文件加载到AT89S52芯片中。图4-2加载目标代码文件和设置时钟频率第四步 仿真点击仿真按钮中的运行按钮,启动系统仿真。此程序是自己找的一个关于12864液晶显示的程序。我在调试的过程中发现这个程序还有些不完善的地方,离我的设计目标还是有一定的差距。因此我开始对
25、此程序进行修改,尽量的使其适合我的设计目标。在程序编译部分,我使用的是KEIL软件,对程序进行编译调试最后生成HEX文件,以便把其下载在芯片之中,最后成功的生成HEX文件。KEIL软件的使用课件可以见附件。4.2 仿真结果及分析1)仿真运行后,清屏,首先显示宽为16,高位32的字符3,2,1以及小图片。图4.3动态字符图2)分别显示下面三幅128*64的图片。 图4.4显示图片图3)显示从四个角落回到中间的四个16*16的图像。 图4.4动态图形图图像由16点阵所得,分别通过左/右旋转90度得到程序。图4.5单个图形图4)显示由12幅图片构成的简单动画,其实就是将延时时间缩成很短,造成视觉上的
26、效果就成了连续的动作,形成了动画。 图4.6简单动画图5)显示一个一个的出现汉字,控制想要的字数,最终形成完整的句子。图4.7动态字符图6)显示延时时间较长的两幅图片。图4.8显示图片图7)先显示静态的汉字,然后上半部分变换,最后显示移动的结束语over 图4.9动静态汉字图第五章 取模软件的使用方法5.1 PCtoLCD2002取模软件的使用方法1)参数设置 本次课程设计的点阵格式是阴码,取模方式为列行式,取模走向是逆向(地位在前),自定义格式为C51格式,最好将行前缀与行后缀的“”去掉,像素大小为8。图5.1 PCtoLCD2002取模软件的参数设置图2)汉字及字符的取模图如下: 本次的课
27、程设计,需要将字模的上下行分开输入,否则汉字的上下部分将会分开,排列成左右形式。图5.2 PCtoLCD2002取模软件的汉字取模图图5.3字模显示效果图3)图形的取模图如下:切记打开的图片,保存格式为单色位图.bmp,尺寸大小不可超过128*64。否则取模软件中打开的图片将会显示不出来。图5.4 PCtoLCD2002取模软件的图片取模图图5.5图片显示效果图5.2 畔畔字模提取软件的使用方法将所想要显示的16*16的图形在点阵中点出来,可左右旋转90度得出另外四个方向的图形,当从四个角落汇合至中间时,能拼凑出不同效果。方法如图所示:图5.6 16点阵图形取模图图5.7 16点阵图形显示效果
28、图总 结本次设计虽然没有特别的复杂,但是由于初次涉及这样的设计,没有任何的经验,过程还是倍感吃力的。首先就是LCD的选择,因为之前没有学习过这样的器件,算是一个新的概念,所以认识不全,有些不知所措。其次就是软件的编写,要得到正确的汉字以及图片的地址信息,花费了较长时间才找到相匹配的取模软件。然后研究如何获取正确的参数,其中图片的取模就很令我苦恼,最后在老师的辅导下才得以提取正确。程序有了之后,再进行相关的变换,最终得到新颖的效果。在这次的设计过程中虽然尝到了设计的困难,但是更重要的是让我感受到了它的魅力,不知不觉的就想要做出更多的花样,特别是成功仿真后,着实有一种成就感。在此次过程中不仅巩固了
29、我对Word及单片机的使用,同时也让我对LCD显示以及取模软件有了一个较为清晰的了解,弥补了我的一个盲区,使我有了知识和精神双方面的收获,相信这将是一次有意义的设计。致 谢毕业论文,谈不上多深研究,攀不上多少学术,写一点略懂的事情,尽一点微薄的力气。在此论文最终完成之际,向所有关心和帮助过我的同学和朋友表示深深感谢!感谢他们为我提供的帮助,使我的毕业设计能顺利完成。 每一位老师的悉心教导都是我完成这篇论文的基础。衷心感谢我的指导老师吴振磊老师,从毕业设计的开始到毕业论文的最终定稿,给了我细心的指导和帮助。您严谨的治学态度,开阔的思维,渊博的知识深深感染了我,让我终生受用。在此,我向我的指导老师
30、致以诚挚的谢意和深深的敬意。从他那里我不仅仅是收获了学术方面的知识,更重要的是学会了治学严谨的态度。以后我一定会更加努力的完善。参 考 文 献1俞锡存,曹国华,单片机原理及接口技术M.西安电子科技大学出版社,2004年2张志良,单片机原理及控制技术(第2版).北京:机械工业出版社,2005年3陈堂敏、黄英,单片机工程项目应用技术4余永权,MCS-51系列单片机实用接口技术M.北京:北京航空航天大学出版,1993年5王守中,51单片机开发入门与典型实例.北京:人民邮电出版社,2007年8月6 薛小铃,刘志群,贾俊荣,单片机接口模块应用与开发实例详解,北京航空航天大学出版社,2010年1月7 附录
31、A 程序清单与解释主程序:本程序汉字取模即扫描方式是从左到右、从上到下的原则、纵向八点下高位。 *#include#include#define uchar unsigned char#define uint unsigned intsbitE=P24;sbitRW=P23;/RW 为 1- 写; 0- 读sbitRS=P22;/RS 为 0 命令; 1 数据sbitCS2=P21;/ 片选 1 低电平有效,控制右半屏sbitCS1=P20;/ 片选 1 低电平有效,控制左半屏sbitbusy=P07;uchar i,j,lshu=0x40,you=0x40,ywei,end,over,fan
32、;uint k=0,h,m,y;void init(void); /函数声明void checkbusy(void);void l_wcode(char l_code); /左写命令void l_wdata(char l_data); /左写数据void r_wcode(char r_code); /右写命令void r_wdata(char r_data); /右写数据void clean(); /清屏 void delay(int ms); /延时void init(void) /*左边屏初始化 l_wcode(0x3f); /*屏幕开显示 l_wcode(0xc0); l_wcode(0
33、xb8);/*第一页开始 l_wcode(0x40); /*第一列开始 r_wcode(0x3f); /*右边屏初始化 r_wcode(0xc0); r_wcode(0xb8); r_wcode(0x40); void checkbusy(void) /*忙检测函数* E=1; RS=0; /命令 RW=1; /写 P0=0xff; ACC=P0; while(!busy);void l_wcode(char l_code) /*左写命令函数 checkbusy(); P2=0xf2;/1111 0010;E=1,RW=0,RS=0,CS2=1,CS1=0 P0=l_code; E=1; E=
34、0; void l_wdata(char l_data) /*左写数据显示 checkbusy(); P2=0xf6;/1111 0110;E=1,RW=0,RS=1,CS2=1,CS1=0 P0=l_data; E=1; E=0; void r_wcode(char r_code)/*右命令函数 checkbusy(); P2=0xf1;/1111 0001;E=1,RW=0,RS=0,CS2=0,CS1=1 P0=r_code; E=1; E=0; void r_wdata(char r_data)/*右数据函数 checkbusy(); P2=0xf5;/1111 0101;E=1,RW
35、=0,RS=1,CS2=0,CS1=1 P0=r_data; E=1; E=0; void show()/*显示从四个角回到中间*图片 ywei=0xb8;end=0xba; over=0xbe; for(lshu=0x40,you=0x70;lshu0x71;lshu=lshu+0x17,you=you-0x17) k=0;for(i=ywei;i0;j-) l_wdata(tab2k+);/j=16是为了显示一个字的控制 r_wcode(i); r_wcode(you); for(j=16;j0;j-) r_wdata(tab2k+); k=k+32; /*上面显示* k=32; for(fan=over;fan0;j-) l_wdata(tab2k+);