单片机控制的LCD汉字显示电路设计独家完整_第1页
单片机控制的LCD汉字显示电路设计独家完整_第2页
单片机控制的LCD汉字显示电路设计独家完整_第3页
单片机控制的LCD汉字显示电路设计独家完整_第4页
单片机控制的LCD汉字显示电路设计独家完整_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机控制的LCD汉字显示电路设计 摘 要近年来,随着电子行业的发展,单片机的应用越来越广泛,基于单片机的电子电路的设计也越来越多。所以,单片机在电子教学中越来越普遍。本设计介绍的是以ATMEGA8单片机为核心的液晶显示屏控制系统。该设计详细阐述了其工作原理、基本功能框图、主要设计方法及工作流程。本设计提出了一种能实时控制显示内容的基于单片机的液晶显示屏控制系统设计方案,给出了该单片机的硬件电路和软件程序,最终显示出汉字的结果。具体方法是首先设计并焊接出一个AVR单片机开发板,基于此开发板设计出LCD模块显示电路。之后,编写LCD模块初始化程序和显示程序。最后下载程序到单片机,LCD显示出汉字

2、。关键词: Atmega8 控制 LCD12864 显示 Title The control circuit design of the dot-matrix liquid crystal display controlled by the microprocessor AbstractIn recent years, with the development of the electronics industry, the application of the Microcontroller Unit is becoming more and more widely, also, there

3、 is more and more electronic circuit design based on the Microcontroller Unit. Therefore, the Microcontroller Unit using in the electronic teaching is becoming more common.This design introduces the liquid crystal display control system based on the ATMEGA8 microcontroller. This design elaborated on

4、 its working principle, the basic functional block diagram, main design methods and working process. This design puts forward to a design scheme based on the Microcontroller Unit, which can control the showing content of the LCD screen controlling system at the real time. The specific method is 

5、;that, firstly we should design and weld into an AVR Microcontroller development board and then design a LCD module display circuit based on the development board. After that, write the LCD module initialization program and displaying program. At last, download the program to the MCU, and the LCD wi

6、ll show the Chinese characters.Keywords ATMEGA8 control LCD12864 displaying目次摘 要IAbstractII目次III1概述11.1课题背景11.2设计要求11.3 LCD简介及发展11.4 AVR单片机22方案论证22.1方案一22.2方案二32.3方案三33主要模块简介33.1 ATMEGA8简介33.2 LCD12864模块简介43.2.1 KXM12864主要技术参数和性能43.2.2 KXM12864外形尺寸图53.2.3 KXM12864液晶显示指令系统63.2.4 12864液晶显示动态指标及术语74硬件设

7、计94.1设计流程图及设计思路94.2各模块电路设计10电源电路104.2.2 LCD12864模块控制电路114.2.3 RS232电平转换电路124.2.4 时钟电路134.3硬件焊接与调试144.4方案扩展145软件设计165.1 LCD12864模块初始化流程16165.2部分程序代码17软件延时175.2.2 端口输出函数185.2.3 写数据函数185.2.4 写指令函数195.2.5 初始化函数205.2.6 显示函数205.3程序调试中的注意问题236实物与实测效果展示276.1实物展示276.2实测效果展示28结论29感言30致谢31参考文献32附录A33硬件原理图(基于pr

8、otel99se)33附录B34程序代码34附录C40元器件规格清单401概述自20世纪以来,电子行业发生着翻天覆地的变化。电子行业的发展推动着社会的发展,因此,世界各国也大力发展电子行业。其中,在电子行业中,显示器产业是其中尤为重要的产业之一。然而,在显示器产业中,LCD技术是最重要的技术之一。 众所周知,单片机像是电子行业中发挥着巨大作用的精灵。它的能耗小、价格低廉,在简单的电子实验方面的应用非常广泛,在教育教学中深受广大电子教育工作者的喜爱。1.1课题背景在电子行业中,LCD已被公认为是媒体时代的关键器件,它的低功耗、体积小、易于实现画面显示及优良的全色显示性能等特点,使其在现代社会中得

