用单片机设计一个时钟,可显示时和分,可以调时间,也要有闹钟功能,要有设计的电路图

作者&投稿:堂鹏 (若有异议请与网页底部的电邮联系)
51单片机制作一个具有闹钟功能的24小时的电子钟,利用按键可以调整时间。~

有一个4*4矩阵键盘的时钟:

我有,自己设计的,怎么给你啊!

键位说明 : 一排 ZT 正点报时切换键 FUN 扩展功能键 JDQ 继电器测试 FM蜂鸣器测试
二排 NT 闹铃功能键 TSET 时间功能键 +++ 加一 --- 减一




1:按下开关键,时钟初始化,显示问候语,然后显示日期、时间、星期(英文显示)和当前实时温度。

2:当用电池时候,按下SWITCH开关,保证电源指示灯熄灭状态。(没有电池时候,电源指示灯可以亮可以灭)。

注意:当电池安装时,确保指示灯熄灭,要不然电池和外电源同时存在时,外电源将会向电池充电,产生危险。

3:整点报时功能,午夜凌晨短笛6声。其余时间按12进制报时(即2点响两声,14点也响两声)
按键ZT切换正点报时,按下短鸣2声报时(报时),短鸣叫3声不报时(不报时)。默认情况下正点报时。

4:长按TSET键调整时间,日期.长按NT健设置闹铃。。闹铃前面显示y或者Y时,闹铃开。显示n时,闹铃关。

(显示y时 ,闹铃半分钟后自动停止鸣叫。显示Y时,闹铃一个小时后停止鸣叫。)

5:闹铃响铃时可以由按+-键取消。不取消情况下闹铃半分钟或者一个小时。

6:掉电时间保持功能。掉电后,日期和时间可以保持50年不变!

7: 闹铃响时,继电器闭合动作,指示灯亮,按键+++或者--- 取消继电器动作。(可用作外接扩展)。

8:FUN 扩展功能键。

其实不用定时中断也能实现功能:
#include<reg51.h> 主函数
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};定义0-9数组
unsigned int tmp;定义变量
void delay(unsigned int xms)定义延时函数
{unsigned int j,i;
for(i=0;i<xms;i++)
for(j=0;j<100;j++);
}
void disp()定义子函数
{
P1=tmp;
delay(1);
P2=0xff;
tmp=tmp<<1;
}
void main( )
{

unsigned char z,s=00,m=00,h=00;给时钟初始值
while(1)
{
for(z=0;z<100;z++)
{
tmp=0x01;
P2=tab[h/10];小时显示

disp();
P2=tab[h%10];

disp();
P2=tab[m/10];分钟显示

disp();
P2=tab[m%10];

disp();
P2=tab[s/10];秒显示

disp();
P2=tab[s%10];

disp();

}
s++;
while(s==60)秒进一位,到60清0
{
m++;
s=00;
}
while(m==60)分钟进一位,到60清0

{
h++;
m=00;
}
while(h==24)小时进一位,到24清0
{
h=00;
}

}

}

