1、基于89C51的数字电子钟设计说明 单片机系统课 程 设 计1 概述1.1 研究背景在日新月异的21世纪里,家用电子产品得到了迅速发展。许多家电设备都趋于人性化、智能化,这些电器设备大部分都含有CPU控制器或者是单片机。单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大围推广,广泛应用于工业控制系统、通讯设备、日常消费类产品和玩具等。并且已经深入到工业生产的各个环节以及人民生活的各个方面,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等。用单片机来控制的小型家电产品具有便携实用,操作简单的特点。而时钟,自从它发明的那天起,就成为人类的朋友,但随
2、着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指
3、为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本文设计的日历和时钟的显示广泛用于小型智能家用电子产品,如电子钟。 利用单片机进行控制,实时时钟芯片DS1302进行记时,外加整点报时电路和显示电路,可实现时间的调整和显示。
4、电子钟既可广泛应用于家庭,也可应用于银行、邮电、宾馆、医院、学校、企业、商店等相关行业的大厅,以及单位会议室、门卫等场所。因而,此设计具有相当重要的现实意义和实用价值。1.2 设计思想及基本功能 本设计在实现一般的数字电子钟的要求前提下,结合单片机知识以及电路知识,本着使电路工作稳定,降低能耗,减少器件的使用,节约成本,现实使用价值高的原则而设计。本设计具体可以完美实现以下几个功能:(1)能准确实时显示年、月、日、时、分、秒、星期。(2)可以对时间随时进行手动校正。(3)采用24小时制。(4)使用LED显示时间参数。 (5)上电后,电子钟显示“2013年12月31日23时59分59秒 星期2”
5、。 (6)当年、月、日、时、分、秒高位为0时做消隐处理,只显示单个数字以增强其可读性。2 总体方案设计2.1 方案选取2.1.1显示模块选择方案和论证方案一:采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。方案三:LED数码管静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都
6、需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案四:LED数码管动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。本设计采用LED数码管动态扫描,由于LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片
7、机口线少,所以本设计采用方案四。2.1.2时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,RAM做为数据暂存区,工作电压2.5V5.5V围,2.5V时耗电小于300nA.从时间计时的精度以及提高单片机工作效率角度考虑,本设计采用方案二。2.2总体方案设计 综上各方案的论证与选取,本设计的最终方
8、案为:以单片机AT89C51为主控制器,时间数据通过时钟芯片DS1302来读取,并通过LED数码管显示出来,并用键盘来完成对当前时间的调整。2.3 系统整体设计框图 结合以上方案选取,系统的整体设计框图方案如下: 图2-3 系统整体设计框图3 硬件电路设计3.1 电源电路设计单片机正常工作电压为5V,因此设计的电源电路主要是提供单片机工作电压。图3-1是为单片机提供电压的电源电路。在这个电路中采用了三端集成稳压器LM7805,可以输出5V的直流电压以供给单片机,另外,用一个刀开关控制电源的断开与接通。 图3-1 电源电路图3.2 晶振电路 时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频
9、率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是部时钟方式,另一种为外部时钟方式。本设计采用部时钟方式,因此只需外接晶振源,就能产生一定频率的时钟信号送到单片机的部的各个单元。电路中的两个电容的作用有两个:一是帮助振荡器起振(C1 C2的值大,起振的速度慢;反之,速度快。);二是对振荡器的频率起到微调的作用(C1 C2的值大,频率略有减少,反之,频率略有提高)。本设计选用12MHZ的晶振,C1、C2的值采用30pF。晶振电路如下图所示。 图3-2 单片机晶振电路图3.3 复位电路89C51单片机
10、系统在刚通电后,必须复位。复位电路的主要功能是使单片机进行初始化,在初始化的过程中需要在复位引脚RST上加大于2个机器周期的高电平,使单片机处于复位状态。复位后的单片机地址初始化为0000H,然后继续从0000H单元开始执行程序。在复位电路中提供复位信号,等到系统电源稳定后,再撤销复位信号。但是为了在复位按键稳定的前提下,电源稳定后还要经一定的延时才撤销复位信号,以防在按键过程中引起的抖动而影响复位。当单片机运行出错或进入死循环时,可使单片机复位后重新运行。图3-3所示的RC复位电路可以实现上述基本功能。 图3-3 复位电路图3.4 时钟电路3.4.1 DS1302芯片介绍 低功耗时钟芯片DS
11、1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析以及对异常数据出现的原因的查找有重要意义。采用DS1302作为记录测控系统中的数据记录,其软硬件设计简单,时间记录准确,既避免了连续记录的大工作量,又避免了定时记录的盲目性,给连续长时间的测量、控制系统的正常运行及检查都来了很大的方便,可广泛应用于长时间连续的测控系统中。在测量控制系统中,特别是长时间无人职守的测控系统中,经常需要记录某些具有特殊意义的数据及其出现的时间。记录及分
12、析这些特殊意义的数据,对测控系统的性能分析及正常运行具有重要的意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许。而在系统中采用DS1302则能很好地解决这个问题。 DS1302的性能特性如下:实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;用于高速数据暂存的318位RAM;最少引脚的串行I/O;2.55.5V 电压工作围;2.5V时耗电小于300nA;用于时钟或RAM数据读/写的单字节或
13、多字节(脉冲方式)数据传送方式;简单的3线接口;可选的慢速充电(至VCC1)的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:VCC1 在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;VCC2在双电源系统中提
14、供主电源,在这种运用方式中,VCC1 连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由VCC1或VCC2中较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电;当VCC2小于VCC1时,DS1302由VCC1供电。DS1302数据操作原理:DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲
15、的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。图3-4-1 DS1302管脚图如果在传送过程中置RST为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC =2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的管脚图如图3-4-1所示,表3-4-2为各引脚的功能。引脚号引脚名称功能1VCC2主电源2,3X1,X2振荡源,外接32768HZ晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行时钟输入端8VCC1后备电源表3-4-2 DS1302引脚功能表
16、DS1302的控制字如图3-4-3所示。控制字节的最高有效位(位7)必须是逻辑1;如果它为逻辑0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。 图3-4-3 控制字节的含义 为了提高对32个地址的寻址能力(地址/命令位15逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多
17、字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。不管是否写了全部31字节,所写的每一字节都将传送至RAM。数据读写程序如图3-4-4所示。SCLKKRSTI/O571357210246046R/CA2A3A0A1R/WA41DATAI/OBYTEDATAI/OBYTE图3-4-4数据读写程序DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表3-4-5,其中奇数为读操作,偶数为写操作。寄存器命令码数据围寄存器中各位的容名称地址写读
18、76543210秒00H80H81H0059CH秒数据分01H82H83H00590分数据时02H84H85H0112或002312/24010/AP时数据日03H86H87H0128,2930,3100日数据月04H88H89H0112000月数据星期05H9AH8BH010700000星期数据年06H8CH8DH0099年数据多字节读写BEHBFH表3-4-5 片时钟数据寄存器3.4.2 DS1302 在本设计中的应用 实时时钟芯片DS1302采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。要特别说明的是,备用电源BT1可以用电池或超
19、级电容(10万F以上)。虽然DS1302在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。如果断电时间较短(几小时或几天),可以用漏电较小的普通电解电容代替(100F就可以保证1小时的正常走时),本设计采用3V的锂电子电池。DS1302在第一次加电后,需进行初始化操作。初始化后就可以按正常方法调整时间。DS1302的时钟电路如图3-4-6所示。图3-4-6 DS1302时钟电路3.5 键盘电路 本设计用到四个独立式键盘分别接到P1口的低4位,为保证P1口低4位在按键无按下时为高电平,特在P1口的低四位外接上拉电阻。键盘电路如图3-5所示。按键的开关状态通过一定的电路转换
20、为高、低电平状态。按键闭合过程在相应的I/O端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。为了避免CPU多次处理按键的一次闭合,应采用措施消除抖动。因此本设计采用独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生互相影响。 图3-5 键盘电路各按键对应的功能如下: (1)K1键为功能移位键,依据按下的次数对应选中调节年、月、日、时、分、秒或者星期,具体在键盘子程序中详细介绍。 (2)K2键为数字“+“键,
21、按一下则对应的数字加1。 (3)K3键为数字“-”键,按一下则对应的数字减1。 (4)K4键为总返回键。3.6 显示电路 显示电路中用到的元器件介绍:(1)数码管LED LED显示器由若干个发光二极管组成,当发光二极管导通时,相应的一个笔画或一个点就发光。控制相应的管导通,就能显示出对应字符。各段LED显示器需要由驱动电路驱动。在七段LED显示器中,通常将各段发光二极管的阴极或阳极连在一起作为公共端。将各段发光二极管连在一起的叫共阳极显示器,用低电平驱动;将阴极连在一起的叫共阴极显示器,用高电平驱动。静态显示有并行输出和串行输出两种方式。静态显示就是每一个显示器各笔画段都要独占具有一个锁存功能
22、的输出口线,CPU把要显示的字形代码送到输出口上,就可以使显示器上显示所需的数字或符号,此后,即使CPU不在去访问它,因为各笔画段借口具有锁存功能,显示的容也不会消失。数码管动态显示是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a、b、c、d、e、f、g、dp 的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通
23、的数码管就不会亮。透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。(2)译码器74LS13874HC138译码器是通过3条线来达到控制8条线的状态,就是通过3条控制线A0、A1、A2不同的高低电平组合来控制Y0Y7的输出状态,其中4和5为使能地端,与8引脚共同接地,当接高电平时Y0到Y
24、7输出高电平。6号脚为使能端,为高电平时有效。74HC138封装如图3-6-1所示。当需要级联时只需要改变使能端信号引脚即可,连接方法简单。 图3-6-1 74LS138封装图(3)8D锁存器7457374573与74373功能相似,都是8D锁存器,可驱动数码管。其功能如下:三态总线驱动输出置数全并行存取缓冲控制输入使能输入有改善抗扰度的滞后作用 原理:74LS573 的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。 这种
25、电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。74573的引脚图如下: 图3-6-2 74573引脚图显示电路设计:本设计采用16个共阴极数码管,其中DS1-DS4显示年,DS5-DS6显示月,DS7-DS8显示日,DS9-DS10显示时,DS11-DS12显示分,DS13-DS14显示秒,DS15显示星期,DS16用于整点报时时的闪烁位。在显示部分硬件电路设计中用两个74573分别驱动前8个数码管和后8个数码管,采用总线的连接方式,并在74573与LED之间加上限流电阻,阻值为100欧姆。两个
26、74573的输入端均与P0口相连,即P0口为LED的段选端,用于向LED输入数型码,并接上拉电阻,阻值均为10K欧姆。P3口的低3位分别接两个74LS138译码器的A、B、C端,用P3.3、P3.4分别接两个译码器的使能端E3。两个译码器的16个输出端分别接16个数码管,用于LED的位选端。 图3-6-3 显示电路3.7 整点报时电路 整点报时电路由PNP型三极管8550、电阻与蜂鸣器构成,当P1.7输出低电平时,蜂鸣器就会发声,其设计电路如下图所示。 图3-7 整点报时电路4 系统软件设计 软件的设计是设计控制系统的应用程序。其任务是在整体设计和硬件设计的基础上,确定程序结构,分配片RAM资
27、源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整的应用程序,再与硬件相结合完成相应功能。4.1 主程序软件设计流程图如图4-1所示,可以看到主程序采用模块化设计。从主程序流程图看出,主程序的组成是通过分别调用各子程序组成总体系统功能,能很直观的看出主程序所要完成的功能,首先是初始化各模块,之后调用键盘完成时间的调整,调用日历子程序完成日历时钟的初始化和时间数据的读写,调用显示子程序显示数据,最后又转到键盘程序来回循环。初始化部分主要有初始化定时器部分和和一些寄存器、标志位、初始化时间等。(1)对定时器T0初始化时,首先置初值,CPU开中断,定时器T0开中断,并且开始
28、计数,而对定时器T1初始化时,首先置初值,定时器T1关中断,并且停止计数,只有收到命令时才能产生中断。(2)寄存器的初始化主要是初始化执行程序时用到的部分RAM空间,防止程序执行时带来混乱。(3)标志位初始化是对时间调整时判断是调分还是调时,以及整点报时等而专设的位标志,初始化过程中标志位全部置0,即开始时是处于显示状态,而不是调整状态或者整点报时状态,这一点在程序中相当明了。(4)初始化时间是开机时显示的时间,并通过调用日历时钟的写程序来完成时间的置初值。 图4-1 主程序流程图4.2 键盘子程序设计多功能键盘程序的设计是本设计的难点,也是完成本设计的重点,由于本设计为15位显示,所以对于日
29、期与时间的调整,相应的程序会非常的冗长,但是键盘对年月日时分秒星期的调整思路、流程大体一样,所以在程序设计上并不是那么难。当有键按下时,调用10ms延时程序,再判断是否有键按下无则返回,若有先调用显示程序再判断是否松开,否则再转到显示程序,这样避免了在按键松开之前能正常显示。其中K1键功能最多,通过判断K1键按下的次数来判断是调时间还是定时,并对对应的位置闪烁。本键盘深度为7级,即连续按下K1键8次时则返回到原来界面。当判断键值为1时则为调秒状态,对应的秒低位闪烁,为2时为调分状态并分闪烁,为3时为调时状态并时闪烁,为4时为调日状态并日闪烁,为5时为调月状态并月闪烁,为6时为调年状态并年闪烁,
30、为7时为调星期状态并星期闪烁。 K2为加1键,K3为减1键,K4为总返回键,即在调时见时不用只有按下K1键值为8才返回,而通过按下K4键即可返回。由于键盘流程图非常复杂,在此只表示秒,如图4-2所示,其余相仿省略。 图 4-2 键盘子程序流程图4.3 日历时钟子程序设计DS1302与CPU的连接,是通过SCLK、I/O、RST,即三线连接方式。日历时钟DS1302的读写需要初始化时序、读时序、写时序等。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线器件回送是低位在先。读写都是16位数据,高8位是地址,低8位是数据,在读写时要
31、严格遵从读写时序,否则读写将会失效。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平,这一点我们要一定注意。当RST置为高电平时,在串行时钟的SCLK的上升沿,DS1302从I/O端口读入一位数据,8个串行时钟脉冲就可以读入一字节的数据。在串行时钟的下降沿,DS1302向I/O端口输出一位数据,8个串行时钟脉冲就可以输出一字节的数据。日历时钟的读写流程图如下图所示。 图1 时钟读 图2 时钟写 图4-3 日历时钟读与写流程图4.4 显示子程序
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1