单片机做闹钟程序中,如何用定时器中断计时一个时间,闹钟时间到时就响,比如一分钟后就停止响。

供稿:hz-xin.com     日期:2025-01-14
stc51单片机做闹钟,闹钟响时,表就停了,怎么更好的利用定时器 我用的c语言

定时器的定时到没到(如秒、分、时的改变)要在中断方法完成,不能用查询方法。

其实不用定时中断也能实现功能:
#include 主函数
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;
}

}

}

1设置变量
uchar TC_20ms;20毫秒计数
uchar TC_100ms;100毫秒计数
uchar TC_1s;1秒计数
uchar TC_60s;60秒计数
uchar TC_3600s;1小时计数
uchar TF_200ms;20毫秒到时标记
uchar TF_100ms;100毫秒到时标记
uchar TF_1s;1秒到时标记
uchar TF_60s;60秒到时标记
uchar TF_3600s;1小时到时标记

用定时器定时产生20ms定时
void init() interrupt 1
//定时常数=65535-(晶体频率/分频数*定时周期)-20
{
//重装定时器;
TF_20MS=1;
TC_20MS++;
if(TC_20MS==5){TC_20MS=0;
TF_100MS=1;
TC_100MS++;
if(GC_100MS==10)
{TC_100MS=0;
TF_1S=1;
TC_1S++;
if(TC_1S==60){
TC_1S=0;
…………

}
}
}

}
main()
{
unsigned long waiting_time_s=10000;
unsigned long beep_time_100ms=100;
unsigned long sys_time_s;
unsigned long beep_100ms;

//初始化定时器;
while(1)
{
if(TF_1S==1){sys_time_s++;TF_1S=0;}
if(sys_time_s>=waiting_time_s)
{
if(TF_100MS==1){beep_100ms++;TF_100MS=0;}
if(beep_time_100ms>beep_100ms)

beep();//响铃函数
}
}

}
///仅仅是思路,希望有帮助。

中断就是你定时器定时时间到了就响应你中断函数里面的程序,就是你程序里面的蜂鸣器响。TH0 TL0赋值就是看你用哪个定时器 以及 定时器方式几 具体设置初值

这个程序应该是不能实现你想的功能的吧?这样的经典程序网上有很多,百度文库里应该也有不少,去看看参考下吧。单片机的数据手册也有关于中断等的介绍的。

单片机做闹钟程序中,如何用定时器中断计时一个时间,闹钟时间到时就响...
uchar TF_3600s;1小时到时标记 用定时器定时产生20ms定时 void init() interrupt 1 \/\/定时常数=65535-(晶体频率\/分频数*定时周期)-20 { \/\/重装定时器;TF_20MS=1;TC_20MS++;if(TC_20MS==5){TC_20MS=0;TF_100MS=1;TC_100MS++;if(GC_100MS==10){TC_100MS=0;TF_1S=1;TC_...

如何使用51单片机定时器实现定时功能
1)时间测量:当需要使用单片机测量外部如人体红外线等信号的时间长度时,通过定时器就可以很方便地实现。2)闹钟:在电子时钟电路中,通过定时器的工作模式,实现小时、分、秒的计时及时钟的闹铃功能。3)PWM 波形的生成:单片机中的 PWM 波形可用于直流电机的调速、灯光亮度的控制、温度控制等各种场合...

单片机怎样来设计电子闹钟,怎样来写程序
先做一个不可调的时钟,然后加入按键检测 调时等 然后再会定时闹铃就成了

linux多线程定时器的使用linux线程定时器
可以用alarm信号做:alarm(设置信号传送闹钟)相关函数signal,sleep表头文件#includeunistd.h>定义函数unsignedintalarm(unsignedintseconds);函数说明alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds为0,则之前设置的闹钟会被取消,并将剩下的时间返回。返回值返回之...

机械闹钟定时器如何调
首先,找到闹钟背面的定时旋钮,这个旋钮通常用于设置闹钟响起的时间。接着,根据当前时间和希望闹钟响起的时间,计算出需要设定的时间差。然后,顺时针或逆时针旋转定时旋钮,直到它指向正确的时间点。这样,当时间到达设定的点时,闹钟就会响起。在调整机械闹钟定时器时,需要注意几点。一是要确保旋钮旋转的...

设计电子时钟 要用AT89S51单片机的定时器实现,用4位数码管显示,用点的...
一个调分钟键,一个设置闹钟时间键 实验方法:TIMER0中断用来计时,控制数码时钟的时间显示 还可设置半秒或四分之一秒,用来控制音调 TIMER1用来控制音普,,timer0用MODE2自动加载模式 *\/ include<reg52.h> sbit speaker=P2^3 ;sbit AA=P2^2 ; \/\/调时用 sbit BB=P2^1 ; \/\/调分用 sbit CC...

...帮帮我啊!用单片机编辑一个数字钟的程序啊,要求如下:
使用KEIL编辑出数字钟完整程序;数字钟有八个按键,八个按键功能分别为:1、按键一:用来修改时间和闹钟;每按一下小时上加一;2、按键二:用来修改时间和闹钟;每按一下小时上减一;... 使用KEIL编辑出数字钟完整程序;数字钟有八个按键,八个按键功能分别为:1、按键一:用来修改时间和闹钟;每按一下小时上加一;2、...

求一个51单片机定时闹钟程序。要C语言。能够调时间
\/* 程序功能:带定时闹铃时钟 *\/ \/*---*\/ include <AT89X51.H> \/*包含器件配置文件*\/ define uchar unsigned char define uint unsigned int char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};\/*0~9的数码管段码*\/ uchar hour=0,min=0,...

电子闹钟如何精确定时一秒
电子闹钟如何精确定时一秒如下采用定时器定时很精确的,如果定时时间为1ms,那循环1000次就是1s。定时初值要看你采用的晶振频率了,下面是12M晶振,定时器0的定时1ms程序。timer0() interrupt 1 \/1ms延时(12.0MHz){TR0=0;ET0=0;TH0=0xfc;TL0=0x18;if(delayTimes1!=0) delayTimes1--;TR0=1...

如何用时钟振荡器产生稳定的100hz或1hz的时钟信号
除了用电子钟的芯片,我觉得最方便的做法就是找个单片机,接上一个好一点的晶振(10ppm\/K以内的),在程序中用定时器中断产生100Hz和1Hz的信号,这样会非常稳定,而且比用一堆逻辑芯片分频还要便宜。另外,钟的其它功能也可以一并在单片机里做出来。只有晶振的频率精度和稳定度可以满足钟的要求,可以多...