转:
本题给出基于单片机的数字中的设计,设计由单片机作为核心控制器,通过频率计数实现计时功能,将实时时间经由单片机输出到显示设备——数码管上显示出来,并通过键盘来实现启动、停止、复位和调整时间的功能。
关键词: 单片机、数字钟、AT89S52、LED
1 引言
在单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到了广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。单片机小的系统结构几乎是所有具有可编程硬件的一个缩影,可谓是“麻雀虽小,五脏俱全”。
现在是一个知识爆炸的新时代。新产品、新技术层出不穷,电子技术的发展更是日新月异。可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们一旦遇到重要的事情而忘记了时间,这将会带来很大的损失,因此我们需要一个计时系统来提醒这些忙碌的人。 然而,随着科技的发展和社会的进步,人们对时钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能数字钟不管在性能上还是在样式上都发生了质的变化,如电子闹钟、数字闹钟等等。 单片机在多功能数字钟中的应用已是非常普遍的,基于单片机的数字钟给人们带来了极大的方便。
现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。本文利用单片机实现数字时钟计时功能的主要内容,其中AT89S52是核心元件同时采用数码管动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。
2 方案论证
2.1 方案一
数字钟采用FPGA作为主控制器。由于FPGA具有强大的资源,使用方便灵活,易于进行功能扩展,特别是结合了EDA,可以达到很高的效率。此方案逻辑虽然简单一点,但是一块FPGA的价格很高,对于做电子钟来说有一点浪费,而且FPGA比较难掌握,本设计中不作过多研究,也不采用此方案。
2.2 方案二
数字钟由几种逻辑功能不同的CMOS数字集成电路构成,共使用了10片数字集成电路,其原理图如图2.1所示。它是由秒信号发生器(时基电路)、小时分钟计数器及译码和驱动显示电路3部分组成,其基本工作过程是:时基电路产生精确周期的脉冲信号,经过分频器作用给后面的计数器输送1HZ的秒信号,最后由计数器及驱动显示单元按位驱动数码管时间显示,但是这样设计的电路比较复杂,使用也不灵活,而且价格比较高,故不采用此方案。

图2.1 方案二原理示意图

2.3 方案三
AT89S52是一种低功耗、高性能CMOS 8位微控制器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。它具有串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
基于AT89S52单片机来实现系统的控制,外围电路比较简单,成本比较低,此系统控制灵活能很好地满足本课题的基本要求和扩展要求,因此选用该方案。其硬件框图如图2.2所示,原理图见附录图6.1。

图2.2 数字钟硬件框图

2.4 电路组成及工作原理
本文数字时钟设计原理主要利用AT89S52单片机,由单片机的P0口控制数码管的位显示,P2口控制数码管的段显示,P1口与按键相接用于时间的校正。在设计中引入220V交流电经过整流、滤波后产生+5V电压,用于给单片机及显示电路提供工作电压。
整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。显示电路将“时”、“分”、“秒”计数器的输出,通过六个七段LED显示器显示出来。校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。在本设计中,24小时时钟显示、秒表的设计和显示都是依靠单片机中的定时器完成。使用定时器T0产生1s的中断,在中断程序中完成每一秒数字的变化,并在主程序中动态显示该字符。其功能框图如图2.3所示。

图2.3 秒表外中断的功能示意图

数字钟的电路设计主要功能是提供单片机和外部的LED显示、273地址锁存和片选以及外部存储器2764的接口电路,此外还需要设计相关的LED驱动电路。
(1)电路原理和器件选择
本实例相关的关键部分的器件名称及其在数字钟电路中的主要功能:
89S52:单片机,控制LED的数据显示。
LED1--LED6:用于显示单片机的数据,其中三个采用7段显示用于显示时、分、秒的十位,另三个采用8段显示用于显示时、分、秒的个位。
74LS273:锁存器,LED显示扩展电路中的段码和位码使用了两片74LS273,上升沿锁存。
74LS02:与非门,与单片机的读写信号一起使用,选中外部的74LS273,决定LED的字段和字位的显示内容。
7407:驱动门电路,提供数码管显示的驱动电流。
74LS04:非门,对单片机的片选信号取反,并和读写信号一起使用,决定74LS273的片选。
L1--L4:发光二极管,通过单片机的P1.4--P1.7控制,用以显示秒表和时钟的时间变化。
BUZZER:扬声器,在程序规定的情况下,发出声音,提示计时完毕。
74LS373:地址锁存器,将P0口的地址和数据分开,分别输入到2764的数据和地址端口。
2764:EPROM,为单片机提供外部的程序存储区。
开关K0、K1、K2分别调整秒、分、时。
按键RESET:在复位电路中,起到程序复位的作用。
按键PULSE:提供单脉冲,从而实现单片机对外部脉冲的计数功能,利用单脉冲实现相应位加1。
(2)地址分配和连接
P2.7:和写信号一起组成字位口的片选信号,字位口的对应地址位8000H
P2.6:和写信号一起组成字段口的片选信号,字段口的对应地址位4000H
D0--D7:单片机的数据总线,LED显示的内容通过D0--D7数据线从单片机传送到LED
P2.0--P2.5:单片机的P2口,和2764的高端地址线相连,决定2764中的存储单元的地址。
P1.4--P1.7:单片机的P1口,和反光二极管L1--L4相连,通过单片机的P1.4--P1.7控制,用以显示秒表和时钟的时间变化。
(3)功能简介
LED显示模块与单片机的连接中,对LED显示模块的读写和字位、字段通道的选择是通过单片机的P2.6、P2.7口完成。其中,P2.6、P2.7口的片选信号需要和读写信号做一定的逻辑操作,以保证字位和字段选择的正确性。
外部存储器2764是通过74LS373和单片机相连,并且通过P2口的相关信号线进行地址的分配。地址范围为0000H--1FFFH。
3 各电路设计和论证
3.1电源电路设计
在各种电子设备中,直流稳压电源是必不可少的组成部分,它不仅为系统提供多路电压源,还直接影响到系统的技术指标和抗干扰性能。要想得到我们所要的+5V输出电压,就需将交流220V的电压经过二极管全波整流、电容滤波、7805稳压输出稳定的5V直流电压为整个电路提供电源。