9、到了广泛的应用。可以说,LCD是本世纪初最有活力的电子产品之一。与此同时,单片机的应用领域也非常广泛,大到导弹的导航装置,飞机上各种仪表的控制,小到广泛使用的智能IC卡,比如学校中使用的校园一卡通等,这些都离不开单片机。因此,通过使用单片机可以使我们完成很多令我们意想不到的事情。所以,本着理论与实践相结合的原则,本设计以单片机为核心控制器件控制LCD显示模块,通过硬件和软件的共同配合实现在128×64点阵液晶屏上显示汉字、字符等的功能,本系统由ATMEGA8单片机和点阵式液晶显示屏模块构成。1.2设计要求系统硬件设计:系统选用ATMEGA8单片机作为主控和处理设备,LCD12864模

10、块作为输出设备。系统软件设计:微控制器处理和LCD模块显示部分的程序设计。1.3 LCD简介及发展液晶显示器是一种采用了液晶控制透光度技术来实现色彩的显示器。众所周知,即使长时间观看LCD显示屏幕也不会对眼睛造成伤害,这主要是因为LCD显示器没有辐射,画面图像很稳定。LCD 可分为段位式LCD、字符式LCD 和点阵式LCD。其中,段位式LCD 和字符式LCD 只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD 不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动、动画、分区开窗口、反转、闪烁等功能,用途十分广泛。奥地利植物学家F

11、83;Reinetzer在一百多年前发现了液晶。然而,到20世纪60年代,液晶才逐渐被人类关注。1961年, F·Heimeier发现了液晶的动态散射相变等一系列的液晶电光效应。由此,美国RCA公司成功研制了一系列数字、字符的显示器件以及液晶显示的钟表、驾驶台显示器等实用产品。1968年,日本当时正在兴起开发电子产品的产业,将大规模集成电路与液晶相结合,开发了一系列电子产品。从此,日本电子产业蓬勃发展,这也是日本微电子产业闻名世界的起因。现代液晶显示模块具有低电压、微功耗、易彩色化、被动显示等特点, 是主流的显示技术之一。1.4 AVR单片机1997年,ATMEL发挥自己的技术特长,

12、研发出了全新配置,采用精简指令集的新型单片机,即AVR单片机。其中,ATMEGA8是ATMEL 公司在2002年第一季度推出的一款新型高档单片机。与MCS-51单片机不同的是,AVR 单片机采用Harvard结构,在前一条指令执行的时候就取出下一条指令,而且它的程序存储器和数据存储器是分开组织和寻址的。AVR单片机内部有三种不同性能和用途的存储器Flash、EEPROM和RAM。2方案论证2.1方案一根据本课题内容,本设计拟采用MCS-51单片机控制液晶显示器显示汉字。MCS-51型号的单片机我曾在单片机原理、接口及应用的必修课中学习过,对该型号单片机的结构和如何控制都比较熟悉。本次课题设计需

13、要+5V电源为单片机及液晶显示器提供电压,所以,需要设计一个直流稳压电源来提供所需的+5V电压。结合模拟电子技术基础所学知识,我了解到,直流稳压电源又分为线性稳压电源和开关型稳压电源。然而,对于稳定性要求不高的电子电路,整流、滤波后的直流电压即可以作为供电电压。而且我们曾在模拟电子技术中学习过整流、滤波电路的理论知识,还曾做过一个基于整流、滤波电路的直流稳压电源的实物,所以电源电路设计拟采用三端口稳压器7805及整流桥电路来搭建电路以获得+5V电压。本次设计要求采用点阵式液晶显示器,我想用LCD1602作为显示设备。2.2方案二当我查阅了有关资料,我就发现了另一型号的单片机,即AVR单片机。结

14、合所学的有关51系列单片机的知识以及对AVR单片机资料的查阅,我了解到,相比之下,AVR单片机比51系列单片机具有更加优良的性能。最重要的是,AVR单片机能够更高效的执行程序代码。而且,我认为,既然已经学习过MCS-51系列的单片机,有了单片机的使用的基础,就应该举一反三,所以,我决定挑战性地使用AVR单片机来完成本次毕业设计。ATmega8L单片机我曾在以前的开放性试验中接触过,了解到该型号单片机芯片内部集成了较大容量的存储器和丰富的硬件接口电路,适合于本次毕业设计。而且,AVR单片机的价格又与低档单片机的价格相差不大。所以考虑到以上几点,我决定对方案一进行改进,确定使用单片机ATmega8

