毕业设计(论文)《基于单片机设计LCD显示电子时钟》.docx_第1页
毕业设计(论文)《基于单片机设计LCD显示电子时钟》.docx_第2页
毕业设计(论文)《基于单片机设计LCD显示电子时钟》.docx_第3页
毕业设计(论文)《基于单片机设计LCD显示电子时钟》.docx_第4页
毕业设计(论文)《基于单片机设计LCD显示电子时钟》.docx_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计(论文)-基于单片机设计LCD显示电子时钟题目 基于单片机设计LCD显示电子时钟 指 导 教 师 评 阅 意 见 成绩评定: 指导教师: 年 月 日 评 阅 教 师 意 见 指导教师: 年 月 日 答 辩 小 组 意 见 指导教师: 年 月 日 毕业设计(论文)任务书 本任务书下达给:姓名:王伟华 年级 2008级 系 计算机科学与技术 专业 应用电子 设计题目: 1(毕业设计(论文)任务及要求(包括设计或论文的主要内容、主要技术指标,并根据题目性质对学生提出具体要求) 设计命题:基于单片机设计LCD显示电子时钟,该LCD液晶可以显示电子时钟的年、月、日、星期、时、分、秒,调节功能键可以调节时间,并且显示时间按秒实时更新,每次按键伴随“滴”的响声。 要求:使用STC89C52单片机完成设计,以及EEPROM,并利用中断子程序的定时器精确地对单片机控制,然后在1602液晶上显示。 2(重点研究的问题及原始资料及依据(包括设计或论文的工作基础、研究条件、应用环境等) 设计适用于各种办公场合、家庭生活以及各种需要显示时间的地方。 重点研究问题包括:(1)、对单片机外围电路的熟悉。 (2)、时间可调节,并且时间精准无误 (3)、要求尽可能考虑周到,比如:1602液晶的显示,温度范围,受湿受潮;断电后时间是否保持等等。 3(主要参考资料、文献,其他要说明的问题 参考文献(References): 1 张毅刚(新编MCS51单片机应用设计(哈尔滨工业大学出版社(2003 2 谭浩强(C程序设计 (清华大学出版社(1991 3 郭天祥(新概念51单片机C语言教程 (电子工业出版社(2009.1 4 杨欣等(电子设计从零开始M (清华大学出版社(2005-10 5 邱关源(电路M (高等教育出版社(2003-2 下达任务日期: 年 月 日 要求完成日期: 年 月 日 答辩日期: 年 月 日 指导教师: 西安高新科技职业学院毕业论文(设计)指导及答辩记录 论文(设计)基于单片机设计LCD显示电子时钟 题目 学生姓名 王伟华 专业班级 应用电子 指导教师 赵鹏 毕业论文指导记录 程序的控制调试2011.4.16 外围电路设计的指导 2011.4.21 液晶模块的调试 2011.4.29 全部硬件以及软件的最后调试工作 2011.5.4 毕业论文答辩记录(注明答辩过程摘要、结果及日期) 中文摘要 本设计使用11.0592MHZ晶振与单片机AT89C52相连接,以AT89C52芯片为核心,采用1602的并行操作方式显示,通过使用该单片机,实现把时间显示在1602液晶上,并且按秒实时更新。可以通过板子上的按键随时调节时钟的年、月、日、星期、时、分、秒,按键设计3个有效按键,分别有功能选择键、数数值增大键、数值减小键。在每次的按键按下时,蜂鸣器有“滴”的提示声。再利用AT24C02设计实现断电自动保护显示数字的功能,当下次上电时会接着上次上电前的时间继续运行。通过软硬件结合达到最终目的。 关键词: 电子钟 单片机 1602液晶 C语言 目 录 第一章 引言. 17 第二章 方案设计. 错误未定义书签。3 第三章 硬件设计. 错误未定义书签。4 (一) 89C52单片机的内部结构 . 错误未定义书签。4 (二) 89C52单片机的引脚功能 . 5 (三) 89C52单片机的模块设计 . 9 1.单片机与P0口排阻.9 2. USB供电电路部分.10 3. 复位电路.10 4. 显示模块设计.11 5.晶振电路部分.16 6. 蜂鸣器电路.17 7. 矩正键盘电路.17 第四章 系统软件设计. 19 (一) 软件程序流程 . 19 (二) 程序设计步骤 . 19 (三) 程序设计的主要模块 . 20 第五章 设计总结. 29 参考文献 . 30 致谢 . 31 第一章 引言 单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。 早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。 单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可.用它来做一些控制1 电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影.它主要是作为控制部分的核心部件。 它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。 图1.1 单片机芯片 单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性 图1.1为单片机实物图,下图分别为89C51和89C2052的封装图。 RSTVP3.0/RXD120CCP1.0140VCC P3.1/TXDP1.7P0.0219P1.1239 XTAL2P1.6P0.1318P1.2338XTAL1P1.5P0.2417P1.3437 P3.2/INT0P1.4P0.3516P1.4536 P3.3/INT1P1.3P0.4615P1.5635P3.4/T0P1.2P0.5714P1.6734 P3.5/T1P1.1/AIN1P0.6PD813P1.7833 GNDP3.0/RXDPPP1.0/AIN0P0.7912RST/V932ALE/PROGP3.1/TXDP3.7EA/V10111031 PSENP3.2/INT01130P2.780C51/89C51P3.3/INT11229P2.6P3.4/T01328注:类似的还有Philips公司的P2.5P3.5/T1 1427 87LPC64,20引脚P2.4P3.6/WR1526 8XC748/750/(751),24引脚P2.3P3.7/RD1625 8X749(752),28引脚P2.2XTAL21724 8XC754,28引脚SSP2.1 XTAL11823 等等P2.0V192220212 89C2051第二章 方案设计 实现电子时钟的方案较多,目前广泛采用的是基于数码管LED和液晶LCD显示,本设计将介绍基于单片机学习板以为外接液晶模块实现的方案。 方案一:数码管LED动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。 方案二:液晶LCD显示。所谓液晶LCD的显示,就是以电流刺激液晶分子产生点,显示字符的行数和液晶的点阵行。液晶体积小、功耗低、显示简单。 从节省功耗,体积,I/O口的节省,本设计采用方案二。 单片机系统方案此方案采用蜂鸣器电路+USB供电电路+晶振电路+复位电路+AT89C52+1602液晶电路 3 第三章 硬件设计 (一)80C52单片机的内部结构 图3-1为80C52单片机功能结构框图 80C52 芯片内部集成了 CPU、RAM、ROM、定时/计数器和I/O口等各功能部件,并由内部总线把这些连接在一起。 80C52单片机内部包含以下一些功能部件: (1) 一个8位CPU; (2) 一个片内振荡器和时钟电路; (3) 4KB ROM; (4) 128B内RAM; (5) 可寻址64KB的外ROM和外RAM控制电路; (6) 三个16位定时/计数器; (7) 21个特许功能寄存器; (8) 4个8位并行I/O口,共32条可编程I/O端线; (9) 一个可编程全双工串行口; (10) 5个中断源,可设置成2个优先级。 外时钟源 外部事件计 振荡器及 3个16位定时数据存储器程序存储时序 器/计数器 256B 4KB 器OSC ROM 8052CPU 64K总线扩可编程I/O 可编程全双工展控制器 串行口 中断 控制 并 行 口 串行通信 图3-1 80C52单片机功能结构框图 4 (二) 80C52单片机的引脚功能 89C52单片机一般采用双列直插DIP封装,共40个引脚,图3-2分别为引脚排列图和逻辑符号图。40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。 图3-2 80C52引脚图 1.电源 (1)Vcc芯片电源,接+,; (2)Vss接地端。 2.时钟 XTAL1、XTAL2晶体振荡电路反相输入端和输出端。使用内部振荡电路时外接石英晶体。 3.控制线 控制线共有4根,其中3根是复用线。所谓复用线是指具有两种功能,正常使用时是一种功能,在某种条件下是另一种功能。 (1)ALE/PROG地址锁存允许/片内EPROM编程脉冲。 ?ALE功能:用来锁存P0口送出的低8位地址。 80C52在并行扩展外存储器(包括并行扩展I/O口)时,P0口用于分时传送低85 位地址和数据信号,且均为二进制数。那么如何区分是低8位地址还是8位数据信号呢,当ALE信号有效时,P0口传送的是低8位地址信号;ALE信号无效时,P0口传送的是8位数据信号。在ALE信号的下降沿,锁定P0口传送的内容,即低8位地址信号。 需要指出的是,当CPU不执行访问外RAM指令(MOVX)时,ALE以时钟振荡频率1 / 6的固定频率输出,因此ALE信号也可作为外部芯片CLK时钟或其他需要。但是,当CPU执行MOVX指令时,ALE将跳过一个ALE脉冲。 ALE端可驱动8个LSTTL门电路。 ?PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 (2)PSEN外ROM读选通信号。 80C51读外ROM时,没个机器周期内PSEN两次有效输出。PSEN可作为外ROM芯片输出允许OE的选通信号。在读内ROM或读外RAM时,PSEN无效。 PSEN可驱动8个LSTTL门电路。 (3) RST/Vpd复位/备用电源。 ?正常工作时,RST(Reset)端为复位信号输入端,只要在该引脚上连续保持两个机器周期以上高电平,80C52芯片即实现复位操作,复位后一切从头开始,CPU从0000H开始执行指令。 ?Vpd功能:在Vcc掉电情况下,该引脚可接上备用电源,由Vpd向片内供电,以保持片内RAM中的数据不丢失。 (4) EA/Vpp 内外ROM选择/片内EPROM编程电源。 ?EA功能:正常工作时,EA为内外ROM选择端。80C52单片机ROM寻址范围为64KB,其中4KB在片内,60KB在片外(80C31芯片无内ROM,全部在片外)。当EA保持高电平时,先访问内ROM,但当PC(程序计数器)值超过4KB(0FFFH)时,将自动转向执行外ROM中的程序。当EA保持低电平时,则只访问外ROM,不管芯片内有否内ROM。对80C31芯片,片内无ROM,因此EA必须接地。 ?Vpp功能:片内有EPROM的芯片,在EPROM编程期间,此引脚用于施加编程电源Vpp。 对4个控制引脚,应熟记起第一功能,了解其第二功能。 严格来讲,80C52的控制线还应该包括P3口的第二功能。 4. I/O引脚 80C52共有4个8位并行I/O端口,共32个引脚 (1)P0口8位双向I/O口。 在不并行扩展外存储器(包括并行扩展I/O口)时, P0口可用作双向I/O口。 在并行扩展外存储器(包括并行扩展I/O口)时, P0口可用于分时传送低8位地址(地址总线)和8位数据信号(数据总线)。位结构如图3-3所示。P0口能驱动8个6 LSTTL门。 地址/数据 VCC 控制 & V1 读锁存器 1 P0.X 引脚 Q 内部总线 D P0.X V2 锁存器 MUX 写锁存器 CP Q 读引脚 图3-3 P0口位结构 (2) P1口8位准双向I/O口(“准双向”是指该口内部有固定的上拉电阻)。位结构如图3-4所示。 P1口能驱动为4个LSTTL门。 VCC 读锁存器 内部上拉电阻 P1.X 引脚 D Q 内部总线 P1.X 锁存器 写锁存器 CP Q 读引脚 图 3-4 P1口位结构 (3) P2口8位准双向I/O口。在不并行扩展外存储器(包括并行扩展I/O口)时, P2口可用作双向I/O口。在并行扩展外存储器(包括并行扩展I/O口)时, P2口可用于传送高8位地址(属地址总线) 。P2口能驱动4个LSTTL门。P2口的位结构如图3-5所示,引脚上拉电阻同P1口。在结构上,P2口比P1口多一个输出控制部分。VCC 读锁存器 地址 控制 内部上拉电阻 P2.X 引脚 MUX D Q 内部总线 P2.X 锁存器 1 写锁存器 Q CP 读引脚 7 图 3-5 P2口位结构 (4) P3口8位准双向I/O口。 可作一般I/O口用,同时P3口每一引脚还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。P3口驱动能力为4个LSTTL门。 VCC第二输出功能读锁存器内部上拉电阻P3.X引脚D内部总线Q&P3.X锁存器写锁存器CPQ读引脚第二输入功能 图 3-6 P3口位结构 P3口第二功能如下: P3.0RXD:串行口输入端; P3.1TXD:串行口输出端; P3.2INT0:外部中断0请求输入端; P3.3INT1:外部中断1请求输入端 P3.4T0:定时/计数器0外部信号输入端; P3.5T1:定时/计数器1外部信号输入端; P3.6WR:外RAM写选通信号输出端; P3.7RD:外RAM读选通信号输出端。 上述4个I/O口,各有各的用途。 在不并行扩展外存储器(包括并行扩展I/O口)时, 4个I/O口都可作为双向I/O口用。在并行扩展外存储器(包括并行扩展I/O口)时, P0口专用于分时传送低8位地址信号和8位数据信号,P2口专用于传送高8位地址信号。P3口根据需要常用于第二功能,真正可提供给用户使用的I/O口是P1口和一部分未用作第二功能的P3口端线。 8 (三)模块设计 1.单片机与P0口排阻 如图3.3.1所示,本设计主要的硬件80C52以及上拉电阻连接线路图。 9 2.USB供电电路部分 图3.3.2 如图3.3.2所示,从外部引入5V的直流电,按下S1可以为单片机、复位电路提供电源。 3. 复位电路 图3.3.3 如图3.3.3所示,复位电路主要由型号为10UF/16V的电解电容,10K,1K的电阻以及按键S22构成,RST接芯片的相应引脚RST,构成上电复位和手动复位。上电复位是经过电容和10K的电阻上电以后就进行复位。手动复位是当开关S22按下时给引脚RST为高电平1,断开时引脚为低电平0。 4. 显示模块设计 图3.3.4 10 (1) LCD显示模块 LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。 系统中采用LCD1602作为显示器件输出信息,如图3.2.4所示。与传统的LED数码管显示器件相比,液晶示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。 (2) LCD1602的引脚功能 LCD1602模块的引脚如图3.2.4.2所示,其引脚功能如下: RS:数据和指令选择控制端,RS=0命令状态;RS=1数据 R/W:读写控制线,R/W=0写操作;R/W=1读操作 A:背光控制正电源 K:背光控制地 E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机间将进行一次数据交换 DB0,DB7:数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源。 VDD:电源端 VEE:亮度控制端(1-5V) VSS:接地端 LCD 模 块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VSS VDD VO RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A K 图3.2.4.2 LCD1602模块 (3) LCD1602的显示操作 1(四种基本操作 11 LCD有四种基本操作,具体如表3.2.4.3所示。 表3.2.4.3 LCD与单片机之间有四种基本操作 RS R/W 操作 0 0 写命令操作(初始化,光标定位等) 0 1 读状态操作(读忙标志位) 1 0 写数据操作(要显示内容) 1 1 读数据操作(可以把显示存储区中的数据反读出来) (1)读状态字 执行读状态字操作,如表3-1满足RS=0,R/W=1。根据管脚功能,当为有效电平时,状态命令字可从LCD模块传输到数据总线。同时可以保持一段时间,从而实现读状态字的功能。读状态字流程如图3.3.4.3.1所示。 图3.3.4.3.1 读入状态字流程图 (2)命令字 表3.3.4.3.2所示为命令字,其主要介绍了指令名称、控制信号及控制代码。其指令名称是指要实现的功能;控制代号是采用的十六进制的数值表示的。 1)清零操作是指输入某命令字后即能将整个屏幕显示的内容全部清除; 2)归home位:将光标送到初始位;其中的,号为任意,高低电平均可; 3)输入方式:设光标移动方向并指定整体显示,是否移动。I/D=0:减量方式,S=1:移位方式,S=0:不移位; 12 4)显示状态:D指设置整体显示开关;C指设置光标显示开关;B指设置光标的字符闪耀; 5)光标画面滚动:R/L指右移或左移;S/C指移动总体或光标; 6)功能设置:DL接口数位,L指显示行数,F显示字型;如DL=1:8位=0,4位N=1:2行=0:1行,G=1:510=0:57(点阵) 7)CGRAM地址设制:相当于一个数据库,可以在其中选择所需要的符号; 8)DDRAM地址设制:显示定位; 9)读BF和AC:B为最高位忙的标志,F为标志位; 10)写数据:将数据按要求写入到对应的单元; 11)读数据:读相应单元内的数据; 表3.3.4.3.2 命令字 控制信号 控制代码 指令名称 RS D7 RW D6 D5 D4 D3 D2 D1 D0 清屏 0 0 0 0 0 0 0 0 0 1 归HOME位 0 0 0 0 0 0 0 0 1 * 0 输入方式设制 0 0 0 0 0 0 1 I/D S 显示状态设制 0 0 0 0 0 0 1 D C B 无标画面滚动 0 0 0 0 0 1 S/C RL * * 功能设置 0 0 0 0 1 DL N F * * CGRAM地址设制 0 0 0 1 A5 A4 A3 A2 A1 A0 DDRAM地址设制 0 0 1 A6 A5 A4 A3 A2 A1 A0 BF ACACACACACACAC读BF和AC 0 1 6 5 4 3 2 1 0 写数据 1 0 数 据 读数据 1 1 数 据 (3)写命令字 由表3.3.4.3.2可知当RS=0,R/W=0时,才可以通过单片机或用户指令把数据写到LCD模块,此时就对LCD进行调制。可采用查询方式:先读入状态字,再判断13 忙标志位,最后写命令字。图3.3.4.3.3所示为写命令字的流程图。 图3.3.4.3.3 写命令字流程图 1)定义光标位置 显示数据的某位,就是把显示数据写在相应的DDRAM地址中,DDRAM地址占7位。Set DDRAM address命令如表3.3.4.3.4所示。光标定位,写入一个显示字符后,DDRAM地址会自动加1或减1,加或减由输入方式设置。 表3.3.4.3.4 Set DDRAM address命令 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0 第1行DDRAM地址与第2行DDRAM地址并不连续,如表3.3.4.3.4所示。 表3.3.4.3.4 DDRAM地址 row 1 2 3 4 5 14 15 16 line80H 81H 82H 83H 84H 8dH 8eH 8fH 1 line0c00c10c20c30c40cd0ce0cf 2 H H H H H H H H 2)LCD初始化 14 从通电开始延时,先经过判忙后再进行功能设置,过一段时间后可以设制显示状态(如设制行、位或阵列)再经过延时清屏后才可以设置输入方式,具体实现过程如图3.2.4.3.5所示。 图3.3.4.3.5 LCD初始化流程图 2(LCD显示程序设计 LCD显示程序的设计一般先要确定LCD的初始化、光标定位、确定显示字符后,显示流程如图3.3.4.3.6显示。 图3.3.4.3.6 LCD显示程序流程图15 5. 晶振电路图3.3.5 单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XYAL2两C个管脚接一只晶振及两只电容就构成了单片机的时钟电路,电路中电容器和1C对振荡频率有微调作用,通常取(30?10)pF石英晶体选择6MHz或12MHz(本2设计取的是11.0592MHz只是为计算串口通信的波特率精准)都可以。时钟电路如图3.3.5所示。16 6. 蜂鸣器电路 图3.3.6 如图3.3.6所示,在单片机的FM管脚接蜂鸣器电路,电路中PNP三极管以及电阻R18构成放大电路,当FM引脚为低电平时,驱动蜂鸣器工作。 17 7. 矩阵键盘 图3.3.7 如图3.3.7所示,分别连接单片机的对应口,本设计中的时钟调节只用到了S9,S13,S17来调节时钟进行时钟的调节。(注:调节时,如果调节按键不起作用,就是下载的USB口拔掉方可调节,因为那是键盘接口和下载口连接电路有冲突。) 18 第四章 系统软件设计 (一)软件程序流程 根据需要,本设计使用的软件为Keil uVision4,本软件操作简单,编译也极其方便。由此可将系统软件按照功能划分为4个模块,分别是主程序模块、24C02自动保护模块、液晶显示模块、中断服务程序模块,各模块的功能关系如图4-1所示。编写系统软件时,可首先编写各模块的底层驱动程序,而后是系统联机调试,编写上层主程序。 系统主程序 . 中24液断C晶服02管务 自显动示 保 护程 图4.1 序结合电路,程序的总体思路是: 护程1、点复位键后,进行时间显示,从0时0分0秒开始。 序 2、按下功能键时,进行功能选择,此时按下时,光标闪烁,并且每次按下都伴随着“滴”的一声,同时按下功能键四次就会重新走时,下同。 3、按下增大键时进行增大调整,每次按下伴随蜂鸣器响。 4、按减小键时进行减小调整,同样,每次按下时也伴随着蜂鸣器响。 (二)程序设计步骤 在程序设计过程中,我遇到了很多困难,这部分也是让我学到很多东西的地方。 首先,我学习了定时器的相关知识,计数器的使用是很重要的组成部分,在19 这个设计中选择计数器T0。T0的工作方式有: 方式0:不推荐 方式1:16位计数器,常用 方式2:自动重装初值的8位定时/计数器 方式3:T0相当于两个独立的8位定时/计数器 此程序采用方式1,方式1的定时时间t为t=(216-M)*12/fosc。其中M为定时器初值,fosc为12MHz(本设计用的11.0592MHz),若M0 t=65536*12/2*106=65.536ms。因此可取50ms为计时单位,初值M应为M=15536=11110010110000=3CB0。即定时器初值为 50*10-3*106=216-M。TH0=(65536-50000)/256;TL0=(65536-50000)%256;定时器中断20次为一秒,这部分在中断程序中用到。 其次,我参看了文献中的设计思路,做到胸有成竹后再进行具体的程序书写工作。认真学习了教科书中关于C语言编程的问题,熟悉了C语言的编程方法和语法习惯。 第三步就是进行具体的程序编写工作。 (三)程序的主要模块 1.延迟程序 在液晶显示时,必然用到延迟程序,这里使用延迟50ms的程序,此程序需要反复调用。此段程序是很简单的,但就是在这段简单的程序上,也会出现问题。 void delay(uint xms) uint i,j; for(i=xms;i0;i-) for(j=110;j0;j-); 2. 1602液晶读写程序 void write_com(uchar com) rs=0; 20 lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; void write_date(uchar date) rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; void write_shifenmiao(uchar add,uchar date) uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); 3. 初始化程序 void init() uchar num; rd=0; dula=0; wela=0; lcden=0; shi=0; fen=0; miao=0; count=0; s1num=0; init_24c02(); write_com(0x38); write_com(0x0c); write_com(0x06); 21 write_com(0x01); write_com(0x80); for(num=0;num15;num+) write_date(tablenum); delay(5); write_com(0x80+0x40+6); write_date(:); delay(5); write_com(0x80+0x40+9); write_date(:); delay(5); shi=read_add(3); fen=read_add(2); miao=read_add(1); write_shifenmiao(4,shi); write_shifenmiao(7,fen); write_shifenmiao(10,miao); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; 4.按键扫描程序 void keyscan() if(s1=0) delay(5); if(s1=0) s1num+; while(!s1); di(); if(s1num=1) TR0=0; write_com(0x80+0x40+10); write_com(0x0f);/光标闪烁 if(s1num=2) 22 write_com(0x80+0x40+7); if(s1num=3) write_com(0x80+0x40+4); if(s1num=4) s1num=0; write_com(0x0c); TR0=1; / / if(s1num!=0) if(s2=0) delay(5); if(s2=0) while(!s2); di(); if(s1num=1) miao+; if(miao=60) miao=0; write_shifenmiao(10,miao); write_com(0x80+0x40+10); write_add(1,miao); if(s1num=2) fen+; if(fen=60) fen=0; write_shifenmiao(7,fen); write_com(0x80+0x40+7); 23 write_add(2,fen); if(s1num=3) shi+; if(shi=24) shi=0; write_shifenmiao(4,shi); write_com(0x80+0x40+4); write_add(3,shi); / / if(s1num!=0) if(s3=0) delay(5); if(s3=0) while(!s3); di(); if(s1num=1) miao-; if(miao=-1) miao=59; write_shifenmiao(10,miao); write_com(0x80+0x40+10); write_add(1,miao); if(s1num=2) fen-; if(fen=-1) fen=59; write_shifenmiao(7,fen); write_com(0x80+0x40+7); 24 write_add(2,fen); if(s1num=3) shi-; if(shi=-1) shi=23; write_shifenmiao(4,shi); write_com(0x80+0x40+4); write_add(3,shi); 5.主程序 void main() init(); while(1) keyscan(); 6.定时器中断程序 void timer0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; if(count=20) count=0; miao+; if(miao=60) miao=0; fen+; 25 if(fen=60) fen=0; shi+; if(shi=24) shi=0; write_add(3,shi) ; write_shifenmiao(4,shi); write_add(2,fen); write_shifenmiao(7,fen); write_add(1,miao) ; write_shifenmiao(10,miao); 7. 2c402.h的EEPROM的操作函数程序 #include24c02.h / / bit write=0; sbit sda=P20; sbit scl=P21; void delay0() ; void start() sda=1; delay0(); scl=1; delay0(); sda=0; delay0(); void stop() sda=0; delay0(); scl=1; delay0(); sda=1; 26 delay0(); void respons() uchar i; scl=1; delay0(); while(sda=1)&(i250)i+; scl=0; delay0(); void init_24c02() sda=1; delay0(); scl=1; delay0(); void write_byte(uchar date) uchar temp,i; temp=date; for(i=0;i8;i+) temp=temp1; scl=0; delay0(); sda=CY; delay0(); scl=1; delay0(); scl=0; delay0(); sda=1; delay0(); uchar read_byte() uchar k,i; scl=0; delay0(); sda=1; delay0(); 27 for(i=0;i8;i+) scl=1; delay0(); k=(k1)|sda; scl=0; de

温馨提示

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

评论

0/150

提交评论