图3.1 电源电路图
4个IN4004组成桥式整流电路,电容(104uf)用于滤波,LM7805将经过整流滤波的电压稳定在5V输出。
3.2 晶体振荡器
51系列单片机内部有一个时钟电路(其核心时一个反相放大器),但并没有形成时钟的振荡信号,因此必须外接谐振器才能形成振荡。如何用这个内部放大器,可以根据不同的场合做出不同的选择。这样就对应了单片机时钟产生的不同方式:若采用这个放大器,产生振荡即为内部方式;若采用外部振荡输入,即为外部方式。
方案一、内部方式
如果在51单片机的XTAL1和XTAL2引脚之间外接晶体谐振器,便会产生自激振荡,即可在内部产生与外加晶体同频率的振荡时钟。
最常见的内部方式振荡图如图3.2所示。

图3.2 晶体振荡电路

不同单片机最高工作频率不一样,如AT89C51的最高工作频率为24MHZ,AT89S51的最高工作频率可达33MHZ。由于制造工艺的改进,现在单片机的工作频率范围正向两端延伸,可达40MHZ以上。振荡频率越高表示单片机运行的速度越快,但同时对存储器的速度和印刷电路板的要求也就越高。频率太高有时反而会导致程序不好编写(如延时程序)。一般来说,不建议使用很高频率的晶体振荡器。51系列的单片机应用系统一般都选用频率为6~12MHZ的晶振。
这个电路对C1、C2的值没有严格的要求,但电容的大小多少会影响振荡器的稳定性、振荡器频率的高低、起振的快速性等。一般外接晶体时,C1、C2的值通常选为20~100PF。
晶体振荡器是数字钟的核心。振荡器的稳定度和频率的精确度决定了数字钟计时的准确程度,通常采用石英晶体构成振荡器电路。一般说来,振荡器的频率越高,计时的精度也就越高。在此设计中,信号源提供1HZ秒脉冲,它是采用晶体分频得到的。AT89S52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分别是放大器的输入、输出端。石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。从外部时钟源驱动器件,XTAL2可以不接,而从XTAL1接入,由于外部时钟信号经过二分频触发后作为外部时钟电路输入的,所以对外部时钟信号的占空比没有其它要求,最长低电平持续时间和最少高电平持续时间等还是要符合要求的。反相放大器的输入端为XTAL1,输出端为XTAL2,两端连接石英晶体及两个电容形成稳定的自激振荡器。电容通常取30PF左右。振荡频率范围是1.2~12MHz。
晶体振荡器的振荡信号从XTAL2端输出到片内的时钟发生器上。时钟发生器为二分频器。向CPU提供两相时钟信号P1和P2。每个时钟周期有两个节拍(相)P1和P2,CPU就以两相时钟P1和P2为基本节拍指挥AT89S52单片机各部件协调工作。在本次设计中取石英晶体的振荡频率为11.0592MHz。
另外在设计电路板时,晶振、电容等均应尽量靠近单片机芯片,以减小分布电容,进一步保证振荡器的稳定性。
方案二、外部方式
在较大规模的应用系统中可能会用到多个单片机,为保证各单片机之间时钟信号的同步,应当引入唯一的公用外部脉冲信号作为各单片机的共同的振荡脉冲,也就是要采用外部方式,外部振荡信号直接引入XTAL1和XTAL2引脚。
由于HMOS、CHMOS单片机内部时钟进入的引脚不同,因此外部振荡信号的接入方式也不一样。所以不选用此方案。
3.3 校时电路
当数字钟走时出现误差时,需要校正时间。校时控制电路实现对“秒”、“分”、“时”的校准。其电路图如图3.3所示:

图3.3 校时电路
3.4 译码显示电路
译码电路的功能是将“秒”、“分”、“时” 计数器中每个计数器的输出状态(8421码),翻译成七段(或八段)数码管能显示十进制数所要求的电信号,然后再经数码管把相应的数字显示出来。译码器采用74LS248译码/驱动器。显示器采用七段共阴极数码管。显示部分是整个电子时钟最为重要的部分,共需要6位LED显示器。采用动态显示方式,所谓动态显示方式是时间数字在LED上一个一个逐个显示,它是通过位选端控制在哪个LED上显示数字,由于这些LED数字显示之间的时间非常的短,使的人眼看来它们是一起显示时间数字的,并且动态显示方式所用的接口少,节省了CPU的管脚。由于端口的问题以及动态显示方式的优越性,在此设计的连接方式上采用共阴级接法。显示器LED有段选和位选两个端口,首先说段选端,它由LED八个端口构成,通过对这八个端口输入的不同的二进制数据使得它的时间显示也不同,从而可以得到我们所要的时间显示和温度。但对于二十个管脚的AT89S52来说,LED八个段选管脚太多,于是我选用2764芯片来扩展主芯片的管脚,74LS164是数据移位寄存器,还选用了74LS373作为数据缓存器。
选用器件时应注意译码器和显示器的匹配,包括两个方面:一是功率匹配,即驱动功率要足够大。因为数码管工作电流较大,应选用驱动电流较大的译码器或OC输出译码器。二是逻辑电平匹配。例如,共阴极型的LED数码管采用高电平有效的译码器。推荐使用的显示译码器有74LS48、74LS49、CC4511。
3.5 显示电路结构及原理
(1)单片机中通常用七段LED构成 “8” 字型结构,另外,还有一个小数点发光二极管以显示小数位!这种显示器有共阴和共阳两种!发光二极管的阳极连在一起的(公共端)称为共阳极显示器,阴极连在一起的称为共阴极显示器。
一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划,另一个发光二极管为小数点为。当在某段发光二极管上施加一定的正向电压时,该段笔画即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。
在本设计中时、分、秒的十位采用七段显示,个位采用八段显示,使得更易于区分时、分、秒。
(2)LED显示器接口及显示方式
LED显示器有静态显示方式和动态显示方式两种。静态显示就是当显示器显示某个字符时,相应的段恒定的导通或截止,直到显示另一个字符为止。LED显示器工作于静态显示方式时,各位的共阴极接地;若为共阳极则接+5V电源。每位的段选线分别与一个8位锁存器的输出口相连,显示器中的各位相互独立,而且各位的显示字符一经确定,相应锁存的输出将维持不变。
正因为如此,静态显示器的亮度较高。这种显示方式编程容易,管理也较简单,但占用I/O口线资源较多。因此,在显示位数较多的情况下,一般都采用动态显示方式。
由于所有6位段皆由一个I/O口控制,因此,在每一瞬间,6位LED会显示相同的字符。要想每位显示不同的字符,就必须采用扫描方法流点亮各位LED,即在每一瞬间只使某一位显示字符。在此瞬间,段选控制I/O口输出相应字符段选码(字型码),而位选则控制I/O口在该显示位送入选通电平(因为LED为共阴,故应送低电平),以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。
在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制。而共阴(共阳)极公共端分别由相应的I/O口线控制,实现各位的分时选通。
段选码,位选码每送入一次后延时2MS,因人的视觉暂留效应,给人看上去每个数码管总在亮。