15、L。相比而言,方案二在方案一的基础上做了很大的改进,方案二无论是在实现的难易程度,还是在性能的优越程度上都比方案一更佳。2.3方案三经过查阅有关点阵式液晶显示器的资料,我发现了另一类型的点阵式液晶显示器即LCD12864模块,该模块自带中文字库,如果使用该模块来完成本次设计将会更易控制,也会使程序更加精简。当LCD工作在并行工作状态时, LCD1602会占用了CPU的很多引脚,这会降低系统的性价比。而LCD12864模块不同,它仅使用几根数据线,就可以完成数据的通信。所以,我决定采用LCD12864模块即KXM12864作为本设计的显示设备。3主要模块简介3.1 ATMEGA8简介Atmega

16、8 的数据吞吐率高达 1MIPS/MHz,可以减缓系统在功耗和处理速度之间的矛盾。芯片图:图3.1 ATMEGA8芯片图由上图可知,该芯片有PORTB、PORTC和PORTD三个I/O口。其中,PD0、PD1为串行口复用脚,PD2、PD3为外部中断输入复用引脚,PD4、PD5为定时器输入复用引脚。PC0PC5为模数转换输入复用引脚,PC6为复位复用引脚。PB6、PB7为外部时钟信号输入复用引脚。AVCC为端口A与A/D转换器的电源,不用ADC时,应将其接VCC。AREF为模拟基准输入复用引脚,不使用,则悬空。表一 ATmega8的端口引脚配置DDRXnPORTXnPUD(SFIOR中)I/O上

17、拉电阻说明00X输入关闭高阻态010输入打开被外部电路拉低时输出电流011输入关闭高阻态10X输出关闭输出低电平(漏电流)11X输出关闭输出高电平(源电流)DDRX为端口方向寄存器,当DDRX的某一位置1时,相应端口的引脚作为输出使用。PORTX为端口数据寄存器,当引脚作为输出使用时,PORTX的数据由相应引脚输出。3.2 LCD12864模块简介 KXM12864主要技术参数和性能本设计采用带中文字库的图形点阵液晶显示器模块,即使用KXM12864作为显示设备。该显示器模块是一种图形点阵式液晶显示器,能显示4行8列(16*16点阵)共32个汉字,也可以显示字符、图形等。它主要由行驱动器和列驱

18、动器组成,分辨率为128*64,指的是横向有128个点,纵向有64个点。它含有国标一级、二级简体中文字库。内部有8192个汉字,所以,常用的汉字在该字库中均能找到。它还含有16*8个ASCII码字符。其电源电压宽为+3.0+6.5V,即工作电压在此范围之间。工作温度为-20 +70,当超过其工作温度,液晶模块则会反应很慢,或者显示错误。 KXM12864外形尺寸图了解KXM12864的外形尺寸,可以在做产品时更好地规划设计产品的布局。 KXM12864液晶显示指令系统根据该指令表,可以对该LCD显示模块进行初始化操作。其中,当RS=0,RW=1,功能设定控制字为30H,如果设置D、C、B均为1

19、,则显示状态开关控制字为0FH,清除屏幕控制字为01H,模式设置控制字为06H。当MCU向该模块写资料时,应当使RS=1,RW=0。这样,就可以向该模块写入指令和数据。之后,即可显示汉字。 12864液晶显示动态指标及术语表二 并行接口模块说明: 管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“HL”, DB7DB0的数据被写到IR或DR6E

