LED显示的电子钟要点
LED点阵显示电子钟系统

1绪论1.1 LED点阵显示电子钟的背景及意义在日常生活中,大家见到的都是数码管制作的电子钟,LED点阵时钟则不多见。
用单片机控制的LED点阵显示电子钟具有结构简单、性能可靠、成本低廉、价格便宜和显示灵活等优点,其应用前景广阔。
之所以使用LED点阵电子屏显示,是与它本身所具有的优点分不开的[1]。
这些优点概括起来就是:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。
在实际应用中的显示屏由于成本和可靠性的因素常采用一种动态扫描的显示方法。
本文设计的是一个室内用5块8×8点阵时钟显示屏,数字采用静止显示方式。
电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟走时更准确、性能更稳定。
由于用LED点阵显示数据,在夜晚或黑暗的场合里也可以使用,具有一定的实用性。
随着人们生活环境的不断改善和美化,在许多场合都可以看到LED点阵显示电子钟。
在城市的主要营业场所、车站、码头等公共场所使用LED数字电子钟已经成为一种时尚[2]。
1.2 设计任务及要求任务:利用AT89C52单片机结合LED点阵显示器设计一个电子小闹钟。
电子时钟将在5块8×8点阵显示屏上分别显示(小时十位)、(小时个位)、(:)、(分十位)、(分个位)。
时钟出现累积误差,可以人为手动进行修改。
修改时间的功能可以通过独立式按键来完成。
设计一种基于AT89C52单片机的LED点阵显示时钟,基本设计要求如下:(1) 电子钟的基本功能,也就是计时的功能,要保证电子钟的正常工作,正常计时。
(2) 电子钟要有一个可以快速调整时间的电路,以防有的时间不准时可以快速,高效,准确地调整电子钟的显示时间,由按键调整。
(3) 时钟的显示由LED点阵构成,格式为XX:XX(时:分),点阵为8×8点阵显示屏。
led数码显示电子钟.

LED数码显示电子钟一、产品说明数码显示电子钟电路,采用LM8560、CD4060和四位LED显示屏,通过驱动显示屏便能显示时、分。
振荡部分采用石英晶体振作时基信号源,从而保证了走时的精确。
该电路还供有定时报警功能,它定时调整方便,电路稳定可靠,能耗低。
该产品还具有定时报警功能。
它定时调整方便,电路稳定可靠。
本产品时钟显示采用12小时制,使用四个LED数码管显示时间,本产品由五个操作开关控制S1、S2、S3、S4、K1。
其输入电源为220V交流电源,经由变压器输出6V电压,安全环保。
适应于小型办公场地、书房、卧室的使用。
二、原理框图及程序流程图1.1原理框图1.2 程序流程图三、原理及参数该产品由220V交流电直接供电;由集成芯片LM8560与CD4060和四位LED显示屏实现时、分的显示;并具有闹钟功能;由蜂鸣器实现提示报警功能。
1、CD4060芯片工作电压范围宽在3V~15V,输入阻抗高,唯一现在使用的可能就是计数器,CD4060的计数器可以到14级二进制串行计数/ 分频器。
CD4060内部包含14位二分频器和一个振荡器,电路简洁,30720HZ的信号经分频后,得到50HZ的信号送到LM8560的25脚,并做秒信号经VT2、VT3驱动显示屏内的冒号闪动2.晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。
晶体振荡器是构成数字式时钟的核心,它保证了时钟的走时准确及稳定。
数字钟的精度主要取决于时间标准信号的频率及其稳定度。
晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。
该元件专为数字钟电路而设计,其频率较低,有利于减少分频器级数。
3、LM8560集成电路内含显示译码驱动电路、12/24小时选择电路及以其他各种设置报警等电路。
它具有较宽的工作电压范围(7.5-14V)和工作温度范围(-20℃+70℃);自身功耗很小,输出能直接驱动发光二极管显示屏。
电子时钟使用说明

