毕业设计数字电子表.doc_第1页
毕业设计数字电子表.doc_第2页
毕业设计数字电子表.doc_第3页
毕业设计数字电子表.doc_第4页
毕业设计数字电子表.doc_第5页
免费预览已结束,剩余26页可下载查看

下载本文档

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

文档简介

四川大学锦江学院毕业论文(设计) 毕业论文(设计)题 目 数字电子表 系 部 电子信息工程系 专 业 电子信息工程 年级 2008级 学生姓名 学 号 指导教师 - II - 数字电子表电子信息工程专业学生: 指导教师:【摘 要】数字电子表是基于电子技术的时钟产品,具有走时精准,显示直观的特点,在生产生活中应用广泛。本文介绍的是以AT89S52单片机为控制核心,时钟芯片DS1302为时钟电路,附加LCD1602液晶显示电路,DS18B20温度传感电路,按键电路等部分组合设计而成的数字电子表系统,该系统的软件部分采用C语言进行编写并使用keil软件进行编译,利用Proteus软件进行系统仿真,系统最终实现对年、月、日、时、分、秒以及星期的显示和设定,并且能够实现闹铃和温度测量的功能,该系统具有功耗低、使用便捷、功能齐全、价格低廉的优点,在自动控制等方面具有广阔的市场应用前景。本文详细阐述了数字电子表系统各部分硬件的结构组成和设计原理,以及软件部分的算法原理,方便大家研究学习。 【关键词】数字电子表 AT89S52 DS1302 LCD1602 DS18B20 Digital electronic watch【Abstract】The digital electronic watches are clock products based on electronic technology which have been widely applied in manufacturing and daily life, featuring accuracy and visual displaying. This paper introduces a system of digital watch which adopts AT89S52 SCM as the control core, DS1302 as the clock circuit, plus LCD1602 LCD, DS18B20 temperature sensor circuit, keying circuit and other components. Software of this product is written in C language and compiled by keil. This system is simulated on Proteus and implements the displaying and setting of year, month, date, minute, second and week, plus alarm clock and temperature measuring functions. This system has the advantage of low power consumption, usability, full-featured and low price, leading to a broad market prospect. This paper elaborates the structural composition and design principle of hardware end, algorithms of software end, conducing to a further study and research. 【Key words】 Digital electronic watch AT89S52 DS1302 LCD1602 DS18B20目录绪论21 整体方案论证31.1 AT89S52单片机主控模块41.2 DS1302时钟电路模块41.3 LCD1602液晶显示模块51.4 闹铃及温度显示模块51.5 键盘扫描电路模块52 系统硬件设计52.1 AT89S52单片机的电路设计62.1.1 AT89S52单片机的主要特点62.1.2 AT89S52单片机管脚介绍62.1.3 AT89S52单片机最小系统的设计82.2 DS1302时钟电路设计92.2.1 时钟芯片DS1302概述92.2.2 DS1302的时钟及日历112.3 LCD1602液晶显示电路设计122.4 数字电子表系统整体电路设计133 系统软件设计134 系统调试194.1 系统硬件调试194.2 系统软件调试204.3 系统测试结论205 Proteus仿真过程介绍205.1 Proteus软件介绍205.2 系统在Proteus下的仿真过程21结束语24参考文献25附录26感谢信27绪论伴随着我国IT产业和微电子产业的不断进步,单片机在生产生活的各个环节均发挥着重要的作用。因为单片机具有很多的突出优点,如能同时实现多种功能,价格便宜等,其在社会生产生活中均有广泛的应用,并且已经成为电子信息工程、自动化等专业的必修课程。 数字电子表是对电子技术的典型应用,尤其是以单片机控制的方式实现电子表的功能是亦是对单片机的典型应用,是单片机学习、实验的常用题目。利用单片机实现数字电子功能具有很好的自由发挥性和开放性,能促进单片机的学习者提升自己的学习和实践能力,并且能提高学习者对单片机全面应用的能力。由于对数字电子表的要求不断提高,因而在数字电子表的设计过程中要力求功能尽可能齐全,操作尽可能快捷简单,显示尽可能人性化。因为数字电子表可视性好,方便快捷,时间准确,并且还可以扩展出多种功能,其应用逐渐普及,特别适合办公室,家庭居室,会议大厅,车站广场等,具有很大的发展潜力。在信息化高度发达的今天,最具代表性的计时产品就是数字电子表,它是近代世界钟表业界的第三次革命。由于摆和摆轮游丝问世,震荡的频率更加精准,更加可靠,时钟的精度得到很大提高,最具有代表性的就是带有摆的机械钟表,这便是第一次革命。石英晶体振荡器的应用是钟表界的第二次革命,由于震荡源的精度和稳定性进一步提高,走时精度得到极大提高的石英电子钟表应运而生,这使得钟表的精确度由分级精确到秒级。单片机数码计时技术的应用是第三次革命,使计时产品的精确度分级精确到到六百分之一万秒,显示方式发展为夜光数字,明了直观,且增加了日期、星期信息的全自动显示功能。在数字电子技术和先进的石英技术相结合的情况下,数字电子表焕发出更加灿烂的光芒,走时更加精准,适用于自动控制,个人使用等多个领域。随着技术的进一步成熟,数字电子表的生产成本逐渐下降,销售价格也随之下调,对数字电子表的发展起到了十分积极的作用,当前的数字电子表已经具备了年、月、日、时、分、秒的显示及设置,还拓展有闹钟、秒表等功能,比较高端的数字电子表还具有温度显示、海拔显示、多媒体等功能,数字电子表的发展可谓是方兴未艾,数字电子表具有输出方式灵活、功耗低、计时准确、性能稳定、维护方便等优点。数字电子表是一个时间控制系统,既能作为一般的时间显示器,同时可以根据需要扩展其功能,扩展为可显示时间和日历的电子万年历。本文提出的是以AT89S52单片机为控制核心,基于时钟芯片DS1302,与按键、LCD显示等模块组成硬件系统的设计方案。在软件设计上采用C语言进行编写,利用keil c51软件进行编译。最终实现时间显示,时间设置,闹钟,温度显示等功能。1 整体方案论证 本数字电子表系统以AT89S52单片机为核心控制器,对系统进行初始化,完成对按键的响应、LCD液晶显示的控制等功能,以及完成各模块通信协调的功能。时钟芯片DS1302不断将时间信号送往单片机,然后单片机通过LCD1602液晶显示器将时间显示出来。按键将信号传输给单片机处理,借以实现对时间的设置,可以对年,月,日,时,分,秒进行设定,还可以通过对闹钟时间进行设置实现定时闹钟的功能。通过温度传感器将温度信号传递给单片机,然后单片机通过LCD1602液晶显示器将温度显示出来,达到温度显示的功能。整个硬件系统需要5V的电压进行供电。最终该数字电子表系统能实现如下功能:1、在液晶显示屏上显示年、月、日、时、分、秒,并能进行相关的设定;2、通过按键设置闹钟时间,并能在准确的时间闹铃;3、能准确显示数字电子表系统周围的环境温度。(AT89S52)主控模块DS1302时钟电路模块键扫描电路模块液晶显示模块存储电路模块闹铃及温度电路 图1-1整体系统框图本数字电子表系统如图1-1所示,由如下模块构成:AT89S52单片机主控模块、DS1302时钟电路模块、存储电路模块、键盘扫描电路模块、LCD1602液晶显示模块、闹铃及温度电路模块。然后我们对几个模块一一进行分析论证。1.1 AT89S52单片机主控模块 在设计初期,我思考了如下两种以单片机为核心的主控方式: 1、采用AT89C51单片机作为数字电子表主控核心,运用Flash ROM,搭载有4KB ROM内部存储空间,能够在3V的低压电源下工作,与MCS-51系列单片机具有完全兼容性,缺点是没有ISP在线编程技术, 运用于电路的设计时,如果要对程序增添新的功能或修改程序,必须拔下芯片,这样反复拔插会对芯片产生损伤。2、采用AT89S52单片机作为数字电子表主控核心,以Flash ROM作为片内ROM,能够在3V的低压电源下工作,与MCS-51系列单片机具有完全兼容性,AT89S52有8KB ROM 的内部存储器,除了具有AT89C51单片机的功能以外,还具有具有ISP在线编程可擦除技术,运用于电路的设计时,如果要对程序增添新的功能或修改程序,无需插拔芯片,能够有效防止损坏芯片。综合上述论证考虑,我最终决定采用第二种方案,即以AT89S52单片机为数字电子表系统的主控核心。1.2 DS1302时钟电路模块 在时钟电路模块的设计中,我也想到了两种方案:1、利用AT89S52单片机内部自带的定时计数功能,通过程序编写来实现对年、月、日、时、分、秒的计时。单片机的内部定时计数功能是通过对外部晶振的脉冲进行计数实现的,要实现零误差可以采用11.0592的晶振进行计时,所以可以通过由单片机提供秒信号的方式,利用程序编写达到显示时间的功能。但是这个方案的不足之处是一旦掉电,计时的功能也就丧失了,当下次上电时时间已经错误,而且编写年、月、日、时、分、秒的计时程序将是一个巨大的难题。2、利用时钟芯片DS1302进行计时,然后将时间信号交由AT89S52单片机通过液晶显示器进行显示。DS1302 芯片是一种性价比很高的时钟芯片,性能优越,耗电量小,具有对年、月、日、周、时、分、秒进行计时的功能,同时还具有闰年补偿功能。这个方案的优点是价格便宜并能节约单片机的资源,缺点是增加了控制的难度。综合上述论证考虑,我最终决定采用第二种方案,即以时钟芯片DS1302为计时电路的设计方案。1.3 LCD1602液晶显示模块在显示模块的设计中我也思考了两种方案:1、利用八段数码管进行显示,应用数码管组成的动态显示界面是单片机显示应用最典型的方式,采用动态驱动的方式进行显示,原理其实很简单,数码管有a,b,c,d,e,f,g,dp 8个显示笔划,将它们的同名端连接在一起,然后给数码管的公共极设计一个选通电路,即我们通常所说的位元选通控制电路,每个电路拥有一个I/O线,当需要显示时,单片机会发出形码信号,这个信号会发送到每个数码管,在接收到信号后位元选通控制电路会决定该数码管是否点亮。这种方案的缺点是要同时显示年、月、日、时、分、秒的话需要自少需要17个八段数码管,系统的功耗和体积将会大大增加。2、利用LCD1602液晶显示器进行显示,该液晶显示器采用点阵的方式进行显示,由各个点阵点亮或者不点亮来共同显示需要显示的内容。因为该显示器的各个点阵位之间有间隔,用来区分行和字符,但是却无法用来显示图像,1602LCD是指在屏幕上的显示为两行,每行十六个字符。这个方案的优点在于LCD1602的驱动电路具有很多种的控制指令,使用便捷,可以很方便的控制液晶实现多种显示功能:光标的左移右移、清屏等。综合上述论证考虑,我最终决定采用第二种方案,即以LCD1602液晶显示器为本系统的显示电路。 1.4 闹铃及温度显示模块该模块中的温度显示采用数字温度传感器DS18B20实现,DS18B20具有多种封装形式,可以实现在多种环境下工作,在我的系统设计中采用不锈钢的封装形式,DS18B20的一个巨大的优点就是接线十分的方便,只需要一个口线与单片机相连便可使实现相互之间的双向通讯。在本系统设计中的闹铃功能主要是通过无源蜂鸣器实现,由于闹铃的相关实现机制较为简单,在此不再赘述。1.5 键盘扫描电路模块 该电路通过编写相应的程序即能实现功能,在此不再赘述。2 系统硬件设计 由前一阶段的设计论证,最终确定了以AT89S52单片机为主控核心,时钟芯片DS1302为计时电路,LCD1602为显示电路,DS18B20为温度传感器,无源蜂鸣器为闹铃的数字电子表系统方案。2.1 AT89S52单片机的电路设计2.1.1 AT89S52单片机的主要特点1. 采用一个具有较高处理能力的8位的中心处理器。2. 单片机内部拥有一个大小为128B的数据存储器RAM,用来存储可以读写的数据,有些系列的单片机可以提供更大的存储空间。3. 单片机内部拥有一个大小为4KB的程序存储器,用来存放程序以及原始的数据表格。4.拥有八个兼具输出输入功能的并行IO口。5.拥有两个定时计数器,均具有定时和计数的功能,进行相应的设置,可在定时计数两种功能之间进行切换。6.拥有一个带有5个中断源的中断控制系统,与当前生产的单片机相比,中断源显得有些不足。7. 拥有一个串行的IO 口,用来实现全双工串行通信,其通信对象可以是单片机也可是电脑。8. 单片机内部有一个时钟电路,用来输出时钟信号。其次还拥有一个最高震荡频率为12赫兹的振荡器,程序的运行效率相较之前的单片机而言有了较大的提升。2.1.2 AT89S52单片机管脚介绍 图2-1 AT89S52管脚图 如图2-1所示,其管脚功能如下:1. XTAL1 和XTAL2是该单片机的时钟电路引脚:第19脚为XTAL1:外接微调电容和晶体,如果要接外部时钟,这个引脚需要接地。第18脚为XTAL2:外接微调电容和晶体,但是在AT89S52单片机内部作为振荡电路的反相放大器的输出端,晶体固有频率也就是振荡电路的频率。如果要接外部时钟,这个引脚需要接收外部时钟的脉冲信号。2. 信号控制引脚PSEN,ALE,RST和EA:第9脚为RST/VPD:复位引脚RST在收到高电平信号时才有效。如果主要供电电源发生故障,无法输出高电平时,只要让备用电源输出两个机器周期的高电平,复位操作就可以完成。RST 还有一个功能就是VPD,也就是可以给RAM 提供备用的电源,这样就可以保障在断电时RAM中存储的信息不丢失,然后对单片机进行复位操作后,仍能继续先前的工作。第30脚为ALE/PROG:也就是地址锁存允许信号端。当AT89S51正常工作时,这个引脚会不断输出频率为振荡器频率fOSC 的1/6的正脉冲信号。如果单片机核心需要访问片外的存储器时,该引脚输出的信号会作为低8 位地址的锁存控制信号。由于ALE 端可以频率为fOSC的1/6 的正脉冲固定信号,所以该引脚可以作为对外输出时钟信号的引脚。同时该端口拥有8 个LS 型TTL的负载能力。第29脚为PSEN:也就是程序存储允许输出信号端。如果要访问外部存储器,此引脚会发出选通信号,以定时输出负脉冲的形式选通。如果此引脚接EPROM 的OE 端时,PSEN 端会允许将EPROMROM 中的指令码读出,同时该端口拥有8 个LS 型TTL的负载能力。第31脚为EA/Vpp:也就是固化编程电压输入端/外部程序存储器地址允许输入端。如果高电平信号输入EA ,单片机内核只能对内部的EPROM/ROM进行访问并且将内部存储器中的指令进行执行操作。如果低电平信号输入EA 时,单片机内核只能对外部EPROM/ROM 进行访问并且对外部存储器指令进行执行操作。3. 输入/输出端口P0/P1/P2/P3:P0口(P0.0P0.7,3932 脚):P0口是一个准双向I/O口,共8位。每一位拥有8 个LS 型TTL 的负载能力。如果要将P0 口作为输入口,首先要将该口锁存器全部置1。P1口(P1.0P1.7,18 脚):P1口是一个准双向I/O口,共8位,并且带有上拉电阻。P1口具有4 个LS 型TTL的负载能力。如果要将P1口作为输入口,首先要将该口锁存器全部置1。P2口(P2.0P2.7,2128 脚):P2口是一个准双向I/O口,共8位,并且带有上拉电阻。P1口具有4 个LS 型TTL的负载能力。当该口要对片外EPROM/RAM 进行访问时,该口会将高8 位地址输出。P3口(P3.0P3.7,1017 脚):P3口是一个准双向I/O口,共8位,并且带有上拉电阻。P1口具有4 个LS 型TTL的负载能力。P3口还是一个特殊的端口,该口功能强大,拥有许多其他口没有的特殊功能,其具体功能如下所示:P3.0:具有串行数据接收的功能。P3.1:具有串行数据发送的功能。P3.2:具有外部中断0输入的功能。P3.3:具有外部中断1输入的功能。P3.4:具有T1定时/计数器0的外部计数输入的功能。P3.5:具有T1定时/计数器1的外部计数输入的功能。P3.6:具有外部数据存储器写选通的功能。P3.7:具有外部数据存储器读选通的功能。2.1.3 AT89S52单片机最小系统的设计 单片机AT89S52的中断系统有2个优先级,5个中断源,可以实现二级中断服务嵌套。由片内特殊功能寄存器中的中断允许寄存器IE控制CPU是否响应中断请求。在单片机应用系统中,常常会有定时控制需求,如定时检测、定时扫描、定时输出等,还经常要对外部事件进行计数,该单片机有两个此功能的寄存器:T0和T1,既可以工作于定时模式,也可以工作于外部事件计数模式,另外,T1还可以作为串行口的波特率发生器。单片机最小系统如图2-2所示。图2-2单片机最小系统AT89S52的单片机最小系统如图2-2所示,XTAL2和XTAL1分别接外部晶振和微调电容的两端,分别起到单片机内部振荡器倒相放大器的输出和输入功能。第18、19两个引脚接时钟电路,第9引脚接复位电路,拥有复位输入端的功能,第20引脚应当接地,第40引脚应当接电源。如果把EA脚接高电平,单片机访问片内程序存储器,但在PC值超过0FFFH时,将自动转向执行外部程序存储器内的程序。而MCS-51的复位是由外部的复位电路来实现。采用最简单的外部按键复位电路。按键自动复位是通过外部复位电路的来实现的。考虑到我们选用时钟频率为12MHz,因而C1取10f。2.2 DS1302时钟电路设计2.2.1 时钟芯片DS1302概述DS1302 芯片由美国DALLAS公司生产,是一种带RAM、高性能、低功耗的实时时钟电路,具有对年、月、日、周、时、分、秒进行计时的功能,同时还具有闰年补偿功能,工作电压为2.5V5.5V,其通信方式是利用三线接口与单片机内核进行同步通信,还可以采用突发的方式进行通信,即将多个字节的时钟信号进行一次性传输,时钟芯片DS1302的内部还拥有有一个RAM寄存器,用来于存放临时性数据2。时钟芯片DS1202进行技术升级后便产生了DS1302,该芯片和DS1202芯片具有兼容性,在功能上增添了对备用电源进行涓细电流的充电能力。时钟芯片DS1302具有低功耗的特点,拥有对年、月、日、时、分、秒计时的功能,同时还具有对闰年补偿的功能。时钟芯片DS1302还具有对数据进行记录的功能,尤其是当对一些带有特殊意义的数据进行记录时,拥有对数据和数据生成时间同时进行记录的功能。DS1302的性能特性: 实时时钟,拥有对年、月、日、时、分、秒计时的功能,同时还具有对闰年补偿的功能;用于存放临时数据的RAM;最少引脚的串行I/O;2.55.5V 电压工作范围;当在2.5V电压下工作时,每小时的耗电量小于300nA;具有便捷多样的传输方式;3线接口简单;可选的慢速充电的能力。时钟芯片DS1302拥有一个静态RAM,大小为31字节,同时拥有实时时钟/日历电路。其通信方式是微处理器通过一个串行接口进行通信。另外实时时钟/日历电路可以提供年、月、日、时、分、秒、周的时间信号,具有对闰年补偿的功能。拥有用24小时制和12小时制两种时间格式。其通信方式是利用三线接口与单片机内核进行同步通信,还可以采用突发的方式进行通信。DS1302的内部结构图如图2-3所示。 图2-3 DS1302内部结构图 在DS1302引脚中,Vcc2为主电源电源引脚,Vcc1为备用电源引脚。由于有备用电源,因此当主电源断电时,备用电源能支持芯片继续工作。时钟DS1302还有另外一个机制,即时当两个电源引脚同时供电时,由电压较大的供电,而不接受电压较小的电源的供电,但是当Vcc2引脚的电压供应大于Vcc1引脚电压加0.2V的情况下,时钟DS1302会接收Vcc2引脚的供电。在Vcc2引脚的电压小于Vcc1引脚的电压时,时钟芯片DS1302接受Vcc1引脚的供电。引脚X1和引脚X2是外接频率为32.76kHz的晶振作为震荡源。RST是复位/片选端,当RST输入高电平时,开始进行数据传输。综上所述,当对DS1302进行上电操作时,在电源电压没达到2.5V之前,RST引脚需要保持低电平状态,但是如果SCLK是低电平的情况下,可以将RST置为高电平。串行数据传送端口I/O即可以做输入端,也可以做输出端,而SCLK只能作为输入端。时钟芯片DS1302的引脚示意图如图2-4所示。图2-4 DS1302 引脚示意图在DS1302的引脚中,GND接地,Vcc1、Vcc2接电源,两种端口合作,为芯片供电,当通过两个Vcc中的任意一个引脚对芯片提供5V电压时,DS1302能够正常工作,此时可以对芯片进行读写操作。如果对DS1302提供3V的电源并且Vcc 低于1.25VBAT 时,DS1302只能进行计时,而丧失了读写的功能。DS1302的具体引脚功能如表2-1所示。引脚号引脚名称功能1VCC2主电源2,3X1,X2振荡源,外接32768HZ晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行数据输入端8VCC1后备电源表2-1 DS1302引脚功能表2.2.2 DS1302的时钟及日历DS1302获取时钟和日历信息的方式是读取实时时钟寄存器中的数据,该寄存器的控制字如表2-2 所示。可以通过对实时时钟寄存器写入数据的方式对时钟和日历进行初始化。实时时钟寄存器中数据全部采用BCD 码的格式,实时时钟寄存器00h的第7位是时钟停止位,如果要对时钟进行初始化,需要将此位置1。时钟芯片DS1302 具有24小时制和12小时制两种时间格式,而小时寄存器的第7位是24小时制和12小时制两种时间格式的选择位,如果这一位置0,则采用24小时时间格式,第5位是第二个10 小时位(2023 小时)。如果这一位置1,则采用12小时时间格式,第5位是上午/下午(AM/PM)的标志位,当这一位被置1 时则表示是下午。DS1302一共有十二个寄存器,所有存储数据均是BCD格式。在寄存其中有七个与计时有关,在寄存器控制字中奇数为读操作,偶数为写操作,各寄存器如表2-2所示。寄存器名命令字取值范围各位内容写操作读操作76543210秒寄存器80H81H00-59CH10SECSEC分钟寄存器82H83H00-59010MINMIN小时寄存器84H85H01-12或00-232/24010APHRHR日期寄存器86H87H01-28,29,30,31010DATEDATE月份寄存器88H89H01-12000IOMMONTH周日寄存器8AH8BH01-0700000DAY年份寄存器8CH8DH00-9910YEARYEAR 表2-2 DS1302的日历、时钟寄存器及其控制字时钟暂停功能:该功能由DS1302寄存器中的秒寄存器的第七位控制,当该位置1时,始终停止,当该位置0时,时钟开始运转。AM-PM/12-24小时方式:DS1302的两种时间显示格式由小时寄存器的第七位控制,当该位置1时,为十二小时制,当该位置0时,为二十四小时制。当选择十二小时制时,该寄存器的第五位控制上午或下午的显示,当该位置1时,为下午,当该位置0时,为上午。万年历优化算法如下:除闰年的2月份为29天,平年为28天外,其他时间每10个月的总天数基本一样,主要的难点是要确定每一天是星期几。,一周共有七天,如果说2000年1月1日是星期五,而要计算出2000年2月1日为周几,具体算法如下:由表2-3可知,从2000年1月1日到2000年2月1日一共有三十一天,而数字31对7取模是3,在2000年1月1日星期二的星期数加上取模的3后就是星期五,因而2000年2月1日就是星期五。利用此原理可以推知此后任何一天是星期几。月份123456789101112闰年312931303130313130313031非闰年312831303130313130313031表2-3 万年历算法 时钟芯片DS1302的数据传输方式为串行数据传输,可以通过对芯片的编程实现充电的开关功能,该芯片采用了稳定频率为32768Hz晶振。DS1302的主电源停止供电后,备用电源会提供电源,此时芯片功耗很小,但是要确保芯片正常计时仍需要充足电力。如果主电源的断电时间只有几天或者几个小时,则可以利用漏电较小的普通电解电容提供备用电源。需要注意的是当时钟DS1302在第一次上电时,需要对各个寄存器采取初始化操作。当初始化操作完成后即可以进行芯片相关功能的操作。DS1302的时钟电路如图2-5所示。 图2-5 DS1302计时电路2.3 LCD1602液晶显示电路设计 如图2-6所示。P0口作为AT89S52的数据线,P1.0是LCD的下降沿触发的片选信号(E),P1.1是LCD的读写信号(R/W),P1.2是LCD的寄存器选择信号(RS),LCD1602显示模块的设计需要注意以下几点:第一,显示模块初始化操作,应该先进行清屏,然后将接口数据位设置为8位,字型设置为为57点阵,显示行数设置为1行,显示设置为整体显示,并且取消光标和字体闪烁,正向增量方式且不移位。第二,将字符送入LCD1602的显示缓冲区,字符数据划分为两个组,分别显示电压数据和字符,要将全部的数据和字符接收完毕后才会进行统一显示。 LCD1602液晶显示电路如图2-6所示。 图2-6 LCD1602液晶显示电路2.4 数字电子表系统整体电路设计 整合上述主要模块的电路设计得出数字电子表整体电路如图2-7所示。 图2-7 数字电子表系统整体电路3 系统软件设计 由于数字电子表系统硬件模块较多,软件程序编写有一定的复杂度,程序的运行效率直接影响着整个系统的运行效果,因此我最终选择用C51语言,以模块化的方式进行程序编写,以期能够达到良好的运行效果。 程序设计流程如下: 开始 液晶初始化gFunctioncount 是否为0NY 显示子函数1 按键扫描子程序 图3-1 系统主程序流程图系统主程序流程图如图3-1所示,首先对液晶显示器进行初始化,接着判断gFunctioncount的值是否为0,为0则进入显示子函数,不为0则进行下一步操作,最后执行按键扫描子程序,基本程序如下:void main(void) DisplayInit(); while(1) if(gFunctionCount = 0) Display1();KeyScan(); elseKeyScan(); 显示子函数1YN闹铃是否到闹铃时间刷新时间显示读取DS1302内部时间 图3-2 LCD1602液晶显示子函数流程图LCD1602液晶显示子函数流程图如图3-2所示,首先读取时钟芯片DS1302内部时间,接着刷新时间显示,然后判断是否到闹铃时间,到闹铃时间则闹铃,否则执行下一步操作。DS1302读时间操作读寄存器0x81为秒值返回读取值读寄存器0x8d为年值读寄存器0x89为月值读寄存器0x87为日值读寄存器0x85为时值读寄存器0x83为分值 图3-3 时钟芯片DS1302读时间子函数流程图读取DS1302计时数据的子函数流程图如图3-3所示。依次从相应寄存器读出秒分时日月年的值,然后再返回读取的值,基本程序如下:unsigned char DS1302_read(unsigned char tadd) unsigned char tdata; DS1302_RST=0; DS1302_SCLK=0; DS1302_RST=1; DS1302_writeByte(tadd); tdata=DS1302_readByte(); DS1302_RST=0; DS1302_SCLK=1; return(tdata); 图3-4按键扫描子函数流程图按键扫描的基本程序如下:void KeyScan(void) if(Key1 = 0) Scan10MsDelay(); if(Key1 = 0) if(BEEP = 0 & gFunctionCount = 0)BEEP =1;DS1302_read_time();Fen = (Fen & 0x0f) + (Fen4) * 10);Shi = (Shi & 0x0f) + (Shi4) * 10);if(AlarmFlag0=1 & Shi = AlarmClock00 & Fen = AlarmClock01) DoneFlag0 = 0;elsegFunctionCount+;gTimeCount = 0; if(gFunctionCount = 1 & BEEP!=0)DS1302_read_time();Miao = (Miao & 0x0f) + (Miao4) * 10); Fen = (Fen & 0x0f) + (Fen4) * 10); Shi = (Shi & 0x0f) + (Shi4) * 10); Ri = (Ri & 0x0f) + (Ri4) * 10);Yue = (Yue & 0x0f) + (Yue4) * 10); Nian = (Nian & 0x0f) + (Nian4) * 10); XingQi = (XingQi & 0x0f)+(XingQi4) * 10); LCDDispNum(7,2,(Miao/10); LCDCursor();else if(gFunctionCount = 2)DS1302_set_time();LCDWriteCommand(0x01);Scan10MsDelay();Scan10MsDelay();Scan10MsDelay(); Scan10MsDelay();LCDDispString(2,1,Alarm Clock);LCDDispNum(2,2,AlarmClock00/10);LCDDispNum(3,2,AlarmClock00%10);LCDDispChar(4,2,:);LCDDispNum(5,2,AlarmClock01/10);LCDDispNum(6,2,AlarmClock01%10);LCDDispChar(7,2,:);LCDDispNum(8,2,AlarmClock02/10);LCDDispNum(9,2,AlarmClock02%10);if(AlarmFlag0)LCDDispChar(12,2, ); LCDDispChar(14,2,N);LCDDispChar(13,2,O);elseLCDDispChar(12,2,O);LCDDispChar(14,2,F); LCDDispChar(13,2,F);else if(gFunctionCount = 3)LCDNotCursor();gFunctionCount = 0;LCDWriteCommand(0x01);Scan10MsDelay();Scan10MsDelay();Scan10MsDelay(); Scan10MsDelay();while(!Key1); 清屏延时清除屏幕显示设定输入方式,增量不移位设置8位格式,两行开整体显示,关光标,不闪烁LCD1602初始化子函数 图3-5 LCD1602初始化子函数流程图LCD1602液晶显示器初始化子的函数流程图如图3-5所示。LCD1602初始化子函数首先设置其显示参数和输入方式,然后再清除屏幕显示,基本程序如下:void LCDInit(void) LCDWriteCommand(0x38);/*设置8位格式,2行,5x7*/ LCDWriteCommand(0x38);/*设置8位格式,2行,5x7*/ LCDWriteCommand(0x38);/*设置8位格式,2行,5x7*/ LCDWriteCommand(0x0c);/*整体显示,关光标,不闪烁*/ LCDWriteCommand(0x06);/*设定输入方式,增量不移位*/ LCDWriteCommand(0x01);/*清除屏幕显示*/ DelayN40us(100); /*清屏延时*/ 4 系统调试4.1 系统硬件调试 由于受制作条件的限制,本次数字电子表的制作我没有采取印刷电路板,而是采用了万用电路板,即是用焊锡直接桥建所有电路,因而焊接量巨大,焊接难度高,在多次焊接失败后才成功桥建好电路。万用电路板的焊接尤其需要格外细致,因为焊接点稍微错位则会造成系统无法正常运行,甚至短路。正是由于焊接难度高,漏焊、虚焊的情况会经常出现,因而硬件调试也很麻烦。在数字电子表系统硬件的调试过程中主要遇到了以下几个问题:(1)在LCD1602的液晶显示上会出现部分重叠的现象。解决方法:经过反复测试,发现是显示地址给错了,给出正确地址后显示恢复正常。(2)在设定显示时间的时候LCD会显示几个相同的黑色长方形而不显示时间。解决方法:用示波器等仪器测试,确定是电源供电不足造成的,最后在DS1302时钟芯片的CS、SCLK、RET端接入5.1K的上拉电阻后,显示恢复正常4.2 系统软件调试在软件调试中,各个模块的编写并不是最难的,难的是要将各个模块融合后还能准确运作。所以,在后期的软件编译中遇到了不少的困难,主要问题如下:1把程序少入硬件中后,LCD的显示亮度不一样并且有闪动的情况。解决方法:解决闪动的问题主要是要对调用的延时长短进行修改,直至闪动消失。屏幕亮度部分增高是由于在调用显示子程序时,最后的赋值没有被屏蔽,在通过指令屏蔽后,故障消失。2当在程序中加入温度显示模块后,修改时间屏幕会显示乱码。解决方法:因为DS18B20采用串行通信的方法传输数据,而传输线只有一个,信号处理速度很慢,如果把时间显示程序接入时,受到延时影响会导致显示错误。因此在调用温度显示子程序时,需要先关闭定时器1中断允许,在温度子程序反回时再打开定时器1中断允许,程序修改后显示恢复。4.3 系统测试结论 经过反复的测试修改,最终本系统实现了如下功能: 1:同时显示年月日、时分秒、及星期信息。 2:具有调整日期和时间功能。 3:能对闰年平年进行显示。 4:实现了闹铃的功能。5 Proteus仿真过程介绍5.1 Proteus软件介绍Proteus仿真软件是由英国Labcenter electronics公司生产的EDA工具软件。该软件功能强大,最大的特点是能仿真单片机及外围器件,同时也具有其他EDA软件的功能。单片机及外围器件的仿真是该软件的强项,受到广大用户的一致好评。Proteus是在业内非常流行的EDA仿真软件,可以完成电子系统设计的一站式服务,如电路设计,程序编辑,系统仿真,PCB制作等。是目前为止唯一一款同时具有电路设计仿真、系统虚拟仿真、PCB设计制作功能的软件,该软件支持多种处理核心,如8051、8086、Cortex、DSP等,并

温馨提示

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

评论

0/150

提交评论