20、(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线9DB2H/L三态数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式(见注释)16NC-空脚17RESETH/L复位端18NC-LCD驱动电压输出端19BLAVDD背光源正端(+5V)20BLKKVSS背光源负端*注释:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。图(a) 8位并行连接时序图图 (b) RS、RW功能设定示意图4

21、硬件设计4.1设计流程图及设计思路晶振变压器ATMEGA8SWITCHMPMAX232PC机整流器7805JUMPJUMPLCD12864图4.1硬件电路框图本设计的设计流程如上图所示,首先要设计出一个+5V的直流稳压电源为该电路提供+5V电压。之后,通过一个RS232电平转换电路来实现PC机电平到单片机电平的转换。最后,通过对ATMEGA8编写程序来控制LCD12864模块显示汉字。其中,该单片机的时钟信号是通过内部振荡方式获得。4.2各模块电路设计电源电路图(a) 直流稳压电路原理图(b) 直流稳压电源电路图本设计首先需要设计一个+5V的直流稳压电源。如上图所示,220V电源经过变压器降压

22、后,又经过整流器整流,再经三端口稳压器7805稳压,产生+5V电压,给整个电路提供5v的直流电压。其中通过对焊接好的硬件用万用表进行测试,测得从变压器端经变压后的交流电压为+9.36V,再经整流桥电路整流得到方向不变、大小随时间变化的脉动电压,再经滤波电容C1滤去其交流分量,得到比较平滑的直流电压。其中,C1的值取得大一些,有利于减小输出端的波纹电压。之后,经三端口稳压器7805稳压后得到更加稳定的直流电压。最后,使用C2来防止发生意外跳变时,电压输出产生大的跳变,以此提高电源抗瞬间脉冲冲击干扰的能力。 LCD12864模块控制电路图4.2.2 LCD控制模块电路图如上图所示,采用ATMEGA

23、8对LCD12864模块进行控制,其中,LCD12864模块使用的是KXM12864,根据该型号液晶显示器的特点,设计如下。该液晶显示器共有20个引脚,由中的表二知,LCD12864第1引脚VSS应接电源地;第2引脚接电源正VCC;第3引脚为对比度调整,在此可不接;第4、5、6引脚为控制信号直接接单片机的I/O口;从第7引脚到第14引脚为LCD的三态数据线,直接接单片机的I/O口;第15引脚为模式控制引脚,因为并行端口传送数据较为快捷且简单易控,所以本设计是基于8位并行端口设计,因此,直接接VCC高电平;第16引脚,悬空;第17引脚为复位端,接高电平VCC;第18引脚,不接;第19、20引脚分

24、别为背光源正和背光源负,因此,分别接电源正VCC和电源地。 RS232电平转换电路图 (a)RS232电平转换电路MAX232芯片可将PC机的RS-232标准串口设计的单电源电平转换为+5v单电源电平。RS232电平为-10+10V,单片机电平为TTL电平为05V。要实现上位机与下位机之间的串行通信,必须通过MAX232进行电平转换,因为PC机串口采用的是RS232电平,而单片机采用的却是TTL电平,如果不进行电平转换,单片机跟PC机的串口就不能进行直接通信。如上图所示,从RS232端口输出的信号经过MAX232芯片进行转换,最后从T_I1和R_O1输出信号进过ADC3和ADC4模数转换成+5

25、V的TTL电平到达ATMEGA8芯片。MAX232的芯片图及管脚图如下所示:图 (b)MAX232芯片图及管脚图 时钟电路图 时钟电路图该单片机时钟信号是通过内部振荡方式获得,在引脚XTAL1和XTAL2上外接一个8MHz的晶振,即可构成内部振荡方式。当外接一个8MHz的晶振后,就可以构成自激振荡器并产生振荡时钟脉冲。其中,电容C_JT1和电容C_JT2起着稳定振荡频率、快速起振的作用。4.3硬件焊接与调试本设计中的重点是AVR单片机实验板的制作。其中,ATMEGA8的焊接是十分重要的。因为该芯片是贴片式芯片,而且引脚数目较多,且引脚间距很小,所以不很容易焊接。对于ATMEGA8的焊接,必须使

26、用尖头烙铁,且焊接温度设定在270°C左右。焊接完成后,必须要检测各引脚是否焊接正确、有无虚焊等。具体方法是,先使用放大镜检查引脚焊接有无虚焊、连焊,再用万用表的电阻档检查相邻引脚是否短路。检测方法为将量程开关拨至电阻档上,再将万用表的两个表笔分别放在两引脚上,如果短路,则会发出蜂鸣的响声,否则,为不短路。最后,进行通电检查,使用PROGISP软件对芯片进行查空,如果结果为查空成功,则表明芯片焊接正常。最后,就是LCD12864模块的焊接。该模块一共有20个引脚,分别按照电路图的连接逐个进行焊接。设计中,我在焊接ATMEGA8芯片时,将芯片的两个引脚短路,但经检查后将多余的锡去除,最

27、后芯片焊接正常。按照上面的电路图,再逐一进行焊接,之后,硬件焊接完成。最后一步是进行硬件调试,我在调试中又发现了虚焊与短路的问题,一是ATMEGA8相邻两个管脚连在了一起,后经烙铁拨离后正常;二是LCD的两个引脚虚焊,致使LCD插电后不亮。最后找到对应的引脚,重新焊接后正常。我认为,在焊接过程中最容易出现虚焊和短路的现象,所以在焊接时需要认真、细心。同时,也要有技巧性的焊接。比如,对焊锡的使用,使用焊锡的多少要适当,太多容易短路,太少容易虚焊。为防止短路,还可以用烙铁在焊接处涂抹适量的松香,以达到绝缘的目的。但是,建议在检测没有短路之后再涂抹松香,否则,如果出现问题,则不容易修改。4.4方案扩

28、展方案扩展系统框图:图4.4 方案扩展系统框图此扩展方案是在原来的设计的基础上加入按键模块。通过把按键直接与单片机I/O口连接,可以使单片机根据检测按下的不同的按键来显示不同的效果。具体做法是,编写按键扫描程序,判断哪个键按下,同时,要编写按键消抖程序,以防错判。之后,编写程序根据按下的键来执行相应的特殊的显示效果,如滚动、闪烁等显示效果。5软件设计 5.1 LCD12864模块初始化流程POWER ON 上电延时>37msRESET LOWHIGHFUNCTION SET 功能设定 控制字 30HRSR/WDB7DB6DB5DB4DB3DB2DB1DB0000011X0XX延时>

29、100usFUNCTION SET 功能设定 控制字 30HRSR/WDB7DB6DB5DB4DB3DB2DB1DB0000011X0XX延时>37usDISPLAY ON/OFF CONTROL 显示开/关 控制字0FHRSR/WDB7DB6DB5DB4DB3DB2DB1DB00000001DCB延时>100usDISPLAY CLEAR 清除屏幕 控制字:01HRSR/WDB7DB6DB5DB4DB3DB2DB1DB00000000001延时>10msENTRY MODEL SET 进入模式设置 控制字:06HRSR/WDB7DB6DB5DB4DB3DB2DB1DB000

30、000001I/DSINITIALIZATION END 初始化结束图5.1 LCD12864初始化流程图5.2部分程序代码软件延时延时程序是本设计中很重要的一部分,因为延时时间的长短不仅能决定该LCD模块能否成功初始化,还决定了人眼能不能看到稳定的显示。在本设计中有两个延时程序,以满足不同延时时间的需要。而且,第二个延时程序的延时时间比第一个延时程序延时时间长。void delay1(unsigned int t)unsigned int j;for( ;t>0;t-)for (j=19;j>0;j-);void delay2(unsigned int t)unsigned in

31、t j;for( ;t>0;t-)for (j=6425;j>0;j-); 端口输出函数 由于本设计中从ATMEGA8单片机中的I/O口输出数据时没有使用某个整体的I/O口,只是使用了其中某个I/O口的一部分。所以传送地址数据时,不能整体传送,只能逐位传送。而本设计中,又需多次使用数据传送。所以为了简便起见,则写了一个从I/O口输出8位数据的write函数,以供传送数据使用。void write(unsigned char z) if (z&0x01)=0x01)PORTC|=0x08;/0000,1000 PC3=1else PORTC&=0xf7;/1111,0