电子时钟使用说明电子时钟是一种现代化的时钟,它采用了电子技术来进行时间计算和显示。
相比传统的机械时钟,电子时钟更加准确、精确,并且功能更加丰富。
下面将对电子时钟的使用进行详细的说明。
一、基本操作:1.插上电源:将电子时钟插入交流电源插座,并确保电压符合时钟的要求。
电子时钟会自动启动并进入待机状态。
2.设置时间:大多数电子时钟都有时间设置功能。
通常通过按下设置按钮(可能会标有"SET"或"MODE"等字样)来进入设置模式,然后使用加减按钮或者旋转按钮设置小时和分钟。
一旦设置完成,再次按下设置按钮退出设置模式,并开始正常工作。
3.调节亮度:电子时钟通常提供了亮度调节功能,以适应不同的环境需求。
通过按下亮度调节按钮(可能会标有"BRIGHT"或"B/L"等字样)来切换亮度档位,并选择最适合的亮度。
4.设置闹钟:大多数电子时钟还具备闹钟功能。
按下闹钟设置按钮(可能会标有"ALARM"或"A/L"等字样)进入闹钟设置模式,然后使用加减按钮或者旋转按钮设置闹钟的小时和分钟。
设置完成后,再次按下闹钟设置按钮退出设置模式,闹钟将会在设定的时间响起。
5.切换显示模式:一些电子时钟还提供了多种显示模式。
通过按下模式切换按钮(可能会标有"MODE"或"DISPLAY"等字样)来切换显示模式,可以切换显示时间、日期、温度等信息。
二、高级功能:1.温度显示:一些电子时钟具备温度检测功能,在屏幕上显示当前的室内温度。
通常使用室内温度感应器来检测温度,并在屏幕特定位置显示。
2.日历功能:一些电子时钟还具有日历功能,可以显示当前的日期,以及周几信息。
有些电子时钟还能显示农历日期和重要节日信息。
3.定时开关机:少数电子时钟还具备定时开关机功能。
用户可以事先设置好开关机的时间,电子时钟将在到达设定时间时自动开关机,非常方便。
电子制作-LED流动显示电子钟

电子制作:LED流动显示电子钟电子钟有:指针式、液晶式、LED式三种。
前两种在光线较暗时就看不清楚,后一种一般采用数码管显示,体积较大,多用于公共场所,不太适合家用。
为此,笔者设计制作了一款LED流动显示电子钟,体积小巧,字形美观,且每天有4次闹铃,每次定时时间一到,蜂鸣器响20s,非常实用。
本制作采用64只LED排列成8乘以8点阵,采用流动循环显示方式。
右图所示即是18:28时间的显示效果。
1.工作原理本制作的硬件电路如下图所示。
主控电路图118:28时间显示效果图是非常便宜的89C2051单片机,c5、R6组成它的上电复位电路,Yl、C6、C7组成它的时钟电路。
Pl口作数据总线用,LED点阵的列数据(1~8)由IC2锁存,单片机的P3、2端口输出锁存正脉冲。
LED的行扫描信号(A~H)由IC3锁存,单片机的P3、3端口输出正脉冲锁存信号,按键状态由IC1读取,单片机的P3、5端口输出负向读取脉冲。
外接5v电源(可用一般的市售稳压电源)由Xl输入,无电时由内置的4.5V电池维持IC4的继续工作,以防计时中断。
本制作的软件部分相对复杂,限于篇幅,此处仅介绍显示方法。
以显示2为例,首先IC2输出00001110,IC3输出01111111使A行为低电平,其余行都是高电平,略延时后,IC2再输出00010001,IC3输出10111111使B行为低电平,其他行都是高电平,依此类推,IC2轮流输出00010001、00000010、00000100、00001000、00010001、00011111,IC3轮流使C、D、E、F、G、H端为低电平。
在显示下一行前,IC3输出一次短暂的11111111信号关断显示(相当于消隐),以防上一行的残影叠加在下一行中。
如此循环即可显示一个静止的2。
LED电子钟使用说明书(ZXSJ-05L)

