目录
第一部分 引言 3
1.1研究背景和研究意义 3
1.2论电子钟的发展 4
第二部分 总体方案 6
2.1系统的设计思路 6
2.2系统硬件描述 6
2.3系统软件描述 7
第三部分 硬件设计 8
3.1硬件芯片介绍 8
3.2系统硬件结构 11
3.2.1主控制模块 11
3.2.2时钟模块 11
3.2.3电源模块设计 12
3.2.4显示模块设计 12
第四部分 软件设计 13
4.1主程序设计 13
4.2主程序代码 14
4.3 日历算法 16
4.3.1基本时间算法 16
4.3.2总天数算法 16
4.3.3日历算法 17
4.3.4每周算法 17
4.3.5农历算法 17
4.4 按键部分 17
4.5 显示部分 18
第五部分 结论 19
5.1系统调试 19
5.1.1前期调试问题 19
5.2.2问题分析 19
5.3.3解决的方法 19
5.4.4计时误差分析 20
5.2 总结 20
第一部分 引言
1.1研究背景和研究意义
随着社会的发展,人类科学技术的进步,人们从太阳、沙漏和电子钟钟摆的角度了解时间到现在,电子钟的出现的发展过程使人们认识到时间更加方便,与传统的机械钟相比较,机械钟的相位关系更为密切。它具有显示准确、直观、无机械传动装置等优点,广泛应用于人们的日常生活中。但目前市场上常用的一些电子钟单功能,没有时间校准、时间和闹钟以及阴历、节气门显示等功能。e在一定的情况下,不能满足我们生活和工作的需要,因此开发设计满足上述要求,以及高性价比的多功能时钟,成为目前我们迫切需要解决的问题。
多功能电子钟已成为人类不可缺少的一项。随着社会生产力的发展和信息社会程度的不断提高,人们对时钟的功能提出了越来越高的要求,许多多功能电子钟都具有报警、定时等多种功能。
电子钟的精度明显高于以往的时钟。时钟的数字化大大方便了人们的生活,增加了时钟的实用性,扩大了时钟的使用范围,具有很强的现实意义。
多功能电子钟采用数字电路控制时间,广泛应用于家庭、商场、办公室等场所,使数字集成电路广泛应用于石英晶体振荡器中。
电子钟和手表与人们的日常生活、工作和学习有着密切的关系,但大多数的时钟只能靠近距离按下按钮来调节,远距调节时间并不容易。而且,它们具有单一的功能,不能显示室内湿度信息。没有闹钟功能。即使市场上的时钟有自动校正功能,但大多为收音机时钟,收音机信号相对较弱,白天很难接收到收音机信号。为了使时钟调试简单方便,功能齐全,价格低廉,人性化,适合更多领域,本文设计的是一种基于单片机和无线遥控器的数字电子时钟系统,本文设计的多功能电子时钟的功能有:1)具有LCD44彩色屏幕显示,美观大方,显示全面、直观;能显示年、月、日、秒、分、时、周、温、湿度、湿度等。2)通过GPS信号,定时准确,年时间误差小于3分钟。3)数字时钟可设置近地按钮、遥控器和闹钟,或红外遥控器可用于一个按钮C、PS校准、一个按钮1秒功能设置。内置充电3V电池Ca停电后短时间保持正常运行,来电后恢复显示。
在此基础上,设计开发了一种小型、轻量化、多功能的电子钟,它不仅具有目前市场上普通电子钟的时间显示调节功能,而且具有时间校准、生日提醒、太阳历、节气显示等功能,基于BAS单片机控制的IC原理,采用一种新型的高性能8051单片机STC12C5A60S2为核心,时钟电路采用DS1302时钟芯片构成,显示器采用12864液晶完成系统硬件设计,系统软件设计通过编写程序完成。物理设备的测试结果表明,系统运行良好,达到了预期的功能。适用于家庭、教室、营业厅等场合。数字电子钟的设计和制造可以通过数字电路或单片机来实现。如果用数字电路完成,所设计的电路相当复杂,需要十几块数字集成块。其功能主要取决于数字电路各功能模块的组合。焊接工艺复杂,成本高。如果用单片机来实现,由于其功能主要是通过软件编程来实现的,既降低了硬件电路的复杂度,又降低了成本。因此,STC12C5A60S22被用于本设计和制造中。时钟电路采用DS1302时钟芯片构成,显示器采用12864液晶完成系统硬件设计,系统软件设计通过编写程序完成。允许在系统中重写或编程。
1.2论电子钟的发展
电子钟又称数字显示钟,是利用数字电路技术实现时间、分、秒的一种装置。与机械钟相比,直觉是其主要的突出特点。由于非机械驱动,它比石英芯驱动的石英钟具有更长的使用寿命和更高的精度。电子钟已经成为人们日常生活中不可缺少的必需品。广泛应用于家庭、车站、码头、剧院、办公室等公共场所。它给人们的生活、学习、工作和娱乐带来了极大的方便。
与其他类型的钟表相比,它的特点可以概括为“两强一弱”:在观察上强于机械钟表,在走时上强于石英钟,但其弱点更为单调。电子钟更方便、快捷、实用
电子时钟功能:可选配24小时(小时)或12小时(小时)计时模式,显示时间、分、秒;具有快速校准时间、分、秒功能;可设置闹钟时间,闹钟时间为1分钟(分),超过1分钟(分)自动停止;具有手动报警停止功能,停止报警后无需再操作,不会发生报警;定时功能。随着科学技术的进步和发展,一些电子钟也有投影功能,同时派生出许多其他产品作为辅助功能。
电子钟是一种计时装置,在人类的视觉器官中显示“小时”、“分钟”和“秒”。其计时周期为24小时,全量表为23:59分59秒,具有计时和计时功能。因此,一个基本的数字时钟电路主要由解码显示、“时间”、“分”、“秒”计数器、定时电路、定时电路和振荡器组成。主电路系统由第二信号发生器、“时间、分、秒”计数器、解码器和显示器、时间校正电路和全点时间报告电路组成。第二信号发生器是整个系统基于时间的信号。它直接决定了定时系统的精度。一般由石英晶体振荡器和分频器实现。标准的第二个信号被送入“第二个计数器”。“秒计数器”使用一个60位计数器,每60秒发出一个“分钟脉冲”信号。该信号将被用作“分钟计数器”的时钟脉冲。“子计数器”还使用60位计数器,每60分钟发出一个“时间脉冲”信号,信号将被发送到“时间计数器”。“时间计数器”使用一个24位的计时器,可以一天24小时累积。解码显示电路利用七段显示解码器对“时间”、“分”、“秒”计数器的输出状态进行解码,并通过七段显示进行显示。全点定时电路根据定时系统的输出状态产生脉冲信号,触发音频发生器实现定时。定时电路用于检查和调整“时间”、“分”和“秒”的显示数字。
目前在我国,由于液晶数字显示的直接有效作用,电子钟主要应用于城市的主要商业场所以及车站、码头等公共场所。在公共场所设置电子钟时,用户还可以根据周围的气候和温度设置液晶显示屏。同时,由于LCD显示功耗很低,所以可以保持连续工作的效果。
晚上睡觉的时候,如果床头有一个具有投影功能的电子钟,不用起床就可以直接在天花板上显示时间,非常直观有效。
在现在生产的大多数汽车中,汽车的前仪表板通常在仪表板旁边有自己的电子钟功能。蓝色背景光板的图像效果非常清晰。
与传统的机械钟相比,电子钟具有更加突出的优点。随着数字集成电路和先进石英技术的发展,电子钟具有走时准确、性能稳定、携带方便等优点。电子钟广泛应用于自动报警、自动摇铃、自动时间程序控制、定时广播和自动控制等领域。
当然电子钟也存在缺点,由于毕竟电子钟是电子产品,电子产品有辐射,但是电子钟的危害是非常低的,它不会对人体造成任何伤害,不像手机的辐射。
第二部分 总体方案
2.1系统的设计思路
整个系统根据各部分的不同功能进行区分,主要由主控模块、时钟电路模块、接口模块等组成。
电源模块由四个模块组成;系统设计框图如图1所示。系统主控模块采用51系列STC12C5A60S2单片机作为主控芯片,性能优越;时钟模块使用一个高性能、低功耗、实时时钟DS1302的RAM达拉斯公司推出了美国,并使用专业的时钟芯片DS1302的时机,这不仅比使用单片机内部的定时器更准确,而且更重要的是可以使用DS1302。同时,DS1302可编程实现对备用电源的充电控制,使备用电源在运行过程中耗电量小。接口模块分为输出接口部分和键盘输入接口部分。LCD12864液晶显示器用于显示和输出接口部分,报警电路部分用于报警电路。蜂鸣器实现其功能,键盘输入部分选择独立键盘,比使用矩阵键盘控制更方便、简单。电源模块由220V交流电源供电,通过24V交流变压器降压、整流、滤波后送至集成稳压器芯片7805,使输出稳定可靠+ 5V电源供系统使用。系统设计框图如下:
图1:系统设计框图
2.2系统硬件描述
该电子钟以单片机STC12C5A60S2为核心。系统主控模块采用51系列STC12C5A60S2单片机作为主控芯片,性能优越。时钟模块采用高性能、低功耗、实时时钟DS1302 RAM Dallas公司在美国推出,并采用专业时钟芯片DS1302,这不仅比使用单片机内部的定时器要好。准确,更重要的是,DS1302可以使用。同时,DS1302可编程控制备用电源的充电,使备用电源在运行过程中功耗小。接口模块分为输出接口和键盘输入接口。液晶显示器用于显示和输出接口,报警电路用于报警电路。蜂鸣器实现其功能,键盘输入部分选择独立键盘,比使用矩阵键盘控制更方便、简单。电源模块采用220V交流电源供电。经24V交流变压器降压整流滤波后,送入集成稳压芯片7805,使输出稳定可靠+ 5V电源供系统使用。硬件电路采用P0口作为8位LED数码管的驱动接口。由于在比特选择中使用共阳数码管,使用1koh电阻驱动PNP三极管,允许0端口的输出连接任何组件,因此可以直接驱动LED发光。8根LED数码管翻两番,4根数码管连接在一起,降低了布线难度。Pl端口连接8个流型灯。当数码管运行时,会有很多变化。运行时间与流量灯同时运行,互不影响。利用AT24C08串行数据存储器,可以存储多组定时数据。断电重启后,仍可恢复原计时时间。没有必要重新安排时间。RD和WR用于写和读数据。采用MAX232串行接口,采用RXD和TXD串行收发器实现在线下载功能,省去了单片机程序插入和编写的麻烦。按钮S1-S4为定时功能和定时功能,分别与P3.2-P3.5连接。点击Sl进入计时状态,按第二次设置计时。S2为确认键,S3和S4分别为加减函数,S5为复位键。P1.7端口与蜂鸣器连接,实现定时报警功能。断电保护电路由继电器和3.6V断电保护组成。单片机断电后,继电器闭合,3.6V电源提供电压,使内部数据处于低功耗状态,无损耗,但无法驱动I/O口。
2.3系统软件描述
为了使系统能过正常的实现所有功能,除了设计出合理的硬件电路,还必须具有能在此硬件平台上实现预期功能的程序。本次我们运用Keil4软件和C语言进行 编程该系统的程序设计主要包括三个方面的内容:一是 DS1302 从单片机中读取数据进行计数时间阴历等程序设计;二是利用按键进行时间的调整及功能设置;三是数据显示程序设计。对此,首先,初始化:串口,外部中断,定时器0,时钟芯片,清除屏幕。然后判断当前内容由一个关键纠正,判断它是整个点(一次准时报警时间),然后判断是否打开闹钟,如是否有红外中断(外部中断0),如果有,接收,然后相应的键红外处理。如果不打开闹钟,则显示当前时间,如果没有检测到红外信号,则返回当前状态。电子钟的主要功能有时钟显示、月、日显示、定时、全日制闹钟等。系统开机后,首先执行各个模块的初始化指令,单片机判断是否按下设置键,如果不按下设置键,则根据初始化数据对初始化数据进行计时和显示;按下后进入修改时间模式,修改时间和日期,再按下设置键将修改后的数据传输到DS1302,同时进入闹钟设置模式。你可以设定闹钟。如果不再次设置设置键,可以返回到显示模式。在此期间,程序还会判断闹钟的时间和整个时间,如果满足,蜂鸣器会告诉时间。当遇到整个进位时间,也就是59秒加1进位分钟,59分钟加1进位小时,由P1 ^ 0连接的蜂鸣器会设置一个高电平,蜂鸣器会嗡嗡地报时。电子钟系统将报警时间设置为1秒,即1秒后,嗡嗡声报警关闭。
第三部分 硬件设计
3.1硬件芯片介绍
系统主控模块采用51系列STC12C5A60S2单片机作为主控芯片,性能优越;时钟模块使用一个高性能、低功耗、实时时钟DS1302的RAM达拉斯公司推出了美国,并使用专业的时钟芯片DS1302的时机,这不仅比使用单片机内部的定时器更准确,而且更重要的是可以使用DS1302。同时,DS1302可编程实现对备用电源的充电控制,使备用电源在运行过程中耗电量小。接口模块分为输出接口部分和键盘输入接口部分。LCD12864液晶显示器用于显示和输出接口部分,报警电路部分用于报警电路。蜂鸣器实现其功能,键盘输入部分选择独立键盘,比使用矩阵键盘控制更方便、简单。电源模块由220V交流电源供电,经24V交流变压器降压、整流、滤波后送入集成稳压器芯片7805,使输出稳定可靠+ 5V电源供系统使用。
下边是STC12C5A60S2单片机的介绍:
STC12C5A60S2/AD/PWM系列单片机是采用大晶体技术生产的单时钟/机循环(1T)单片机。它是新一代8051单片机,具有高速/低功耗/超强抗干扰能力。指令代码完全兼容传统8051,但速度快8-12倍。内置MAX810专用复位电路,2路PWM, 8路高速10位A/D转换(250K/S),用于电机控制,强干扰场合。
其特点如下:
(1)、增强8051 CPU, 1T,单时钟/机循环,指令代码完全兼容传统8051;
(2)、工作电压:STC12C5A60S2系列工作电压:5.5V-3.3V (5V单片机)STC12LE5A60S2系列工作电压:3.6V-2.2V (3V单片机);
(3)、工作频率范围:0-35MHz,相当于普通8051的0-420MHz;
(4)、 用户应用空间8K/16K/20K/32K/40K/48K/52K/60K/62K字节;
(5)、 片内集成1280字节RAM;
(6)、 通用I/O端口(36/40/44)可以重置为准双向/弱上拉(普通8051传统I/O端口)。可设置为准双向/弱上拉、推拉/强上拉、仅输入/高电阻和漏电四种模式。每个I/O口的驱动能力可以达到20ma,但整个芯片的最大驱动能力不能超过120ma。
(7)、ISP (in-system programmable)/IAP (in-system programmable)/IAP (in-application programmable),无需特殊编程人员,无需特殊模拟器即可通过串口(P3.0/P3.1)直接下载用户程序,只需几秒钟即可完成一件。
(8)、 EEPROM函数(STC12C5A62S2/AD/PWM无内部EEPROM);
(9)、内部集成MAX810专用复位电路(外部晶体低于12M时复位脚可直接对地1K电阻);
(10)、 外部断电检测电路:P4.6端口有低压阈值比较器。5V单片机的误差为1.32V,误差为(+5%),3.3V单片机的误差为1.30V,误差为(+3%)。
(11)、 时钟来源:外部高精度水晶/时钟,内部R/C振荡器(温度漂移为(+5% ~(+10%)1)下载用户程序时,用户可以选择使用内部R/C振荡器还是外部水晶/时钟。室温下,内部R/C振荡器频率为:5.0V单片机:11MHz-15.5MHz, 3.3V单片机:8MHz-12MHz。当精度要求不高时,用户可以选择使用内部R/C振荡器外部晶体/时钟。时钟,但由于制造误差和温度漂移,都是根据实际测试;
(12)、 有四个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2。然而,两个16位定时器可以实现使用一个独立的波特率发生器串行通信和两个PCA模块。
(13)、 两个时钟输出端口可以分别从P3.4/T0中的T0溢出和P3.5/T1中的T1溢出输出时钟。
(14)、 外部中断I/O端口7,传统的下降中断或低电平触发中断,新的PCA模块支持上升中断。断电模式可通过外部中断唤醒,INT0/P3.2、INT1/P3.3、T0/P3.4、T1/P3.5、RxD/P3.0、CCP 1.3(也可通过寄存器设置为P4.2)、CCP 1/P1.4(也可通过寄存器设置为P4.3);
(15)、 PWM(2路)/PCA(可编程计数器阵列,2路):
——它也可以用作双向D/ a
——它还可以用来实现另外两个定时器。
——它还可以用来实现两个外部中断(上升中断和下降中断都可以单独或同时支持)。
(16)、A/D转换,10位精度ADC,共8路,转换速度可达250K/S(每秒250000次),通用全双工异步串口(UART),由于STC12系列是高速8051,可重用定时器或PCA软件实现多个串口;
(17)、 STC12C5A60S2系列具有双串口,只有S2符号后缀的才具有双串口,RxD2/P1.2(可以通过寄存器设置为P4.2), TxD2/P1.3(可以通过寄存器设置为P4.3);
(18)、 工作温度范围:- 40 - +85℃(工业级)/ 0 - 75℃(工业级)21。包装:PDIP-40、LQFP-44、LQFP-48 I/O端口不够,可以使用2 ~ 3个普通I/O端口以外的74HC164/165/595(可级联)来扩展I/O端口,也可以使用A/D键扫描来保存I/O端口,或者使用双CPU、三线通信,也可以使用更多的串口。
STC12C5A60S2属于8051系列的单片机,把它拿来和51系列单片机作比较的话,有如下的几个特点:
a. 在相同的晶体振荡情况下,速度是一般51倍的8-12倍;
b. 有8个频道和10位ad;
c.另外两个带有PWM功能的定时器;
f. SPI接口;
e. eepm;
f. 1K内部扩展RAM;
g. WATCH_DOG;
h. 多一个串口;
i. IO端口可以定义为四种状态;
j. 中断优先级可以定义为四种状态;
3.2系统硬件结构
3.2.1主控制模块
主控模块芯片采用STC12C5A60S2/AD/PWM系列单片机,是采用大晶片技术生产的单时钟/机周(IT)单片机。这是新一代8051单片机,具有高速/低功耗/超强抗干扰能力。指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,具有2 PWM, 8高速10位A/D转换(250K/S,或250000次/秒),片内集成1280字节RAM, I/O口驱动能力可达20ma,特别适用于电机控制及强干扰场合。该模块电路的主要目的是设计单片机的最小系统。为了使STC12C5A60S2单片机正常工作,
这部分电路主要由复位电路和时钟电路组成;复位电路采用手动按键复位,时钟电路采用外部晶体振荡器电路,使用12mhz晶体振荡器和两个33pF电容,其中晶体振荡器起振荡作用,两个电容起解耦作用,共同构成系统的主控电路。
3.2.2时钟模块
时钟电路模块由DS1302时钟芯片组成。DS1302可以提供秒、分、小时、天、周、月和年的信息。AM/PM模式可以通过选择小时寄存器位来选择,即12小时或24小时系统。每月不足31天,可自动调整,具有闰年补偿功能。工作电压为2.5-5.5V宽。双电源(主、备用电源)
可设置备用电源充电模式,为后端电源提供滴流[6]充电的能力。
DS1302与单片机之间的数据通信采用串行方式。数据通过SPI三线接口进行控制和传输。芯片外部晶体振荡器电路采用32768Hz晶体振荡器。应特别注意保证外部晶体振荡器电路的正常工作。当外部晶体振荡器电路停止振荡时,DS1302的定时将停止。二是保证备用电源BT1能够长期供电。虽然DS1302在主电源关闭时耗电量很小,并且在主电源打开时可以对涓滴电流进行充电,但是如果时钟长时间正常运行,最好选择小型充电电池。在读取和写入每个程序之前,必须初始化DS1302。我们可以先将芯片的SCLK设置为“0”,然后再将芯片的SCLK设置为“0”。
将RST终端设为“1”,最后给出sck脉冲。初始化后,可以调整报警程序的调整时间和读写。
3.2.3电源模块设计
电子钟使用的各种电子设备都可以用5V电压供电,综合考虑,电源模块需要使用手机充电器的USB接口或其他USB接口供电5V。考虑到有些场合可能没有USB接口,增加了5V稳压电源电路,使供电系统可以直接使用220V交流电源,使供电系统可以直接使用220V交流电源。电子钟是一种可靠的电源。同时,在电源输入端增加了保险丝,大大提高了电路的可靠性。
3.2.4显示模块设计
本系统的显示部分采用12864液晶显示,12864液晶是一个128X64点阵图形液晶显示模块,可以显示汉字。系统与计算机的接口主要有8位并行和串行两种数据传输方式。由于并行数据传输速度相对较快,考虑到系统时钟变化需要及时显示在LCD上,所以采用STC12C5A60S2单片机的数据和并行接口。
阶段的传播。同时,系统采用蜂鸣器作为报警电路。当达到预设报警时间时,报警功能工作,即蜂鸣器发出声音。系统通过按键进入功能菜单界面,选择报警设置,可以同时设置四种不同的报警时间。设定闹钟时间后,将当前时钟时间与设定的闹钟时间进行连续比较。当报警时间不相等时,不会发生任何动作。一旦程序相等,程序将跳转到报警程序。此时单片机P1.4端口输出低电平,使蜂鸣器能够工作,从而实现报警功能。同时,工作时间、报警时间可通过调整按钮来设定。
键盘输入部分由四个独立按键实现。按键分别与单片机的P1.0、P1.1、P1.2、P1.3端口连接。分别对应功能选择键、B设置键、C时间日期调整键、D退出键和报警开关键的功能。
第四部分 软件设计
4.1主程序设计
首先,初始化:串口,外部中断,定时器0,时钟芯片,清除屏幕。然后判断当前内容由一个关键纠正,判断它是整个点(一次准时报警时间),然后判断是否打开闹钟,如是否有红外中断(外部中断0),如果有,接收,然后相应的键红外处理。如果不打开闹钟,则显示当前时间,如果没有检测到红外信号,则返回当前状态。
主程序流程图如下面的图2所示:
图2:主程序流程图
4.2主程序代码
部分主程序如下:
#include<reg51.h>
#define uchar unsigned char
#define unit unsigned int
extern delay(int n);
sbit sda = P3~7;//IIC总线数据线
sbit scl = P3~6;//IIC总线时钟线
//char i;
void clock()//I2C总线时钟
{
uchar i = 0;
scl = 1;
while ((sda == 1) && (i < 255))
i++;
scl = 0;
}
void x24c08_init()//24c08初始化子程序
{
scl = 1;
sda = 1;
}
void start()//启动I2C总线
{
sda = 1;
scl = 1;
sda = 0;
scl = 0;
}
void stop()//停止I2C总线
{
sda = 0;
scl = 1;
sda = 1;
}
void writechar(uchar j)//写一个字节
{
uchar i, temp;
temp = j;
for (i = 0; i < 8; i++)
{
if (temp & 0x80)
sda = 1;
else
sda = 0;
temp = temp << 1;
scl = 0;
}
scl = 0; sda = 1;
}
uchar readchar()//读一个字节
{
uchar i = 0;
uchar k = 0;
scl = 0;
sda = 1;
for (i = 0; i < 8; i++)
{
scl = 1;
k + (k << 1) | (char)(sds);//将sds类型强制转换;如果sda为1的话,j=1;否则j=0;
scl = 0;
}
return (k);
}
4.3 日历算法
4.3.1基本时间算法
设置4ms中断一次,即每秒250次。通过判断预定义的数据缓冲区单元的值,当该值达到250时,将第二个单元添加到一个单元,否则中断返回继续计数。判断第二单元时,只要第二单元达到60,则增加一个子单元,否则中断返回继续计数。然后判断子单元,只要子单元达到60,每小时增加一个,否则中断返回继续计数。然后判断小时单位。当小时单元达到24时,将天单元添加到1,否则中断返回继续计数。
4.3.2总天数算法
为了实现从公历到阴历的转换,必须计算出总天数。日历计算以2000年1月1日为起始年,总天数为第1天。在计算农历时,将1999年1月1日定义为起始年(即1999年2月16日,差值为319天),总天数为第2天=第1天+ 319天。要计算从2004年6月1日到今天的2000年1月1日的总天数,从内存单元中只显示10位和每年的个人信息,并从中减去0(00)。得到X1 = 04。提取月份信息X2 = 6-1 = 5。前五个月的天数可以计算为X2。日信息X3 = 1-1 = 0。我们还需要考虑闰年的年份和月份信息。如果有闰年,我们需要增加额外的天数。因此,总天数TOTLE= (X1*365+X11)+X2(每年基本相同,闰年与非闰年只差一天)+X3。如果M = 0是闰年,那么X11 = K。如果M_0表示不是闰年,那么X11 = K + 1。所以第一天会找到它。在本设计中,两个内存单元(高8位和低8位)预留给总存储天数。
4.3.3日历算法
公历算法与阴历基本相同,采用逐月递减法(每12个月向存储年份信息的单元内容添加1)。今年的信息加上“年初的信息”就是今年的信息。根据大农历的不同,月和日的信息得到不同的结果。设置两个身份,一个R1内存将减少到月号,一个R0存储当前年份的信息,当R1为12时,R0将添加1。R1为2时,判断此时R0中的年份信息是否为闰年。如果是闰年,则减少29天,反之亦然,减少28天。这个月剩下的时间减少了30和31。
4.3.4每周算法
有两种周算法。一是当每小时的信息达到24小时时,存储每周信息的内存单元将被添加1,满7到1,这样就可以以一个循环的方式获得一周中的哪一天。另一种算法是:[total days + initial value-1]/7余数,即当天的周信息,如表1所示。但该算法需要考虑除法的高8位借位问题。当低的8位不能被分割时,它需要借高的8位。此时,高8位减少1,低8位增加4,除以7(因为256/7大于4),同时判断高8位是否小于0。如果是这样,该司就完成了;如果不是,则继续该司,直到它确实不足为止。
4.3.5农历算法
农历算法基本上与公历相同,但也有按月递减的方法(这里是按日递减,如29天或30天)。要保存一年的信息,只需要三个信息:农历月、闰月、闰月和闰月的大小。两个相邻的内存单元用于存储此信息。
4.4 按键部分
键盘接口程序的功能实际上是驱动键盘并完成键盘识别。根据识别密钥的key值,完成子程序的正确传输,从而完成单片机应用系统对用户key动作的预定义响应。采用独立键盘的原因是每个键只占用一个I/O端口,每个键的工作不影响其他键。它可以根据每一行I/0的状态直接传输子程序,使程序更加简洁。在该程序中,按键是通过查询模式来判断的。按下按键,消除软件延时和抖动,避免抖动带来的干扰。同时,只有当钥匙松开时,才能判断其是否有效并被识别。最后,根据所识别的密钥转子程序对其进行处理(主要用于执行特定密钥的系统功能)。
4.5 显示部分
显示部分采用分时动态扫描方式点亮LED数码管,21个LED数码管和4个发光二极管需要分时照明。单片机串行输出,将数据同时传输给三个74LS164(一组三个LED灯),然后并行输出74LS164进行动态扫描。三片74LS164端头对端头,前164 Q7脚接后164 A、B输入脚。扫描一次需要向三个block 164发送三组数据,前八个循环发送最后一个block 164信息,中间八个循环发送中间的block 164信息,最后八个循环完成前排164信息的传输。此时,可通过单片机的PI口将相应按键LED驱动电路的三极管基低电平发送。每组led点亮后,会出现轻微的延迟(如80us延迟),然后立即关闭,解决剩余阴影问题。该电子钟显示采用单片机应用系统中最常用的动态扫描显示方法,因此将LED显示程序称为主程序的子程序。每个显示器扫描一次后,返回主程序,执行一些其他操作,然后调用显示器扫描程序。该程序主要通过反复调用来实现LED数字显示器的动态扫描。同时,采用定时器中断标记位的方法,并结合位的选择来控制跑马灯定时或定时运行时的闪烁。时间、分、秒由中断模式和软件解码(查表)组合显示。定时设置与存储:考虑到实用性,采用闪烁显示对电子钟定时进行修改或调整,可手动设置三组闹钟。该数据集可以存储在2AC08内存芯片中。该程序采用一种通用的算法来分配数据存储的特定地址。同时,将12C总线的起始信号、结束信号和时钟信号作为字节数据写入,并作为字节数据读取。在任何时候调用程序都很容易。将发送和接收应答比特的过程放入子程序中,可以简化程序结构。具体流程见流程图。报警比较:由于定义了三组定时闹钟,所以三组时间比较一次。比较后,检查报警标志是否为l,是否为1。为了避免钟对显示器的影响,采用定时脉冲驱动喇叭,不影响显示器。
第五部分 结论
5.1系统调试
5.1.1前期调试问题
焊接PCB板完成时,程序写进单片机,连接到电源,连接到电子时钟开关,一些问题出现在显示部分的代码部分C数码管不亮,和整个数码管的显示亮度是不够的。但它可以调节时间和定时功能。蜂鸣器是无声的;跑马电路正常;复位时间过长;断电保护电路存在问题;关机后无法节省时间。
5.2.2问题分析
(1)数码管C段代码不亮。可能是C段代码管引脚连接错误,或者C段二极管损坏。
(2)数码管亮度不足可能是由于程序冲突或驱动晶体管的连接电阻过大,导致电流过小。
(3)蜂鸣器是静音的,可能是因为驱动蜂鸣器的三极管管脚是等效的。
(4)复位时间长可能是因为复位电阻过大,导致RC时间常数过大,复位延时过大。
5.3.3解决的方法
为了解决以上问题,采用以下方法解决:
(1)数码管C段不亮,经检查,STC12C5A60S2 36尺出现虚焊现象,在36尺内用焊锡、填充垫,问题即可解决。
(2)首先,数字晶体管的亮度不够。用万用表检查驱动数字晶体管的位置选择晶体管。导电后,电压仍然是3V,所以驱动晶体管的电阻不是太大。通过对Ahe 4C08的文档分析,发现在存储时序数据时,程序的编写更加规范可能会影响显示效果。因此,取消时序比较程序的代码,使其处于中断状态,以便更定时地执行程序,就可以解决这个问题,并正确地显示出来。
(3)、蜂鸣器没有声音。经过反复检查蜂鸣器的引脚,没有连接。此时,我们考虑的共同问题,即三极管引脚的焊接。查看晶体管A1015PNP的数据手册,我们发现C和E引脚的连接是反向的。换针后,蜂鸣器准时鸣响。
(4)、复位时,按键时间可达复位前4秒左右。考虑到常见的问题是复位电阻过大,将电阻R6、R7从1000欧和10000欧调整到100欧和1000欧后复位正常。经过多次检查调试,初步调试中出现的问题全部解决。经过系统调试,该电子钟充分实现了时间显示、定时、定时和全时报警功能。
5.4.4计时误差分析
设计的电子钟和标准时钟的时间对比如下表所示。
通过上边表格显示的数据,我们可以计算出:在10分钟内绝对误差为0.17%,在20分钟内绝对误差计算得出为0.083%,30分钟内的绝对误差为0.11%。
所以我们可以看出误差很微小,这是由于我们使用了12 MHz的晶振,这样一来计时的准确度就会大大提高。