32、111 PC3=0if (z&0x02)=0x02)PORTC|=0x10;/0001,0000 PC4=1else PORTC&=0xef;/1110,1111 PC4=0if (z&0x04)=0x04)PORTC|=0x20;/0010,0000 PC5=1else PORTC&=0xdf;/1101,1111 PC5=0if (z&0x08)=0x08)PORTB|=0x01;/0000,0001 PB0=1else PORTB&=0xfe;/1111,1110 PB0=0if (z&0x10)=0x10)PORTB|=0x02;

33、/0000,0010 PB1=1else PORTB&=0xfd;/1111,1101 PB1=0if (z&0x20)=0x20)PORTB|=0x04;/0000,0100 PB2=1else PORTB&=0xfb;/1111,1011 PB2=0if (z&0x40)=0x40)PORTB|=0x08;/0000,1000 PB3=1else PORTB&=0xf7;/1011,1111 PB3=0if (z&0x80)=0x80)PORTB|=0x10;/0001,0000 PB4=1else PORTB&=0xef;/1110

34、,1111 PB4=0 写数据函数由中的8位并行时序图及RS、RW功能设定示意图知,RS为高电平时,表示写数据。当RW为低电平时,表示MPU写资料到模块。当E为低电平时,延时一会儿,向I/O口准备数据,到E为高电平时,没有变化。再当E为高电平后,延时一会儿,令E为低电平,则数据写入完全。最后使RW为高电平,RS为低电平,指令书写完成。void write_12864dat(unsigned char a)PORTC|=0x01;/0000,0001 rs=1 PC0=1 写数据PORTC&=0xfd;/1111,1101 rw=0 PC1=0PORTC&=0xfb;/1111,