图3.4 六位LED动态显示电路
3.6 键盘部分
它是整个系统中最简单的部分,根据功能要求,本系统共需三个按键:分别对时、分、秒进行控制。并采用独立式按键。
按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低后者寿命长。目前,微机系统中最常见的是触点式开关按键。
按键按照接口原理可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。
全编码键盘能够由硬件逻辑自动提供与键对应的编码,此外,一般还具有去抖动和多键、窜键保护电路。这种键盘使用方便,但需要较多的硬件,价格较贵,一般的单片机应用系统较少采用。非编码键盘只简单地提供行和列的矩阵,其它工作均由软件完成。由于其经济实用,较多地应用于单片机系统中。在本套设计中由于只需要几个功能键,此时,可采用独立式按键结构。
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图3.5 所示。
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。

图3.5 独立式按键结构图
3.7 复位电路
复位时使CPU和系统中的其他功能部件都处于一个确定的初始状态,复位后计算机就从这个状态开始工作。在复位期间,CPU并没有开始执行程序,是在做准备工作。
无论时在计算机刚上电时、断电后、还是系统出现故障时都需要复位。
51单片机的复位条件靠外部电路实现。当时钟电路工作时,只要在单片机的RESET引脚上持续出现2个TP以上的高电平就可以使单片机复位。但时间过短往往使复位部可靠。为了确保复位,RESET引脚上的高电平一般要维持大约10ms以上。
常见的复位电路有上电复位和按键复位电路。在此我们选用按键复位电路。
(1)上电复位电路
上电复位电路是利用电容充电来实现的。在接通电源的瞬间,RESET端的电位与VCC相同,都是+5V。随着RC电路的充电,RESET的电位逐渐下降,只要保证RESET为高电平的时间大于10ms就能正常复位了。如图3.6(1)所示。

图3.6(1)上电复位电路
(2)按键复位电路
在单片机已经通电的情况下,只需要按下图3.6(2)的K键也可以复位,此时VCC经过电阻Rs、Rk分压,在RESET端产生一个复位高电平。
在图3.6(2)的电路中,干扰容易窜入复位端,虽然在大多数情况下不会造成单片机的错误复位,但可能会引起内部某些寄存器的错误复位。这时可在RESET端接上一个去耦电容。
另外有些单片机应用系统中的外围芯片也需要复位,如果这些复位端的复位电平要求和单片机的复位要求一致,则可以直接与之相连。常将RC电路接施密特电路后再接入单片机的复位端。这样系统可以有多个复位端,以便保证外部芯片和单片机可靠地同步复位。

