给你个程序看看,主要是看时分显示哪里!这个程序已经调试通过了,在走时的同时流水灯进行流动,时分之间有一个小数点作为分隔。还有整点报时功能,在早上八点到中午十二点以及下午三点到晚上八点两个时间段内逢整点报时,其他时间不报时(是因为考虑到人们要午休及晚间休息),除此之外还有调时、调分功能。整个程序基于单片机AT89S52(可用C51、C52、S51等代替)。
#include reg52.h
#define uint unsigned int
sbit P3_0=P3^0;
sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P3^4;
sbit K4=P3^5;
uint count,min,hour,i,j=0;
uint code tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint code tab2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uint code tab3[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0x00,0xff,0x00,0xff,
0xfe,0xfb,0xef,0xbf,0xfd,0xf7,0xdf,0x7f,0x7e,0x3c,0x18,0x00,0x81,
0xc3,0xe7,0xff,0xe7,0xdb,0xbd,0x7e,0xff,0x7e,0xbd,0xdb,0xe7,0xff,
0x00,0xff,0x00,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,
0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0x00,0xff,0x00,0xff,0xfe,0xfc,
0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,
0xff,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0x00,0xff,0x00,0xff};//流水灯
void adjust(void)
{
if(!K3) //分调整
{
for(i=0;i20000;i++);min++;
if(min==60)min=0;
}
if(!K4) //时调整
{
for(i=0;i20000;i++);hour++;
if(hour==24)hour=0;
}
}
void display(void)
{
P0=tab1[min%10];P2=0xf7;for(i=0;i5;i++);P2=0xff;//分个位显示
P0=tab1[min/10];P2=0xfb;for(i=0;i5;i++);P2=0xff;//分十位显示
P0=tab2[hour%10];P2=0xfd;for(i=0;i5;i++);P2=0xff;//时个位显示
P0=tab1[hour/10];P2=0xfe;for(i=0;i5;i++);P2=0xff;//时十位显示
}
void ring(void)
{
if(hour/10==0(hour%10=8hour%10=9))P3_0=0;//早上7:00到晚上7:00自动整点报时,其中13、14点不报时
if(hour/10==1(hour%10=0hour%10=2))P3_0=0;
if(hour/10==1(hour%10=5hour%10=9))P3_0=0;
}
void update(void)
{
if(count==1200)
{
count=0;min++;
if(min==60)
{
min=0;hour++;
if(hour==24)hour=0;
ring();
}
}
}
void main(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
EA=1;
ET0=1;
while(1)
{
if(count==120)P3_0=1;//报时六秒后自动关闭蜂鸣器
adjust();
display();
}
}
void timer0_rupt(void) interrupt 1 // 定时器0中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count%10==0)
{
P1=tab3[j];
j++;
if(j99)j=0;
}
update();
}
其实不用定时中断也能实现功能:
#includereg51.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;ixms;i++)
for(j=0;j100;j++);
}
void disp()定义子函数
{
P1=tmp;
delay(1);
P2=0xff;
tmp=tmp1;
}
void main( )
{
unsigned char z,s=00,m=00,h=00;给时钟初始值
while(1)
{
for(z=0;z100;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;
}
}
}
请访问
数字电子钟的设计(由数字IC构成)
一、设计目的
1. 熟悉集成电路的引脚安排。
2. 掌握各芯片的逻辑功能及使用方法。
3. 了解面包板结构及其接线方法。
4. 了解数字钟的组成及工作原理。
5. 熟悉数字钟的设计与制作。
二、设计要求
1.设计指标
时间以24小时为一个周期;显示时、分、秒;有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时;为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。
2.设计要求
画出电路原理图(或仿真电路图);元器件及参数选择;电路仿真与调试;PCB文件生成与打印输出。
3.制作要求 自行装配和调试,并能发现问题和解决问题。
4.编写设计报告 写出设计与制作的全过程,附上有关资料和图纸,有心得体会。
三、设计原理及其框图
1.数字钟的构成
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。图 3-1所示为数字钟的一般构成框图。图3-1 数字钟的组成框图
⑴晶体振荡器电路
晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。⑵分频器电路
分频器电路将32768Hz的高频方波信号经32768( )次分频后得到1Hz的方波信号供秒计数器进行计数。分频器实际上也就是计数器。
⑶时间计数器电路
时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为12进制计数器。
⑷译码驱动电路
译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流。
⑸数码管
数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管。
2.数字钟的工作原理
1)晶体振荡器电路
晶体振荡器是构成数字式时钟的核心,它保证了时钟的走时准确及稳定。
图3-2所示电路通过CMOS非门构成的输出为方波的数字式晶体振荡电路,这个电路中,CMOS非门U1与晶体、电容和电阻构成晶体振荡器电路,U2实现整形功能,将振荡器输出的近似于正弦波的波形转换为较理想的方波。输出反馈电 阻R1为非门提供偏置,使电路工作于放大区域,即非门的功能近似于一个高增益的反相放大器。电容C1、C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了振荡器的功能。由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。
晶体XTAL的频率选为32768HZ。该元件专为数字钟电路而设计,其频率较低,有利于减少分频器级数。
从有关手册中,可查得C1、C2均为30pF。当要求频率准确度和稳定度更高时,还可接入校正电容并采取温度补偿措施。
由于CMOS电路的输入阻抗极高,因此反馈电阻R1可选为10MΩ。较高的反馈电阻有利于提高振荡频率的稳定性。
非门电路可选74HC00。
图3-2 COMS晶体振荡器
2)分频器电路
通常,数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频。
通常实现分频器的电路是计数器电路,一般采用多级2进制计数器来实现。例如,将32768Hz的振荡信号分频为1HZ的分频倍数为32768(215),即实现该分频功能的计数器相当于15极2进制计数器。常用的2进制计数器有74HC393等。
本实验中采用CD4060来构成分频电路。CD4060在数字集成电路中可实现的分频次数最高,而且CD4060还包含振荡电路所需的非门,使用更为方便。
CD4060计数为14级2进制计数器,可以将32768HZ的信号分频为2HZ,其内部框图如图3-3所示,从图中可以看出,CD4060的时钟输入端两个串接的非门,因此可以直接实现振荡和分频的功能。
图3-3 CD4046内部框图
3)时间计数单元
时间计数单元有时计数、分计数和秒计数等几个部分。
时计数单元一般为12进制计数器计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码。
一般采用10进制计数器74HC390来实现时间计数单元的计数功能。为减少器件使用数量,可选74HC390,其内部逻辑框图如图 2.3所示。该器件为双2-5-10异步计数器,并且每一计数器均提供一个异步清零端(高电平有效)。
图3-4 74HC390(1/2)内部逻辑框图
秒个位计数单元为10进制计数器,无需进制转换,只需将QA与CPB(下降沿有效)相连即可。CPA(下降没效)与1HZ秒输入信号相连,Q3可作为向上的进位信号与十位计数单元的CPA相连。
秒十位计数单元为6进制计数器,需要进制转换。将10进制计数器转换为6进制计数器的电路连接方法如图3-5所示,其中Q2可作为向上的进位信号与分个位的计数单元的CPA相连。
图3-5 10进制--6进制计数器转换电路分个位和分十位计数单元电路结构分别与秒个位和秒十位计数单元完全相同,只不过分个位计数单元的Q3作为向上的进位信号应与分十位计数单元的CPA相连,分十位计数单元的Q2作为向上的进位信号应与时个位计数单元的CPA相连。
时个位计数单元电路结构仍与秒或个位计数单元相同,但是要求,整个时计数单元应为12进制计数器,不是10的整数倍,因此需将个位和十位计数单元合并为一个整体才能进行12进制转换。利用1片74HC390实现12进制计数功能的电路如图3-6所示。
另外,图3-6所示电路中,尚余-2进制计数单元,正好可作为分频器2HZ输出信号转化为1HZ信号之用。 图3-6 12进制计数器电路
4)译码驱动及显示单元
计数器实现了对时间的累计以8421BCD码形式输出,选用显示译码电路将计数器的输出数码转换为数码显示器件所需要的输出逻辑和一定的电流,选用CD4511作为显示译码电路,选用LED数码管作为显示单元电路。
5)校时电源电路
当重新接通电源或走时出现误差时都需要对时间进行校正。通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可。
根据要求,数字钟应具有分校正和时校正功能,因此,应截断分个位和时个位的直接计数通路,并采用正常计时信号与校正信号可以随时切换的电路接入其中。图3-7所示即为带有基本RS触发器的校时电路,
图3-7 带有消抖动电路的校正电路
6)整点报时电路
一般时钟都应具备整点报时电路功能,即在时间出现整点前数秒内,数字钟会自动报时,以示提醒。其作用方式是发出连续的或有节奏的音频声波,较复杂的也可以是实时语音提示。
根据要求,电路应在整点前10秒钟内开始整点报时,即当时间在59分50秒到59分59秒期间时,报时电路报时控制信号。报时电路选74HC30,选蜂鸣器为电声器件。
四、元器件
1.实验中所需的器材:
5V电源。面包板1块。示波器。万用表。镊子1把。剪刀1把。网络线2米/人。
共阴八段数码管6个。CD4511集成块6块。CD4060集成块1块。74HC390集成块3块。
74HC51集成块1块。74HC00集成块5块。74HC30集成块1块。10MΩ电阻5个。
500Ω电阻14个。30p电容2个。32.768k时钟晶体1个。蜂鸣器。
2.芯片内部结构图及引脚图
图4-1 7400 四2输入与非门 图4-2 CD4511BCD七段译码/驱动器
图4-3 CD4060BD 图4-4 74HC390D
图4-5 74HC51D 图4-6 74HC30 3.面包板内部结构图
面包板右边一列上五组竖的相通,下五组竖的相通,面包板的左边上下分四组,每组中X、Y列(0-15相通,16-40相通,41-55相通,ABCDE相通,FGHIJ相通,E和F之间不相通。
五、个功能块电路图
1. 一个CD4511和一个LED数码管连接成一个CD4511驱动电路,数码管可从0---9显示,以次来检查数码管的好坏,见附图5-1。
图5-1 4511驱动电路
2. 利用一个LED数码管,一块CD4511,一块74HC390,一块74HC00连接成一个十进制计数器,电路在晶振的作用下数码管从0-9显示,见附图5-2。
图5-2 74390十进制计数器
3. 利用一个LED数码管,一块CD4511,一块74HC390,一块74HC00和一个晶振连接成一个六进制计数器,数码管从0-6显示,见附图5-3。
图5-3 74390六进制计数器
4. 利用一个六进制电路和一个十进制连接成一个六十进制电路,电路可从0-59显示,见附图5-4。
图5-4 六十进制电路
5. 利用两个六十进制的电路合成一个双六十进制电路,两个六十进制之间有进位,见附图5-5。
图5-5 双六十进制电路
6. 利用CD4060、电阻及晶振连接成一个分频--晶振电路,见附图5-6。
图5-6 分频-晶振电路
7. 利用74HC51D和74HC00及电阻连接成一个校时电路,见附图5-7。
图5-7 校时电路8. 利用74HC30和蜂鸣器连接成整点报时电路。见附图5-8。
图5-8 整点报时电路
9. 利用两个六十进制和一个十二进制连接成一个时、分、秒都会进位的电路总图,见附图5-9。 用ttl集成电路构成的"二十四小时数字钟",具有校时和整点报时功能,555定时器接成多谐振荡器产生秒脉冲信号,调节rw即可校准秒信告,计数器7416 i、ii组成60进制"秒"计数电路,iii、iv组成"分"计数电路,v、vi组成24进制"时"计数电路,校时电路由与非门7400构成的双稳态触发路构成,可消除开关抖动的影响,整点报时 电路 由与非门7430和d触发器7474构成 ,1秒钟响一声、直至整点为止。
有关用晶振电路产生秒脉冲电路的"12小时数字钟,请看下回贴 数字电子钟参考电路(24小时数字钟)
[upload=jpg,325.83,450,915,822]/58474-1-2-9489.
上面的电路图是用ttl集成电路构成的"二十四小时数字钟",具有校时和整点报时功能,555定时器接成多谐振荡器产生秒脉冲信号,调节rw即可校准秒信告,计数器7416 i、ii组成60进制"秒"计数电路,iii、iv组成"分"计数电路,v、vi组成24进制"时"计数电路,校时电路由与非门7400构成的双稳态触发路构成,可消除开关抖动的影响,整点报时 电路 由与非门7430和d触发器7474构成 ,1秒钟响一声、直至整点为止。
有关用晶振电路产生秒脉冲电路的"12小时数字钟,请看下回贴图。
采用AT89C2051兼容芯片制作六位数显多路定时电子钟
采用at89c2051兼容芯片制作六位数显多路定时电子钟电路特点这里介绍的电子钟,电路可称得上极简,它仅使用单片的20引脚单片机完成电子钟的全部功能,而笔者见到的其它设计方案均采用二片以上的多片ic实现。电路见图1。一片20引脚的单片机stc2032(引脚排列与at89c2051完全相同)为电子钟主体,其显示笔画数据从p1口分时输出,p3口则输出对应的六位选通信号。由于led数码管点亮时耗电较大,故不能使用at89c2051单片来完成,但是可以可以用stc89c2032来完成。另外,本站制作时用超高亮的发光二极管代替昂贵的大数码管,成本低,效果独特。本电子钟设计有三个轻触式按键,这里我们分别命名为:模式设定键k1、加调整键k2、减调整键k3。由于stc89c2032内部已经集成有复位电阻,所裕�次唤胖恍枰�右恢坏缛菁纯伞1镜缱又硬捎昧艘恢籒pn型的三极管及蜂鸣器为闹时讯响电路。本图采用电池供电,电路板上有桥式整流、滤波和三端稳压器7805的安装位置,可以用交流电压供整个系统工作。此电子钟可与任何6~12v/100ma的交直流电源适配器配合工作,适应性强。电子钟功能1.走时:默认为走时状态,按24小时制分别显示"时时:分分:秒秒",有四个秒点动态显示,时间会按实际时间以秒为最少单位变化。2.走时调整:长按k1(或k2、k3)两秒钟以上,时位、分位、秒位会有其一快速闪动,按k1会循环,按k2和k3可以分别对闪动的数字进行加或者减,从而达到快速设定时间的目的。20秒以上长时间没有任何按键*作时,自动按变为正常走时状态。3.闹时调整:再次长按k1(或k2、k3)两秒钟以上,时位、分位、秒位会有其一慢速闪动,按k1会循环,按k2和k3可以分别对闪动的数字进行加或者减,从而达到快速设定闹时的目的。20秒以上长时间没有任何按键*作时,自动按变为正常走时状态。注意:闹时状态下时位会在01-64变化,表示64路定时时间;分位只能在00-24变化,表示24个小时,其中默认显示为24,表示不闹;秒位在00-59变化,表示60个分钟。因此,本电子钟以分钟为最小单位可以设定多路闹时。(由于64路太多,基本上没有什么用,用起来反而不方便,所以,本站出售的是16路定时的。)4.误差修正状态:大家知道,即便是世界上最优良正统的石英晶振,频率也会有偏差,需要电容微调校正频率,不同的电容和负载会影响到频率偏移。这种情况可能会使日误差达到几十秒。当然,配备优质正品元件会使走时误差小到几秒,如果设计微调电容的话,就可以使每天的走时误差小到1秒以内。但是,对于业余制作来说,没有更标准的测量设备来证明你的调试是刚刚好,不能测周期,不能测频率(普通的测量会改变电路工作参数带来更大的测量误差)。而我们一般都会按电视台的时间来做对比,经过了24小时,我的电子钟究竟是快了??还是慢了??现在不用怕了,本电子钟设计了误差校正程序:如果你的电子钟走一天会快1.6秒(或者慢0.8秒),那么,通过本电子钟的误差校正设置,可以在一天中不知不觉的减慢1.6秒(或者加快0.8秒)。因此,本电子钟理论上可以做到日误差小于0.2秒,当然,具体的过程和效果还需要大家去*作和证明。误差校正方法:在闹时调整状态下,再长按k1(或k2、k3)两秒钟以上,时位、分位会变成"一一一一"或者"三三三三",表示变慢或者变快的意思,按k1选择;秒位会变成00,按k2、k3会在00-80中变化,数字越大,表示校正越大,00等于即不校正变快也不校正变慢,例如2+0=2-0这样的情况。20秒以上长时间没有任何按键*作时,自动按变为正常走时状态。其它功能:1、如果是在走时状态,正逢到在闹铃响(会长响20秒)中,按k1、k2、k3任意键停止发声。2、在走时状态,按k3可以让电子钟每秒都发出短短的"嘀"声,这有点类似机械指针式的电子钟(或者机械手表)的声音,当然,声音要大得多。这个功能很有用,例如,我们有些特殊情况时不能去看着钟,但是可以闭上眼睛听声音在心中默默数数经过了多少秒再去*作某某。再按可以关掉秒发声。3、整点报时功能:按k2可以开启和关闭整点报时功能。开启后每逢整点就会听到长响两秒"嘀"声。4、闹时开关功能:按k1可以开启和关闭定时闹铃功能。关闭闹铃后,以前设置的数据不会丢失。由于电路设计得极其简单,因此丰富的功能只能由软件完成,这里软件设计成为了关键。下面介绍软件设计中采用的一些要点。本电子钟程序设计时只使用了一个定时数t0,其它的中断全部关断,定时器工作在两个8位自动加载初始值状态。这是保证走时精确稳定的重要方法。站长看到很多书本教材上都让大家用定时器中断来执行动态显示程序和按键扫描程序,这是一种很不好的方法,除了浪费硬件资源以外,还会增加程序复杂性,还会影响其它程序运行。站长认为,越是中断程序,就要越写得简短,最好几条指令就立即结束,对于动态扫描显示、按键功能等等可以写在主程序中让程序不停的反复运行,如果中断多,最大的坏处就是影响到主程序运行时间不够,扫描显示会出现闪烁,或者按键反应变慢(一般觉察不出),可是,这又有另一好处,你可以随时改良程序并且立即看到结果。led动态扫描显示是分时点亮各个led,利用人的视觉暂留特性,让人觉得是连续点亮。当点亮的频率高时,说明单片机有充足的时间运行主程序 「该帖子被 zdr 在 2006-9-27 10:15:48 编辑过
六位数显多路定时电子钟
大小[2444] 更新时间[] 阅读[7822]次/评论[64]次
电路特点
这里介绍的电子钟,电路可称得上极简,它仅使用单片的20引脚单片机完成电子钟的全部功能,而笔者见到的其它设计方案均采用二片以上的多片ic实现。
电路见图1。
一片20引脚的单片机stc2032(引脚排列与at89c2051完全相同)为电子钟主体,其显示笔画数据从p1口分时输出,p3口则输出对应的六位选通信号。由于led数码管点亮时耗电较大,故不能使用at89c2051单片来完成,但是可以可以用stc89c2032来完成。另外,本站制作时用超高亮的发光二极管代替昂贵的大数码管,成本低,效果独特。
本电子钟设计有三个轻触式按键,这里我们分别命名为:模式设定键k1、加调整键k2、减调整键k3。由于stc89c2032内部已经集成有复位电阻,所以,复位脚只需要接一只电容即可。本电子钟采用了一只npn型的三极管及蜂鸣器为闹时讯响电路。本图采用电池供电,电路板上有桥式整流、滤波和三端稳压器7805的安装位置,可以用交流电压供整个系统工作。此电子钟可与任何6~12v/100ma的交直流电源适配器配合工作,适应性强。
电子钟功能
1.走时:默认为走时状态,按24小时制分别显示"时时:分分:秒秒",有四个秒点动态显示,时间会按实际时间以秒为最少单位变化。
2.走时调整:长按k1(或k2、k3)两秒钟以上,时位、分位、秒位会有其一快速闪动,按k1会循环,按k2和k3可以分别对闪动的数字进行加或者减,从而达到快速设定时间的目的。20秒以上长时间没有任何按键*作时,自动按变为正常走时状态。
3.闹时调整:再次长按k1(或k2、k3)两秒钟以上,时位、分位、秒位会有其一慢速闪动,按k1会循环,按k2和k3可以分别对闪动的数字进行加或者减,从而达到快速设定闹时的目的。20秒以上长时间没有任何按键*作时,自动按变为正常走时状态。
注意:闹时状态下时位会在01-64变化,表示64路定时时间;分位只能在00-24变化,表示24个小时,其中默认显示为24,表示不闹;秒位在00-59变化,表示60个分钟。因此,本电子钟以分钟为最小单位可以设定多路闹时。(由于64路太多,基本上没有什么用,用起来反而不方便,所以,本站出售的是16路定时的。)4.误差修正状态:大家知道,即便是世界上最优良正统的石英晶振,频率也会有偏差,需要电容微调校正频率,不同的电容和负载会影响到频率偏移。这种情况可能会使日误差达到几十秒。当然,配备优质正品元件会使走时误差小到几秒,如果设计微调电容的话,就可以使每天的走时误差小到1秒以内。
但是,对于业余制作来说,没有更标准的测量设备来证明你的调试是刚刚好,不能测周期,不能测频率(普通的测量会改变电路工作参数带来更大的测量误差)。而我们一般都会按电视台的时间来做对比,经过了24小时,我的电子钟究竟是快了??还是慢了??
现在不用怕了,本电子钟设计了误差校正程序:如果你的电子钟走一天会快1.6秒(或者慢0.8秒),那么,通过本电子钟的误差校正设置,可以在一天中不知不觉的减慢1.6秒(或者加快0.8秒)。因此,本电子钟理论上可以做到日误差小于0.2秒,当然,具体的过程和效果还需要大家去*作和证明。
误差校正方法:在闹时调整状态下,再长按k1(或k2、k3)两秒钟以上,时位、分位会变成"一一一一"或者"三三三三",表示变慢或者变快的意思,按k1选择;秒位会变成00,按k2、k3会在00-80中变化,数字越大,表示校正越大,00等于即不校正变快也不校正变慢,例如2+0=2-0这样的情况。20秒以上长时间没有任何按键*作时,自动按变为正常走时状态。
其它功能:
1、如果是在走时状态,正逢到在闹铃响(会长响20秒)中,按k1、k2、k3任意键停止发声。
2、在走时状态,按k3可以让电子钟每秒都发出短短的"嘀"声,这有点类似机械指针式的电子钟(或者机械手表)的声音,当然,声音要大得多。这个功能很有用,例如,我们有些特殊情况时不能去看着钟,但是可以闭上眼睛听声音在心中默默数数经过了多少秒再去*作某某。再按可以关掉秒发声。
3、整点报时功能:按k2可以开启和关闭整点报时功能。开启后每逢整点就会听到长响两秒"嘀"声。
4、闹时开关功能:按k1可以开启和关闭定时闹铃功能。关闭闹铃后,以前设置的数据不会丢失。由于电路设计得极其简单,因此丰富的功能只能由软件完成,这里软件设计成为了关键。下面介绍软件设计中采用的一些要点。
本电子钟程序设计时只使用了一个定时数t0,其它的中断全部关断,定时器工作在两个8位自动加载初始值状态。这是保证走时精确稳定的重要方法。站长看到很多书本教材上都让大家用定时器中断来执行动态显示程序和按键扫描程序,这是一种很不好的方法,除了浪费硬件资源以外,还会增加程序复杂性,还会影响其它程序运行。
站长认为,越是中断程序,就要越写得简短,最好几条指令就立即结束,对于动态扫描显示、按键功能等等可以写在主程序中让程序不停的反复运行,如果中断多,最大的坏处就是影响到主程序运行时间不够,扫描显示会出现闪烁,或者按键反应变慢(一般觉察不出),可是,这又有另一好处,你可以随时改良程序并且立即看到结果。
led动态扫描显示是分时点亮各个led,利用人的视觉暂留特性,让人觉得是连续点亮。当点亮的频率高时,说明单片机有充足的时间运行主程序,
详情请访问
详细点???你问什么问题??
淮安信息职业技术学院
综合毕业实践说明书(论文)
2009-2010 学年
系 专业
摘要:数字电子时钟电路设计系统,以AT89C51单片机为控制核心,由键盘显示、定时闹铃、LED共阴极数码管和LED灯显示等功能模块组成。基于题目基本要求,本系统对时间显示和定时报警进行了重点设计。本系统大部分功能由软件来实现,吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路简单明了,系统稳定性大大提高。本系统不仅成功的实现了要求的基本功能,而且有一定的创新功能。
关键字:单片机 AT89C51 共阴极LED数码显示器
Abstract This digital electronic clock circuit design system ,based on chip microcomputer AT89C51,is composed by the following functional modules : keyboard displaying , timing alarmg. common cathode LED digital tube,LED lights display,and so on.
According to the basic requirements of the subject ,the system stresses on the realization of Time display and regularly report to the police.
The design achieved all the required basic technical indexes. Furthermore , adopting the idea of hardware-to-software, most of those functions are realized by softwares, which makes the electrocircuit more concise and the system more stable.
Key words: chip microcomputer AT89C51
Common cathode LED digital display
目 录
一、 前言……………………………………………….. ….. ..1
二、 总体方案设计………………………………………..…..1
三、 系统硬件设计………………………………………..…..2
(1)输入部分……………………………………….. …….. ...2
1 电源模块……………………………………………………………….2
2 按键模块……………………………………………………………….5
(2)输出部分……………………………………….. .. ……...3
1 显示模块……………………………………………………………….3
2 闹铃模块……………………………………………………………….4
3 LED灯显示模块……………………………………………………….4
(3)电路相关参数……………………………………....……...4
1 LED数码显示器………………………………………………………..4
2 集成器件CD4511……………………………………………………….5
3 集成器件74LS138……………………………………………………. .5
四、 系统软件设计………………………………………..…..6
主程序流程图…………………………………………………………….7
五、 系统调试……………………………………………..…..9
1 系统功能……………………………………………………………….9
2 时钟精度分析………………………………………………………... .9
六、 系统设计总结………………………………………..…..9
七、 参考文献………………………………………….…... .10
附录……………………………………………………………11
1) 系统原理图……………………………………………......................................11
2) 系统PCB图……………………………………………................................... .12
3) 源程序…………………………………………………..................................... .13
一、前言
本文通过对一个能实现按键开关可调整时、分、秒,且具有加密功能、定时报警的24小时制的时间系统的设计学习,详细介绍了51单片机应用中的定时中断原理、数码管显示原理、动态扫描显示原理等,进一步学习、应用单片机C语言系统的实现了各种功能。从而使自身明白使用单片机汇编语言和C语言之间的效率、整体性问题。系统由AT89C51、独立式按键、二极管、LED数码管、蜂鸣器等部分构成,能实现24小时制时、分、秒的时钟显示,能实现时钟简单的加密功能。同时也可进行时、分、秒的校准、定时报警和LED二极管流水灯显示。
本系统主要是和实际生活的数字钟结合起来,可用1功能键进行加密,进入时间校准等。可用3个带有不同按键分别对时钟的时、分、秒进行校准。每个按键伴有不同的声响以示区别。
文章后附有本次课程设计系统电路原理图及源程序,以供读者参考。
二、总体方案设计
本次设计根据实验要求设计数字时钟。可利用如下两种方案实现。
方案一:本方案采用美国DALLAS公司的专用时钟芯片DS1302。该芯片主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。其内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息,并通过程序控制扫描输出显示数据。利用定时器0与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
鉴于以上两种方案,虽然时钟芯片DS1302具有更多的优点,由于实验硬件的因素,现有的硬件缺少DS1302,为不影响实验进度,本设计采用方案二完成数字时钟的功能。
根据题目要求设计的总体框图,如图1 — 1所示:
图1 — 1单片机数字钟硬件系统的总体设计框图
三、系统硬件设计
(1)、输入部分:
1.电源模块
方案一:采用干电池作为单片机数字钟的电源,由于调试时间较长,使用干电池需经常更换电池,不符合节约型社会的要求。并且需要有一个硬件将3节电池串联在一起以产生足够的电压,若如此,将造成携带不方便。
方案二:采用200W/5V直流稳压电源作为系统电源,不仅功率上可以满足系统需要,不需要更换电源,并且比较轻便,使用更加安全可靠。但稳压电源我们不能自备,若要调试系统,只能到实验室才能做。
方案三:采用普通的USB线连接微型计算机作为系统电源,虽然功率上可以满足稍大于系统需要,但同样不需要更换电源,并且比直流稳压电源更轻便,可随时使用、调试系统。
基于以上分析,由于本次设计系统都是软硬件想结合,所以要采用微机设备,有足够的USB接口供我们使用,所以我们决定采用方案三
2.按键模块
键盘是人与单片机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间为20ms ( ).
方案一:采用独立式键盘。独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。但当所需按键数量多,会占用过多的I/O口线。
方案二:采用矩阵键盘。因为单片机的I/O口有限, 显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口线。但必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
基于以上分析,我们选用方案一,因为本次设计中仅用到4个按键。独立式按键键盘有利于PCB的作图。
(2)、输出部分:
1、 显示模块
显示模块是本次单片机课程设计最核心的部分。
方案一:采用LCD1602。LCD1602为工业字符型液晶,能够同时显示16x02即32个字符。其采用标准的16脚接口,该液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,所以可分容易的实现数字钟数码显示。
方案二:采用LED共阴极数码管。共阴数码管在应用时将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。
基于以上分析,我们考虑到现实经济因素,所以选择了方案二。
对于6路共阴极数码管数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类:
方案一:静态显示驱动。就是每一个数码管显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU的占用较小。但对于静态显示方式,所需的数据锁存装置很多,引线多而复杂,且可靠性也较低。
方案二:动态显示驱动。通过单片机对数码管位选通COM端电路的控制,只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。动态显示可以大幅度地降低硬件成本和电源的功耗,因为某一时刻只有一个数码管工作,也就是所谓的分时显示,故显示所需要的硬件电路可分时复用。动态显示方式,可以避免静态显示的问题。但设计上如果处理不当,易造成亮度低,闪烁问题。因此合理的设计既应保证驱动电路易实现,又要保证显示后的数据稳定,无闪烁。动态显示采用多路复用技术的动态扫描显示方式, 复用的程度不是无限增加的, 因为利用动态扫描显示使我们看到一幅稳定画面的实质是利用了人眼的暂留效应和发光二极管发光时间的长短, 发光的亮度等因素. 我们通过实验发现, 当扫描刷新频率(发光二极管的停闪频率) 为50Hz, 发光二极管导通时间≥1m s 时, 显示亮度较好, 无闪烁感.。
鉴于上述的方案分析, 我们采用方案二
2、闹铃模块
方案一:采用语音芯片ISD1110闹铃。ISD1110 具有多种采样率对应,多种录放时间,可以利用振荡电阻自已决定采样率。操作简单,灵活。音质好,适应电压范围广。可先对录放音设备录入一段音乐或其他报时方式,当到设定时间时,单片机控制录放音设备放音。
方案二:采用蜂鸣器闹铃,当到设定时间时,单片机向蜂鸣器送出低电平,蜂鸣器响铃。采用蜂鸣器闹铃结构简单,只需要单路信号控制,发出的闹铃声音可以根据响和不响的不同的软件延时时间来控制,当然也能发出音乐声音。
基于两种方案分析,虽然语音芯片ISD1110具备更多优点,但鉴于经济因素,我们本次设计还是决定采用方案二。当然如果在大型比赛的话,还是偏向于采用方案一的。
3、LED灯显示模块
采用LED灯可以方便的用不同的流水方式或单个LED灯来判断系统的工作状态,实现不同的显示功能,是一种经济又实用的方式。
(3)电路相关参数
1、LED数码显示器
通常用的七段数码显示器的内部有8个发光二极管,其中7个发光二极管组成了数字“8”,剩下一个发光二极管就是这位数字所带的小数点。数码管结构图如图1 - 2所示。各段码位与显示段的对应关系如表1。
图1 – 2 LED数码管结构引脚图
表1 各段码位的对应关系
段码位 D7 D6 D5 D4 D3 D2 D1 D0
显示段 dp g f e d c b a
2、集成器件CD4511
CD4511是一个用于驱动共阴极 LED (数码管)显示器的 BCD 码—七段码译码器,特点如下:
具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。可直接驱动LED显示器。其引脚图如图1 — 3所示。
图 1 — 3 CD4511 引 脚 图
其功能介绍如下:
BI:4脚是消隐输入控制端,当BI=0 时,不管其它输入端状态如何,七段数码管均处于熄灭(消隐)状态,不显示数字。
LT:3脚是测试输入端,当BI=1,LT=0 时,译码输出全为1,不管输入 DCBA 状态如何,七段均发亮,显示“8”。它主要用来检测数码管是否损坏。
LE:锁定控制端,当LE=0时,允许译码输出。 LE=1时译码器是锁定保持状态,译码器输出被保持在LE=0时的数值。
A1、A2、A3、A4、为8421BCD码输入端。
a、b、c、d、e、f、g:为译码输出端,输出为高电平1有效。
3、集成器件74LS138
74LS138 为3 线-8 线译码器,本设计中74LS138做为对数码管位选通COM端电路的控制,将需要显示的数码管的选通控制打开。
图1 — 3 74LS138引脚图
74LS138工作原理如下:当一个选通端(G1)为高电平,另两个选通端( 和 )为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
四、系统软件设计
1、主程序流程图如图1 — 4所示:
图1 — 4 主程序流程图
2、定时器0子程序流程图如图1 — 5所示:
图1 — 5 定时器0子程序流程图
五、系统调试
1、系统功能
本系统已符合设计课程基本要求,即可以实现24小时方式;可用六位LED数码管显示时、分、秒;可使用按键开关可实现时、分调整。
除了满足这些基本要求外,本系统还做了一些创新:
(1) 通过1功能按键KEY1开关可使系统具有加密功能。加密前后可通过观察LED二极管的显示方式来判断。当LED做流水灯显示方式时,为加密前的状态;当只有LED灯中的LED2(由P0.1口控制亮灭)时,代表已对系统进行加密。
(2) 通过功能按键开关KEY1进入可进入时间校准系统。KEY2控制秒的校准,KEY3控制分的校准,KEY4控制时的校准。每次一有校准按键按下时,系统会发出不同的声响,以提示用户目前正在校准的是时、分、秒的哪一种。校准完成后仍然是通过功能按键KEY1返回时钟显示。
(3) 通过更改主程序中定时器的定时初值,可实现不同样式的数字钟显示方式。通过实验测得以下参数如表2所示(程序中定时参数CYCLE在以下简称C):
C (ms)
数码管显示方式 静态 闪烁 拉幕式
(1) 可实现整点闹鸣功能。整点到时,可短蜂鸣一次。
2、时钟精度分析
为进一步使本次的系统做得更完美,我使用了标准的秒表对自己设计的时间进行了精度测量。本次设计系统使用的晶振为12MHZ.数码管显示
00:10:00时,用秒表测得相应的数据如表3所示:
表3:
序号 1 2 3 4 5
T(min) 10.00.5781 10.00.4787 10.00.5040 10.00.3096 9.59.2587
序号 6 7 8 9 10
T(min) 10.01.4335 10.00.2003 9.59.4556 10.01.2026 10.00.2597
序号 11 12 13 14 15
T(min) 9.58.9750 10.00.1181 10.00.9604 10.02.5060 9.59.8985
序号 16 17 18 19 20
T(min) 10.00.1081 10.01.0545 10.00.9560 10.00.7854 10.00.4355
通过计算可得数码管显示:00:10:00时,
秒表测得的数值平均值为:00:10:2343 。
以上数据表明了本次系统的精度基本符合实验课程精度要求。因为以上共有20组,测量时已去除了粗大误差。当然,如果将测量时间加长,所测得的精度将更精确。
六、系统设计总结
本次课程从基本方案的制定,再到硬件电路的选择,到制作电路完成,最后进行程序调试。在此期间我遇到很多困难,尤其是在做仿真时结果经常出不来。
经过仔细检查,仿真线路是没有错的,可结果就是不行。但当我将实物做出来后,进行了调试,实物上却可以出来成果。这说明了可能是仿真软件的。经过一次又一次品尝到了解决问题的喜悦,最终提前完成了要求的全部功能,并在空闲的时间里加入了一些创新的部分。在此次课程设计中我发现了自己知识的不足,通过一周的学习、实践,我学到了很多东西。
通过此次课程设计的教学实践,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。初步掌握简单单片机应用系统的设计、制作、调试的方法。提高动手实践能力。通过这次对数字时钟的设计,让我系统的了解和学会应用单片机C语言来对所需实现的功能进行编程。
在调试时遇到了一些问题,比如,刚开始进行按键输入检测时,我们直接用万用表测量按键两端的电平,刚测时,万用表显示高电平,当有按键按下时,则万用表显示低电平,这说明了按键是正常的,但当直接用按键时,系统板则不能正常使用按键。后面重新焊接了按键,系统板则才能正常使用按键。还有,LED灯显示模块的上拉电阻,也是出现了同样的情况。原先焊接时发现了电阻的管脚比之前看到的同阻值电阻管脚细。后面经过万用表调试后,重新焊接了电阻,部里就解决了。
上述电子钟,无论在外观上还是功能上都实现了较为完善的设计。特别值得一提的是本系统的加密效果,可与现实生活中的数字钟相媲美,因为有了加密效果,可以使用户在购买时知道其产品是否是新的,还是二手货。但本系统在定时闹鸣时,声音不过响应,因为我为了让蜂鸣器闹鸣时系统时间不受到影响,而是继续走动,所以把闹鸣时间控制在定时器0 1s定时里面,所以定时时间到了时,响的时间不到1s,通过的电流过小,要解决此问题,可在蜂鸣器的放大电路中多加一级放大电路,使定时时间到了时,通过的电流足够大以驱动蜂鸣器。亦或通过软件设置蜂鸣,则可以正常实现蜂鸣器的功能。
七、参考文献:
[1]崔凤波.《数字电子技术》.大连理工大学出版社,2007.7.
[2]戴仙金.《51单片机及其C语言程序开发实例》.清华大学出版社,2008.12
[3]谭浩强.《C语言程序设计》.清华大学出版社.2007.11
[4]赵建领.《51系列单片机开发宝典》. 电子工业出版社,2007
[5]田立,马鸣鹤.《51系列单片机开发实例》.中国电力出版社,2009.8
[6]王昊天,李海涛,王志强等.《PIC单片机原理与应用》.机械工业出版社,2010.1
附录:
1、 系统原理图;
2、系统PCB图
3、源程序
/****************************Copyright (c)*************************
** File name: ShuZiZhong.c
** Last modified Date: 2009-05-22
**-----------------------------------------------------------------** Created by: 翁连益
** NO: 2006040235
** Descriptions: 单片机数字钟
******************************************************************/
#includereg51.h
#define uchar unsigned char
#define uint unsigned int
#define CYCLE 1000 /*定时1ms时间 */
unsigned char i,j,k,ID; /*ID 为case 的次数 K为LED灯控制。*/
unsigned char temp;
unsigned char b,c;
uchar hour=0,min=0,sec=0; /*定义秒时分初始值*/
uchar a[6]; /*定数码管显示缓冲*/
uint t=0;
uint flag=0;
bit fla;
unsigned char count;
sbit KEY1=P3^0;
sbit KEY2=P3^1;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbit LED2=P1^0;
sbit BEEP=P0^7;
void Modifytime(); /*时间调整模块*/
void Adjust();
void scan(); /*扫描数码模块*/
void Time_BEEP();
void delay10ms(void) /*软件10ms定时*/
{ unsigned char i,j;
for(i=20;i0;i--)
for(j=248;j0;j--); /* 软件延时*/
}
void dely250(void)
{ unsigned char i,j;
for(i=2;i0;i--) /* 软件延时*/
for(j=248;j0;j--);
}
void main()
{ TCON=0x01; /*TIMER0工作在方式1*/
TMOD=0x01;
TH0=(65536-CYCLE)/256; /*设定T0每隔1000us(1ms)中断一次*/ TL0=(65536-CYCLE)%256;
TR0=1;
IE=0x82;
Modifytime();
while(1)
{ if (flag==100)
{
{ temp=0xfe;
P1=temp;
delay10ms()
for(k=0;k8;k++)
{ b=tempk;
c=temp(8-k);
P1=b|c;
delay10ms();
}
for(k=0;k8;k++)
{ b=tempk;
c=temp(8-k);
P1=b|c;
delay10ms();
}}
}
if(flag==1000) /*判断1秒钟到否*/
{ sec++; /*秒加一*/
Modifytime();
flag=0;
while ((min==0)(sec==0)) { if (flag==100)
{ { BEEP=0;
BEEP=1;
} }
if (flag==600) break;
}
}
while(KEY1== 0)
{ while(1)
{
if(KEY1==0)
{
delay10ms();
if(KEY1==0)
{ ID++;
if(ID==2)
{
ID=0;
}
while(KEY1==0);
}
}
switch(ID)
{ case 0: Adjust();
break;
case 1:
LED2=0;
if(flag==1000) /*判断1秒钟到否*/
{ sec++; /*秒加一*/
Modifytime();
flag=0; while ((min==0)(sec==0))
{ if (flag==100)
{ { BEEP=0;
BEEP=1;
}
}
if (flag==600) break;
}} break;
}
}
}}
}
void Modifytime() /*调整时间子程序*/
{ uchar temp;
temp=sec; /*uchar temp=sec;*/
sec%=60;
min+=temp/60; /*求余*/
temp=min;
min%=60;
hour=(hour+temp/60)%24;
a[0]=(sec%10); /*调整过的时间送到显示缓冲中*/
a[1]=(sec/10); /*对于秒计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。 */
a[2]=(min%10); /*对于分计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。 */
a[3]=(min/10);
a[4]=(hour%10); /*对于时计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。 */
a[5]=(hour/10);
}
void scan( ) /*扫描6个数码管子程序*/
{ static uchar x;
x++;
if(x5) x=0; /*6个数码管都扫描过了则重新开始*/
P0=x|(a[x]3); /*选中需要扫描的数码管并送数据*/
}
void Timer0Int() interrupt 1 using 2 /*中断定时 */
{ t++;
if(t==100) { flag=100;
}
else if(t==200)
{ flag=200;
}
else if(t==600)
{ flag=600;
}
else if (t==1000)
{ flag=1000;
t=0;
}
else
flag=0;
scan();
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
}
void Adjust()
{ while(1)
{ if(KEY2==0)
{ for(i=40;i0;i--) /*248*2us*5=2480=2.5ms 软件延时*/
for(j=248;j0;j--);
if(KEY2==0)
{
sec++;
for(count=200;count0;count--)
{
BEEP=~BEEP;
dely250();
}
if(sec==60)
{ sec=0;
}
a[0]=(sec%10);
a[1]=(sec/10);
while(KEY2==0);
}
}
if(KEY3==0)
{ for(i=16;i0;i--) /* 软件延时*/
for(j=248;j0;j--);
if(KEY3==0)
{
min++;
for(count=200;count0;count--)
{
BEEP=~ BEEP;
dely250();
}
for(count=200;count0;count--)
{
BEEP =~ BEEP;
dely250();
dely250();
}
if(min==60)
{
min=0;
}
a[2]=(min%10);
a[3]=(min/10);
while(KEY3==0);
}
}
if(KEY4==0)
{ for(i=40;i0;i--) /* 软件延时*/ for(j=248;j0;j--);
if(KEY4==0)
{
hour++;
for(count=200;count0;count--)
{
BEEP =~BEEP;
dely250();
dely250();
}
if(hour==24)
{
hour=0;
}
a[4]=(hour%10);
a[5]=(hour/10);
while(KEY4==0);
}
}
}
}
数字时钟的工作原理是
【1】数字时钟,就是以数字显示取代模拟表盘的钟表,在显示上它用数字反应此时的时间,它还能同时显示时,分,秒,且能够对时,分,秒准确进行校时。
【2】数字钟从原理上讲是一种典型的数字电路,一般是由振荡器、分频器、计数器、显示器等几部分组成。其中包括了组合逻辑电路和时序电路。数字钟的设计方法有许多种。
例如:可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等。
大路你基本上都已经说的了,但我觉得不如直接用12887或1302时钟芯片,报时用一个语音芯片
单片机数字钟的工作原理的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:单片机数字钟的工作原理