35、1011 e=0 PC2=0delay1(1);write(a);PORTC|=0x04;/0000,0100 e=1 PC2=1delay1(10);PORTC&=0xfb;/1111,1011 e=0 PC2=0delay1(2);PORTC|=0x02;/0000,0010 rw=1 PC1=1PORTC&=0xfe;/1111,1110 rs=0 PC0=0 写指令函数由中的8位并行时序图及RS、RW功能设定示意图知,RS为低电平时,表示写指令。当RW为低电平时,表示MPU写资料到模块。当E为低电平时,延时一会儿,向I/O口准备数据,到E为高电平时,没有变化。再当E为高

36、电平后,延时一会儿,令E为低电平,则数据写入完全。最后使RW为高电平,RS为低电平,指令书写完成。void write_12864com(unsigned char b)PORTC&=0xfe;/1111,1110 rs=0 PC0=0 写指令PORTC&=0xfd;/1111,1101 rw=0 PC1=0PORTC&=0xfb;/1111,1011 e=0 PC2=0delay1(1);write(b);PORTC|=0x04;/0000,0100 e=1 PC2=1delay1(10);PORTC&=0xfb;/1111,1011 e=0 PC2=0del

37、ay1(2);PORTC|=0x02;/0000,0010 rw=1 PC1=0PORTC&=0xfe;/1111,1110 rs=0 PC0=0 初始化函数要使LCD12864模块显示汉字,必须对该模块进行初始化。由图5.1初始化流程图可知,先打开电源,等待大于40ms,再进行复位操作。本设计是直接将复位端接高电平。之后写入控制字,进行功能设定。接着延时等待,再进行显示开关控制字设定,其中D=1、整体显示ON,C=1、游标ON,B=1、游标位置ON。之后,进行清屏设置。最后,进行模式选择设置,初始化过程结束。void initinal(void)delay2(20);write_12

38、864com(0x30);/写控制字30Hdelay1(4);write_12864com(0x30);/写控制字30Hdelay1(4);write_12864com(0x0f);/ DCB均为一delay1(4);write_12864com(0x01);/清屏设置01Hdelay2(20);write_12864com(0x06);/模式设置06Hdelay1(10); 显示函数RAM在液晶中的地址为80H9FH,地址指针自动加一,将汉字地址送入写指令和写数据函数,即可显示汉字。本显示函数功能是显示一首古诗锄禾。void display(void)write_12864com(0x80)

39、;/ RAM区首地址,第一行首地址write_12864dat(0xb0);/ “ ”write_12864dat(0xa0);delay2(20);write_12864dat(0xb3);/ “锄”write_12864dat(0xfa);delay2(20);write_12864dat(0xba);/ “禾”write_12864dat(0xcc);delay2(20);write_12864dat(0xc8);/ “日”write_12864dat(0xd5);delay2(20);write_12864dat(0xb5);/ “当”write_12864dat(0xb1);dela

40、y2(20);write_12864dat(0xce);/ “午”write_12864dat(0xe7);delay2(20);write_12864dat(0x2c);/ “,”delay2(40);write_12864com(0x90);/第二行首地址write_12864dat(0xb0);/ “ ”write_12864dat(0xa0);delay2(20);write_12864dat(0xba);/ “汗”write_12864dat(0xba);delay2(20);write_12864dat(0xb5);/ “滴”write_12864dat(0xce);delay2(

41、20);write_12864dat(0xba);/ “禾”write_12864dat(0xcc);delay2(30);write_12864dat(0xcf);/ “下”write_12864dat(0xc2);delay2(20);write_12864dat(0xcd);/ “土”write_12864dat(0xc1);delay2(20);write_12864dat(0x2e);/ “。”delay2(40);write_12864com(0x88);/第三行首地址write_12864dat(0xb0);/ “ ”write_12864dat(0xa0);delay2(20)