图3.6(2) 按键复位电路
4 软件设计
4.1 程序流程
程序整体设计:定时模块,显示模块,时间调整模块,状态调整模块。
(1)总体介绍:此部分主要介绍定时模块,和显示模块。定时部分采用经典的定时器定时。它实现了数字钟的主要部分和秒表的主要部分,以及进行定时设置。显示模块是实现数字钟的又一重要部分,其模块的独立程度直接影响到数字钟的可视化程度。在此部分的设计中,设置专用显示数据缓冲区,与分、时及其他数据缓冲区数据区别,在其中存放的是显示段码,而其他缓冲区存放的是时间数据。在显示时,首先将时间十进制数据转化为显示段码,然后送往数码管显示。显示段码采用动态扫描的方式。在要求改变显示数据的类别时,只须改变指向数据缓冲区的指针所指向的十进制数据缓冲区即可。
(2)时间调整:时间调整有多种方式。一、可以直接进入相关状态进行有关操作,二、将调整分两步,先进入状态,然后执行操作,这两步分别由两个键控制。方式一,比较直接,设计思想也比较简单,但是,这种方式存在操作时间和控制键数目的矛盾。如果用比较少的键,那么可能会在进入状态后处于数据调整等待状态,这样会影响到显示的扫描速度(显示部分可以采用8279芯片来控制,可以解决此问题)。 当然在这种方式下,还可以使用多个状态键,每个状态键,完成一个对应数据的调整。如果采用二的方式,就不会出现这种情况。因为状态的调整,与状态的操作可以分别由两个键控制,其状态的调整数可以多达256个(理论上),操作的完成是这样的,一键控制状态的调整,一键控制数据的调整。以上两种方式的实现都可以采用查询和中断的方式。两种方式必须注意的问题是两者进行相关操作的过程不能太长否则会影响显示的扫描。利用查询的方式,方法传统,对此就不作过多的讨论,以下是采用中断的方式实现的数字钟的一些讨论和有关问题作的一些处理。基于以上的讨论可以设计如下:将调整分为状态调整和数据调整两部分,每次进入中断只执行一次操作,然后返回,这样,就不必让中断处于调整等待状态,这样,可以使中断的耗时很小。将定时器中断的优先级设置为最高级,那么中断的方式和查询的方式一样不会影响到时钟的记数。
(3)中断方式应注意的问题:
采用中断的方式,最好将定时器中断的优先级设置为最高级,关于程序数据的稳定性应注意两个问题:一、在低优先级中断响应时,应在入栈保护数据时禁止高优先级的中断响应。二、在入栈保护有关数据后,对中断程序执行有影响的状态位,寄存器,必须恢复为复位状态的值。例如,在用到了十进制调整时,在中断进入时,需将PSW中的AC,CY位清零,否则,十进制调整出错。
(4)定时准确性的讨论:
程序中定时器,一直处于运行状态,也就是说定时器是理想运作的,其中断程序每隔0.1秒执行一次,在理想状态下,定时器定时是没有系统误差的,但由于定时器中断溢出后,定时器从0开始计数,直到被重新置数,才开始正确定时,这样中断溢出到中断响应到定时器被重新置数,其间消耗的时间就造成了定时器定时的误差。如果在前述定时器不关的情况下,在中断程序的一开始就给定时器置数,此时误差最小,误差大约为:每0.1秒,误差7—12个机器周期。当然这是在定时器定时刚好为0.1秒时的情况,由以上分析,如果数字钟设计为查询的方式或是在中断的方式下将定时器中断设置为最高级,我们在定时值设置时,可以适当的扣除9个机器周期的时间值。但如果在中断的情况下,没有将定时器中断设置为最高级,那就要视中断程序的大小,在定时值设置时,扣除相应的时间值。
(5)软件消抖:
消抖可以采用硬件(施密特触发器)的方式如图4.4所示,也可以采用软件的方式。在此只讨论软件方式。软件消抖有定时器定时,和利用延时子程序的方式。一,定时器定时消抖可以不影响显示模块扫描速度,其实现方法是:设置标志位,在定时器中断中将其置位,然后在程序中查询。将其中断优先级设置为低于时钟定时中断,那么它就可以完全不影响时钟定时。二,在采用延时子程序时,如果显示模块的扫描速度本来就不是很快,此时可能会影响到显示的效果,一般情况下,每秒的扫描次数不应小于50次,否则,数码的显示会出现闪烁的情况。因此,延时子程序的延时时间应该小于20毫秒,如果采用定时器定时的方式,延时时间不影响时钟。
如果,设计时采用的是中断的方式来完成有关操作,同样可以采用软件的方式来消抖,其处理思想是:中断不能连续执行,两次之间有一定的时间间隔。


基于AT89C51 单片机数字时钟如何设计?
让我们深入探讨一项基于AT89C51单片机的创新设计——一个直观、易于操作的数字时钟,它由51单片机、8位共阴数码管和独立按键巧妙结合而成。这款时钟不仅仅是一个计时工具,它具备独特的功能和交互体验。功能展示 这款时钟的核心功能包括:实时显示: 51单片机通过精确计算,驱动数码管以“时-分-秒”的格式实...