LED电子钟使用说明书(ZXSJ-05L)一、功能简介1、时分、月日、温度单项显示或三项交替显示。
2、12/24小时制可设定。
3、八组闹钟功能。
4、整点提醒功能。
5、停电继续走时。
6、亮度自动调整(22:00~7:00亮度减半)。
7、自动闰年调整(2000-2099年)。
8、自动测量温度(-9~50℃)。
二、操作说明1、按键名称:RESET(复位)、(设置/移动)、▲(上调)、▼(下调)、END(结束/止闹)。
2、开关名称:ALTER ON/OFF(交替显示开/关)、ALARM ON/OFF(闹铃开/关)。
3、指示灯名称:AM(上午)、PM(下午。
4、年月日小时分钟(日期和时间)设置:按设置键四位年份闪烁,按上调键或下调键修改年(年份四位数平时不显示或者说隐藏显示,只有在首次按设置键时借用四位数码闪烁显示,例如闪烁显示2009,表示2009年,此时按上调键或下调键可修改年份);再按设置键月闪烁,按上调键或下调键修改月;再按设置键日闪烁,按上调键或下调键修改日;再按设置键小时位闪烁,按上调键或下调键修改小时;再按设置键分钟位闪烁,按上调键或下调键修改分钟;按结束键回到正常显示状态。
5、12/24小时制设置:在正常显示状态下,按住上调键三秒,则可进行12小时制与24小时制的互相切换,12小时制有上午(AM)、下午(PM)指示灯指示。
6、整点提醒设置:在正常显示状态下,按一下上调键可以开启/关闭7:00~21:00整点提醒功能(整点指示灯亮/灭),22:00~6:00整点都不提醒。
7、定闹时间设置:在正常显示状态下,按定闹键进入闹铃时间查询(每组闹铃有不同音乐提示,若在时分位显示―∶――表示该组闹铃时间无效,否则有效,可按上调键切换成有效或无效),若要调整则按设置键音乐停止,再按设置键,小时位闪烁,按上调键或下调键修改小时,再按设置键分钟位闪烁,按上调键或下调键修改分钟;再按定闹键进入第二组闹铃时间查询和调整,方法与第一组相同;用同样方法可完成第三组至第八组闹铃时间的查询和调整;按结束键返回正常显示状态;若八组闹铃时间都无效,则闹铃指示灯不亮,否则闹铃指示灯亮。
LED数码管设计的可调式电子钟说明说

LED数码管设计的可调式电子钟说明说可调式电子钟的设计理念是提供用户多样化的时间显示和闹钟设定选项,以满足用户不同的需求和喜好。
以下是对设计的详细说明:1.数码管显示:LED数码管采用7段共阳极连接方式,每个数码管由7个LED灯组成,通过控制各个LED灯的点亮与否,可以显示0-9的数字。
数码管的显示仿真效果要清晰、鲜明,确保用户可以轻松辨认时间。
2.时间调节功能:可调式电子钟具备时间调节的功能,用户可以通过按钮或旋钮调整时间。
其中旋钮可以实现小时和分钟的调节,而按钮可以实现小时和分钟的增加或减少。
设计时需考虑人机交互的便利性,确保时间调节操作简单明了。
3.闹钟设定:可调式电子钟还具备闹钟功能,用户可以设定一个或多个闹钟时间点。
用户可以通过按钮或旋钮设置闹钟的小时和分钟,还可以设定是否重复响铃。
闹铃可以通过声音、震动或LED灯闪烁等方式提醒用户。
为了避免误操作,设计时需要考虑设置闹钟的过程,确保用户能够轻松设置闹钟。
4.电源供应:可调式电子钟可采用外部电源或内置电池供电。
设计时需考虑到电源的稳定性和可靠性,确保时钟长时间准确运行。
当外部电源断开时,内置电池可以提供备用电源,防止时间设置的丢失。
5.背光功能:可调式电子钟还可以考虑添加背光功能,在光线不好的情况下,用户可以通过按下按钮或通过传感器自动点亮背光。
背光的亮度可以根据用户偏好进行调节。
6.美观设计:除了功能性,可调式电子钟的外观设计也很重要。
设计时可以考虑采用简约设计风格,以及时尚的外壳材料。
同时,数字显示的对齐和间距,以及按钮和旋钮的位置、大小都需要细致推敲,确保整体外观美观大方。
总之,可调式电子钟的设计需要满足用户对时间显示和闹钟功能的需求。
通过合理的控制功能,人性化的设计以及简洁好看的外观,可为用户提供一台方便、易用的电子钟。
LED点阵显示电子钟设计

《单片机原理》课程设计说明书题目LED点阵显示电子钟设计系(部) 电子与通信工程专业(班级)姓名学号指导教师起止日期《单片机原理及应用》课程设计任务书15系(部):电信系专业:2010级电子信息工程指导教师:课程设计鉴定表目录1.系统总体方案选择与说明本方案基于AT89S52单片机设计的,还用到13块74HC573和1块74HC138芯片,8快8*8LED点阵,原理比较简单,但所有硬件成本较高,不适应商业用途。
一个是硬件结构的设计,一个是控制的总体思想。
在本小节中将对这两部分内容进行简单的叙述1.1硬件结构根据项目的功能和要求,可采用AT89S52单片机作为核心控制器。
LED点阵电子钟系统组成包括:显示电路模块、显示驱动电路模块、按键电路模块以及电源模块。
框图如图1.1所示。
1.2 控制思想LED点阵电子钟程序主要功能是屏幕显示时间稳定,精确。
所以按照分块设计的方法可以把程序分为主程序、显示程序、调整程序。
主程序主要是用来初始化系统和控制各个子程序之间执行的顺序。
显示程序用来完成数字在LED点阵上的显示,时钟的显示是使用8块8×8点阵显示屏。
2. 各单元硬件设计说明及计算方法74HC13874HC138 作用原理于高性能的存贮译码或要求传输延迟时间短的数据传输系统在高性能存贮器系统中,用这种译码器可以提高译码系统的效率。
将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间通常小于存贮器的典型存取时间,这就是说由肖特基钳位的系统译码器所引起的有效系统延迟可以忽略不计。
HC138 按照三位二进制输入码和赋能输入条件,从8 个输出端中译出一个低电平输出。
两个低电平有效的赋能输入端和一个高电平有效的赋能输入端减少了扩展所需要的外接门或倒相器,扩展成24 线译码器不需外接门;扩展成32 线译码器,只需要接一个外接倒相器。
在解调器应用中,赋能输入端可用作数据输入端。
74HC573八进制 3 态非反转透明锁存器138芯片主要用于控制573芯片的输入,以达到控制LED点阵显示的目的。
[整理]LED 电子钟 显示时间.
![[整理]LED 电子钟 显示时间.](https://img.taocdn.com/s3/m/cc91b2d9aeaad1f346933f7c.png)
《单片机技术》课程设计任务1、本课题任务如下:设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。
2、本课题要求如下:(1)在AT89S51的P0口和P2口外接由六个LED数码管(LED5~LED0)构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2.5~P2.0作LED的位控输出线(P2.5~P2.0对应于LED5~LED0),P1口外接四个按键A、B、C、D(对应于P1.0~P1.3)。
(2)、利用六个LED显示当前时间。
(3)、四个按键的功能:A键用于电子钟启动/调整;B键用于调时,范围0-23,0为24点,每按一次时加1;C键用于调分,范围0-59,0 为60分,每按一次分加1;D键用于调秒, 范围0-59,0为60秒,每按一次秒加1。
方案四: 独立式按键,LED动态显示。
该方案方框图如图1.2.4所示,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,因本系统用到的按键比较少,采用独立式键盘不会浪费I/O口线,所以本系统采用独立式键盘。
动态显示的亮度虽然不如静态显示,但其硬件电路较简单,可节省硬件成本,虽然动态扫描需占用CPU较多的时间,但本系统中的单片机没有很多实时测控任务,因此,本系统采用此种方案。
本设计中的电子钟的核心是AT89S51单片机,其内部带有4KB在线可编程Flash存储器的单片机,无须外扩程序存储器,硬件电路主要由四部分构成:时钟电路,复位电路,键盘以及显示电路。
时钟电路是电子表硬件电路的核心,没有时钟电路,电子表将无法正常工作计时。
本系统时钟电路采用的晶振的频率为12MHz,定时器采用的是定时器0工作在方式1定时,用于实现时、分、秒的计时,定时时间为62.5ms。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《单片机原理及其接口技术》课程设计报告课题LED显示的电子钟姓名周文学号************院系自动控制与机械工程学院班级电气1班指导教师冯维杰王玮2013 年7 月目录一、设计目的及要求 (1)二、系统设计 (1)三、硬件设计 (1)1、AT89C51 (2)2、LED数码管显示部分 (2)2、晶振部分 (3)4、按键部分 (3)四、软件设计 (4)1、protues软件 (4)2、流程图 (4)3、仿真结果 (6)五、总结与心得体会 (7)六、附录(C语言程序) (8)一、设计目的及要求1、设计题目:LED显示的电子钟2、设计任务:基于AT89C51单片机,制作一个LED显示的智能电子钟。
3、设计要求:(1)、用6个7段LED数码管作为显示设备,设计时钟功能。
(2)、显示格式,日期:YY MM DD,时间:HH MM SS.(3)、可以分别设计年、月、日,时、分、秒。
在复位后的日期应该为:12 01 01,时间为:00 00 00。
(4)、秒钟复位功能,当秒位键按下后,秒的那位回到00 。
(5)、键盘按键个数应该万为己确定。
(6)、@时间、月、日自行交替显示,或者按键切换显示。
二、系统设计设计中采用AT89C51芯片及LED显示器,一些独立式按键构成一个简单的数字电子钟。
设计中是采用单片机的内部定时器进行定时,程序框图如图2.1所示:图2.1系统框图整个电子钟的工作原理是:在正常的供电状态下,首先利用单片机定时,到了相应的时间由单片机将所需要显示的数据送到LED显示器的输入口,当有键按下时则进入相应的按键显示和调整状态,进行按键调整。
三、硬件设计:硬件设计是指应用系统的电路设计,包括单片机芯片、控制电路、存储器、I/O接口等等。
硬件设计时,应考虑留有充分余量,电路设计力求无误,因为在系统调试中不易修改硬件结构。
如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示部分、电源部分、晶振部分、按键部分等组成。
1、单片机最小系统——AT89C51.AT89C51是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
时钟电路由一个12MHZ的石英晶体振荡器和两个22pF的的电容组成振荡电路和分频电路,为单片机提供内部时钟。
复位电路采用上电复位和按键复位结合的方式对电路进行复位,主要是通过RST引脚送入单片机。
如图3. 1:图3.1 89C51单片机图2、 LED数码管显示模块本系统利用6位LED数码管显示时间,共阴极结构。
LED数码管由7段发光二极管组成,当要显示某个数字时只要将数字所对应的引脚送入低电平。
图3.2 LED数码管的数值表及其引脚图3、晶振模块:下图所示为时钟电路原理图,在AT89S51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
图3.3 晶振部分电路图4、按键模块:本设计中主要有8 个控制按键,按键功能为:(1)、P1.0键位为秒复位键,当使用时,使秒所显示数据复位。
回到0 0;(2)、P1.1键位为分钟加“1”;(3)、P1.2键位为小时加“1”;(4)、P1.3键位为切换日期和时间;(5)、P1.4键位为天数加“1”;(6)、P1.5键位月份加“1”;(7)、P1.6键位为年份加“1”;(8)、P1.7为清零开关,当功能切换为日期显示时,P1.7键位为日期复位。
图3.4 独立按键部分电路图四、软件设计:1、Protues软件的介绍:Proteus 软件所提供了30多个元件库,数千种元件。
元件涉及到数字和模拟、交流和直流等。
在Proteus软件包中,不存在同类仪表使用数量的问题。
Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似但功能更多。
提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。
具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
在protues绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在protues 的原理图中看到模拟的实物运行状态和过程。
用Protues软件进行仿真,其仿真的电路图如图4.1所示仿真设计图如下:图4.2 .1 仿真电路图2、程序设计流程图根据所编写的C语言程序,画出如下所示的流程图,程序按照流程图的步骤运行。
图4.2.1 主程序流程图图4.2.2时间处理子程序图图4.23键盘扫描程序流程图3、软件仿真结果经过仿真,得到要求中的结果,如图所示:图4.3.1清零结果图图4.3.2日期复位结果图图4.3.3秒复位结果图五、设计总结我们电气工程机自动化专业的学生学习单片机原理及接口技术课程,配套的开设课程设计。
我们三个班的同学在一起进行了一次单片机的课程设计的实训,实训的时间为一个周,在这个周的实训中,我们通过本课程设计明白了这样的课程是培养学生的主专业课,是培养现代化人才的重要技术之一。
单片机的课程设计是学习单片机理论的重要实践环节,在单片机的实验课程基础上,我们通过课程的设计和学习,使我们增进对单片机的感性认识,加深对单片机理论的的理解,使我们掌握单片机的内部功能模块的应用,掌握单片机的接口功能和扩展的应用,掌握一些特殊器件的使用方法,学习编辑综合的程序。
使我们了解和掌握单片机应用系统的硬件和软件的设计的方法和调试的过程。
充分发挥我们的主观能动性,更好的激发了我们的学习激情和学习的兴趣。
这次试训培养了我们大学生能主动利用芯片解决工程上实际的问题的意识,培养了我们的工程实践能力、实际动手能力和自我学习的能力。
使我们为完成从实际项目立题、调研、方案论证、方案实施、系统的调试、编写使用说明书等调研过程的基本训练,为今后在相关的领域中从事和单片机有关的设计、开发、应用等工作打下扎实的基础。
六、附录用C语言编写的程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*/uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,/*定义并初始化变量*/0x80,0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};uchar second=0;uchar minute=0;uchar hour=0;uchar mstcnt=0;uchar mon=1;uchar day=1;uchar year=12;int disp=0;int a=0,k1num;sbit P10=P1^0; // second调整定义sbit P11=P1^1; //minite调整定义sbit P12=P1^2; //hour调整定义sbit P13=P1^3; //年月日与时分秒转换sbit P14=P1^4;sbit P15=P1^5;sbit P16=P1^6;sbit P17=P1^7;/*函数声明*/void delay(uchar k ); //延时子程序void time_pro( ); //时间处理子程序void display( ); //时分秒显示子程序void display1( ); //年月日显示子程序void keyscan( ); //键盘扫描子程序/*****************************//*延时子程序*//****************************/void delay (uchar k){uchar j;while((k--)!=0){for(j=0;j<125;j++){;}}}/**************************//*时间处理子程序*//**************************/void time_pro( void){if(second==60) //秒钟设为进制 {second=0;minute++;if( minute==60) //分钟设为进制 {minute=0;hour++;if(hour==24) //时钟设为进制 {hour=0;// switch(mon)// {//// case 3:// case 5:// case 7:// case 8:// case 10:// case 12:// case 1:if(day == 30){day=1;mon++;// }// break;// case 2:// if(day ==31)// {// day=1;// mon++;// }// break;/* case 4:if(day == 31){day=1;mon++;}break;// case 6:// case 9:// case 11://if(mon==13){mon=1;year++;if(year>=99){year=1;}}}}}}}/*****************************//* 时分秒显示子程序*//*****************************/void display(void){P2=0xfe;P0=dispcode[hour/10]; //显示小时的十位 delay(4);P2=0xfd;P0=(dispcode[(hour%10)])|0X80; //显示小时的个位 delay(4);P2=0xfb;P0=dispcode[minute/10]; //显示分的十位 delay(4);P2=0xf7;P0=(dispcode[minute%10])|0X80; //显示分的个位 delay(4);P2=0xef;P0=dispcode[second/10]; //显示秒的十位P2=0xdf;P0=dispcode[second%10]; //显示秒的个位 delay(4);}/*年月日显示程序*/void display1(void){P2=0xfe;P0=dispcode[year/10];delay(4);P2=0xfd;P0=(dispcode[(year%10)])|0X80;delay(4);P2=0xfb;P0=dispcode[mon/10];delay(4);P2=0xf7;P0=(dispcode[mon%10])|0X80;delay(4);P2=0xef;P0=dispcode[day/10];delay(4);P2=0xdf;P0=dispcode[day%10];delay(4);}/*******************************//*键盘扫描子程序*//*******************************/void keyscan (void){if(P10==0) //按键秒的调整{delay(30);k1num++;if(P10==0)if(k1num==0){if(second==60){second=0;}}if(k1num==1){second=0;k1num=0;}}while(P10==0)display();}if(P11==0) //按键分的调整 {delay(30);if(P11==0){minute++;if(minute==60){minute=0;}}while(P11==0)display();}if(P12==0) //按键小时的调整 {delay(30);if(P12==0)if(hour==24){hour=0;}}while(P12==0)display();}if(P13==0) //年月日与时分秒的转换 {delay(30);if(P13==0){disp=! disp;}while(P13==0)display();}if(P14==0){delay(30);if(P14==0){day++;if(day==31){day=1;}}while(P14==0)display1();}if(P15==0)delay(30);if(P15==0){mon++;if(mon==13){mon=1;}}while(P15==0)display1();}if(P16==0){delay(30);if(P16==0){year++;if(year==100){year=1;}}while(P16==0)display1();}if(P17==0){delay(30);if(P17==0){second=0;minute=0;hour=0;day=01;mon=01;year=12;}}}void timer0(void) interrupt 1 using 0 //定时器方式,ms中断一次TH0=0x3c;TMOD = 0x11;mstcnt++;if(mstcnt==20){second++;mstcnt=0;}}/**************************//*主函数*//**************************/void main(void){ P1=0xff; //初始化p1口,全设为TMOD = 0x11; //time0为定时器,方式TH0=0x3c; //预置计数初值TL0=0xb0;EA=1;ET0=1;TR0=1;while (1){keyscan( ); //按键扫描time_pro( ); //时间处理if(disp)display1( ); //显示时间elsedisplay( );}}。