42、;write_12864dat(0xcb);/ “谁”write_12864dat(0xad);delay2(20);write_12864dat(0xd6);/ “知”write_12864dat(0xaa);delay2(20);write_12864dat(0xc5);/ “盘”write_12864dat(0xcc);delay2(20);write_12864dat(0xd6);/ “中”write_12864dat(0xd0);delay2(20);write_12864dat(0xb2);/ “餐”write_12864dat(0xcd);delay2(20);write_128

43、64dat(0x2c);/ “,”delay2(40);write_12864com(0x98);/第四行首地址write_12864dat(0xb0);/ “ ”write_12864dat(0xa0);delay2(20);write_12864dat(0xc1);/ “粒”write_12864dat(0xa3);delay2(20);write_12864dat(0xc1);/ “粒”write_12864dat(0xa3);delay2(20);write_12864dat(0xbd);/ “皆”write_12864dat(0xd4);delay2(20);write_12864d

44、at(0xd0);/ “辛”write_12864dat(0xc1);delay2(20);write_12864dat(0xbf);/ “苦”write_12864dat(0xe0);delay2(20);write_12864dat(0x2e);/ “。”delay2(40);5.3程序调试中的注意问题1、数据类型要正确,头文件要包含iom8v.h和macros.h。2、延时函数的使用。在初始化及显示函数中,延时时间要适当长些,以正常稳定地显示汉字。所以,在编写程序时,我编写了两个延时函数,以供不同延时时间的需要。同时,在进行LCD显示时,我发现每个汉字显示时,同样要较长时间的延时间隔,以

45、达到观察清晰的效果。3、PORTB和PORTC均为输出,所以应将DDRX相应位设为1,即打开PORTB和PORTC端口。4、逻辑运算符号不能出错,&表示按位与的运算,&&表示和运算。我在编写程序时,将write函数中的&写成了&&,导致程序编译时正确,但将程序写入芯片时,LCD却不能显示汉字。5、值得提出的是,当硬件焊接完成,程序编写完成后,将程序下载到单片机上时,LCD并没有出现预期的结果,即并没有显示汉字。这时,当初步检查了程序和硬件焊接均无误后,继续下载程序,但仍然不显示汉字。所以,就用了一个测试函数来测试该单片机是否焊接正确。该函数为:V

46、oid test (void)DDRB=0XFF;DDRC=0XFF;PORTC|=0x08;/0000,1000 PC3=1/PORTC&=0xf7;/1111,0111 PC3=0PORTC|=0x10;/0001,0000 PC4=1/PORTC&=0xef;/1110,1111 PC4=0PORTC|=0x20;/0010,0000 PC5=1/PORTC&=0xdf;/1101,1111 PC5=0PORTB|=0x01;/0000,0001 PB0=1/PORTB&=0xfe;/1111,1110 PB0=0PORTB|=0x02;/0000,001

47、0 PB1=1/PORTB&=0xfd;/1111,1101 PB1=0PORTB|=0x04;/0000,0100 PB2=1/PORTB&=0xfb;/1111,1011 PB2=0PORTB|=0x08;/0000,1000 PB3=1/PORTB&=0xf7;/1011,1111 PB3=0PORTB|=0x10;/0001,0000 PB4=1/PORTB&=0xef;/1110,1111 PB4=0执行该函数后,用万用表分别测试ATMEGA8的PC3、PC4、PC5、PB0、PB1、PB2、PB3、PB4是否均为高电平;之后再修改上述函数将相应端口的

48、位置为0,再用万用表分别测试ATMEGA8的PC3、PC4、PC5、PB0、PB1、PB2、PB3、PB4是否均为低电平。通过测试,发现将ATMEGA8的第23引脚和第24引脚相连了,经过拨离后,执行该函数,并进行硬件检测,得出结果ATMEGA8焊接最终正常。再次进行下载程序,但LCD仍然没有显示汉字。之后,又进行了对RS,RW,E引脚的检测。检测函数为:Void test2(void)DDRB=0XFF;DDRC=0XFF;PORTC|=0x01;/0000,0001 rs=1 PC0=1PORTC&=0xfd;/1111,1101 rw=0 PC1=0PORTC&=0xfb