求51单片机电子时钟设计。用6个数码管显示出时分秒。
66H,     2    3    4    5    6    7     DB7fH, 6fH, 77H, 7cH,39

用C语言编写AT89C51单片机程序,设计一个智能数字钟。
void nz_clock(); \/\/闹钟函数 uchar incone(uchar); \/\/加1函数 uchar decone(uchar); \/\/减1函数 void set_time(); \/\/设置时间函数 void set_clock(); \/\/设置闹钟函数 void set_mdw(); \/\/设置月日星期函数 void main() \/\/主函数 { EA=1;ET0=1;TR0=1;TMOD=0x01;TH0=0x4c; \/...

求大神帮忙做一个以单片机为基础的多功能电子时钟
1,系统具有3种工作模式状态(正常时钟显示模式、系统校准模式,秒表计时模式) 2,在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。3,在正常时钟显示模式时,时钟具有整点报时功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每隔1秒鸣叫一次,前4响为低音,后1响为高音,共鸣...

求单片机电子时钟程序设计
本设计主要设计了一个基于AT89C51单片机的电子时钟。并在数码管上显示相应的时间。并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。关键字:单片机;子时钟;键盘控制。目 录 摘 要 4 1...

跪求单片机c51一个多功能时钟设计。要闹钟。调整时间、秒表、就行了...
SYSTEMTIME time1; \/\/在ds1302.h文件中已经定义了一个名字为SYSTEMTIME的结构体,在这里我们定义一个变量名 \/\/为time的SYSTEMTIME结构体 void delay(unsigned char i) \/\/延时子程序 { unsigned char j; while((i--)!=0) { for(j=123;j>0;j--); }}unsigned char button_time(n,x,y) \/\/时钟调整子...

单片机时钟电路工作的原理是什么
单片机(MCU)时钟电路工作原理主要涉及时钟信号的产生和控制。通常情况下,MCU时钟电路包含一个时钟晶体振荡器和一个时钟频率控制电路。时钟晶体振荡器将外部电源转化为高频振荡信号,而时钟频率控制电路则可以对这个振荡信号进行调整,以满足MCU的需求。时钟频率的控制通常是通过改变时钟电路中的电容或电阻来实现...

51单片机做数字电子钟
51单片机做数字电子钟 设计一个数字电子钟,要求可以进行时、分、秒显示,最大显示时间为23:59:59,并且可以通过按键进行时、分调整。画出硬件连接电路图,说明各个控制信号的作用。᠑...  设计一个数字电子钟,要求可以进行时、分、秒显示,最大显示时间为23:59:59,并且可以通过按键进行时、分调整。

单片机时钟电路原理是什么
单片机时钟电路通常由晶振元件(CrystalOscillator)和一些放大电路组成。晶振元件是一个小型的石英晶体,其内部的频率固定且稳定。当晶振元件被通电时,它将产生固定的频率的时钟信号。晶振元件输出的时钟信号通过放大电路进行放大,以确保信号强度足够传递给单片机。单片机利用这个时钟信号进行内部指令的执行,每个...

51单片机设计电子时钟的思路
#0 MOV TMOD,#01H ;T0工作于方式1,用于定时 MOV TH0,#4CH ;设置T0的初始值 MOV TL0,#00H MOV IE,#00H ;关中断 SETB TR0 ;开启定时器T0 LOOP:NOP NOP ACALL DISPLAY ;调用显示子程序 NOP NOP LOOP1:JB TF0,TIME ;等待定时溢出 LJMP LOOP1 TIME:CLR TR0 ;关闭定时器 PUSH DPL ;...

霍州市15069562598: 单片机时钟 《AT89S51》 1、四位数码管显示时分、分秒,以24小时计时运行 -
载轰乌鸡: 调时程序: MAIN:JNB P3.0,DATETZ;按下0键时,显示日期并可对日期进行调整JNB P3.1,ZSTZ1;按下1键时,显示时间,并可调时JNB P3.2,NLTZ1;按下2键进行闹铃设置JNB P3.3,DSTZ;按下3键进行定时设置ACALL DISP;调用显...

霍州市15069562598: 用C语言编写AT89C51单片机程序,设计一个智能数字钟. -
载轰乌鸡: 基本要求:1.C语言程序要求是模块化设计.2.该闹钟基于AT89C51单片机及相关外围电路进行设计.3.该闹钟有6个数码管(共阳极),可分别显示时间(时、分、秒)、及定时时间(分、秒).4.该闹钟有4个按钮,S1是切换显示按键,该键按下时可分别实现切换正常走时显示、设定走时显示、设置定时时间,启动定时,回到正常状态等功能.S2是设定键,即该键按下,将分别选中需要设定的选项.S3键是加键,即按下去表示相应选项加1.S4键是减键,即按下去表示相应的选项减1.5.该闹钟可以定时时间到,LED将发出提示闪光,且持续30s.发挥要求:1.定时时间可被打断,即打断后恢复时继续计时.2.设置闹钟报警功能;3.能切换显示年月日等信息.

霍州市15069562598: 基于单片机的时钟计数器设计
载轰乌鸡: 89C51 LED电子钟 参考链接: http://www.51picavr.com/news/c8/2009-01/109.htm *APPLICATION NOTE E6000 ICEXPLORER *************** * Title: FOR colk_time * * Version: 00 * * Last Updated: * * MCU: AT89C91 * * FOR: WWW.PICAVR....

霍州市15069562598: 51单片机设计数码管数字时钟,怎么实现显示年月日可切换显示时分秒,? -
载轰乌鸡: 设计一个按键,或者定时自动切换. 显示的话就是将数据传送给显示模块(调用显示程序).

霍州市15069562598: 用单片机实现电子钟?
载轰乌鸡: 这个用单片机的时钟中断来实现就可以了,还是比较简单的,更简单的办法,是根据单片机的频率用循环来控制也可以

霍州市15069562598: 设计一个基于AT89C51单片机的电子钟 -
载轰乌鸡: #include #define uchar unsigned char sbit k1=P1^0; sbit k2=P1^1; sbit sounder=P3^7; uchar h=12,m=0,s=58,c=0; //延时子程序 void delay(unsigned int a){while(--a); } //数码管显示(共阳): 0 1 2 3 4 5 6 7 8 9 uchar code dArr[]={0xC0,0xF9,0...

霍州市15069562598: 单片机电子时钟编程 -
载轰乌鸡: SDA BIT P0.0 SCL BIT P0.1 LED0 EQU 40H LED1 EQU 41H LED2 EQU 42H LED3 EQU 43H LED4 EQU 44H LED5 EQU 45H second equ 50h minute equ 51h hour equ 52hMOV DPTR, #TABLEMOV LED0,#0MOV LED1,#5MOV LED2,#9 ...

霍州市15069562598: 急求单片机51c编写的时钟显示程序 -
载轰乌鸡: #include<reg51.h> #define uchar unsigned char sbit set=P1^0; sbit setsecond=P1^1; sbit setminute=P1^2; uchar temp,second,minute; void task1() {if(set==1) {delay(10); if(set==1) { while(1) {if(setsecond==1){second++; while(setsecond);}if(...

霍州市15069562598: 急求:单片机课程设计电子时钟
载轰乌鸡: A方案 -------------------------- 外加一颗时钟芯片DS1302(非常准确). 按键为单片机中断. -------------------------- 1、上电时自动显示时、分、秒; 实现方式:上电时单片机去启动DS1202,然后读取里面的时间值,自动显示时、分、秒; 2、设置一...

霍州市15069562598: 急求单片机电子时钟程序,用汇编写的 -
载轰乌鸡: ;********************************************************************; 引脚定义;******************************************************************** D_PORT EQU P0 CS1 EQU P2.5 CS2 EQU P2.6 E EQU P2.7;******************************************************...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网