49、;/1111,1011 e=0 PC2=0PORTC&=0xfe;/1111,1110 rs=0 PC0=0PORTC|=0x02;/0000,0010 rw=1 PC1=0PORTC|=0x04;/0000,0100 e=1 PC2=1检测方法同上,检测结果为焊接正确。鉴于以上检测,则对initial函数进行检测。由于initial函数中先执行延时函数,之后执行了write_12864com函数,则进入write_12864com函数检测,而该函数在执行了RS=0,RW=0和E=0后,又执行了延时函数,上面已检测过RS、RW、E均无焊接错误,且延时函数无误,接着,执行write函数。

50、于是进行write函数检测,检测函数为:Void test3(void)DDRB=0XFF;DDRC=0XFF;Write_12864com(0x30);void write_12864com(unsigned char b)PORTC&=0xfe;/1111,1110 rs=0 PC0=0 PORTC&=0xfd;/1111,1101 rw=0 PC1=0PORTC&=0xfb;/1111,1011 e=0 PC2=0delay1(1);/*PORTC|=0x04;/0000,0100 e=1 PC2=1delay1(10);PORTC&=0xfb;/1111

51、,1011 e=0 PC2=0delay1(2);PORTC|=0x02;/0000,0010 rw=1 PC1=0PORTC&=0xfe;/1111,1110 rs=0 PC0=0*/如果上述函数正确执行,则使用万用表测得的结果应为:PC0=0、PC1=0、PC2=0、PC3=0、PC4=0、PC5=0、PB0=0、PB1=1、PB2=1、PB3=0、PB4=0。然而,发现测得的结果与预期结果不同,所以发现了问题。经仔细检查程序,发现将write函数中的&写成了&&,导致程序编译时正确,但将程序写入芯片时,LCD却不能显示汉字。经过改正后,重新向ATMEGA8

52、中下载程序,结果LCD显示出汉字,程序调试成功。6实物与实测效果展示 6.1实物展示图6.1(a) 硬件实物图图6.1(b) AVR开发板实物图6.2实测效果展示 图6.2 显示汉字结论本设计主要是设计一个微处理器控制的点阵式液晶显示器的控制电路。所以,经过认真分析和结合以前所学知识,我采用ATMEGA8作为MPU来控制KXM12864模块显示汉字。在本次设计中,经过多次调试与检错,最终实现了显示汉字的功能。本设计要实现的功能并不复杂。简而言之,就是使用一个单片机来控制LCD液晶模块显示汉字。然而,我认为本设计较为复杂之处就是硬件电路的焊接。其中最重要的就是ATMEGA8芯片的焊接,由于该芯片

53、是贴片式的,以前接触较少,所以焊接时发生了短路及虚焊等错误。其次就是LCD模块的20个引脚的焊接,由于这些引脚相邻间隔小,导致焊接出现短路情况。然而,经过改正,焊接正常。之后,就是AVR开发板的其它电路元件的焊接,由于之前做过焊接的实验,所以,这部分焊接较熟练。最后,就是软件设计,该部分采用C语言设计,由于实现功能较为简单,因此,设计时也较易完成。客观地说,本设计较为容易,虽然实现了最基本的显示汉字的功能,但并没有更多的展示出单片机对LCD模块控制的效果。这样,本设计给人的感觉较为单一,不能丰富多彩的展示单片机对LCD模块控制的优势。所以,为了更多地展示出单片机的强大功能,可以给单片机增加输入

54、设备如按键等,增加文字和字符的显示效果,如滚动、闪烁等。这样可以根据按键按下的键来显示相应的效果。同时,还需要编写相应的程序来实现这些效果。感言当我的硬件焊接完成,同时软件调试成功,当将程序下载到单片机上,LCD模块显示出汉字时,我觉得很有成就感。因为,终于凭借着自己的努力,我完成了本次毕业设计的实物制作部分。虽然,这个过程中出现了这样或那样的问题,但是经过认真分析和改正都顺利地解决了。毕业设计接近尾声,我感触很多。回想当初,当刚看到毕业设计题目时,我有一些迷茫,不知从何处开始做起。但是,当询问了指导老师后,我对该题目有了初步的认识。之后,就结合以前所学知识,对该设计进行认真分析。最后确定使用ATMEGA8单片机作为微控制器来控制KXM12864模块显示汉字来诠释本课题。当我真正开始硬件设计图的设计时,发现我对Protel99se 软件的使用已经生疏。所以,我又重新查看了有关该软件使用的资料。之后,发现本设计就是对各科知识的综合应用,其中主要使用了模拟电子技术和单片机原理方面的知识。当电路图设计出之后,就是对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论