Ⅰ 单片机60秒计时器的程序,用AT89C51实现
//1:用AT89C51单片机的定时/计数器T0产生一秒的
//定时时间,作为秒计数时间,当一秒产生时,秒
//计数加1,秒计数到60时,自动从0开始。单片机
//晶振频率为12MHZ
#include<reg51.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
code
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f};
void
display(uchar
fen,uchar
miao);
uchar
a,fen,miao,shu;
void
delay(uint
z);
void
init();
void
main()
{
init();
while(1)
{
display(fen,miao);
}
}
void
timer0()
interrupt
1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
shu++;
fen=shu/10;
miao=shu%10;
if(shu==60)
shu=0;
}
}
void
init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void
display(uchar
fen,uchar
miao)
{
P1=0xFe;
P2=table[fen];
delay(5);//延时5毫秒
P1=0xFf;
P2=table[miao];
delay(5);//延时5毫秒
}
void
delay(uint
z)
{
uint
x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
Ⅱ 如何用单片机做一个简单的倒计时器
一般我们用定时器来做计时器,实现时间得加。每次中断发生,用一个变量自增来判断时间是否到1S,到了之后清零这个变量,另一个时间变量自增来作时间得增加。现在就是要把这个自增的时间变量改为自减,判断当小于0时,又赋初值,然后继续自减判断。
Ⅲ 基于单片机控制的60秒倒计时实现
在单片机控制系统中,实现60秒倒计时的功能是一种常见的应用场景。本文将介绍一种基于单片机的倒计时实现方法。具体实现中,我们使用了一个包含十个字符的字符表,这些字符代表了0到9这十个数字。通过这些字符,我们可以显示倒计时的时间。
以下是实现60秒倒计时的代码片段。代码首先定义了一个字符表,包含十个数字对应的段码。接着,定义了秒数和分钟数变量。主函数中,开启了全局中断,设置了定时器1的中断模式,并初始化定时器1的控制寄存器和定时初值。主循环等待中断发生。
在中断服务程序中,首先更新定时器1的初值,以保持定时器的准确性。然后,增加秒数。当秒数达到20时,重置秒数,并根据分钟数进行相应的调整。最后,更新P0和P2端口,显示当前的分钟数和秒数。
整个倒计时过程中,定时器1的中断周期为50毫秒,因此,每秒会产生20次中断,从而实现了60秒倒计时的功能。通过这种方式,我们可以利用单片机实现精确的倒计时。
需要注意的是,这里的代码片段仅用于演示目的,实际应用中可能需要根据具体的单片机型号和开发环境进行适当的修改。此外,代码中的中断服务程序使用了特定的中断向量,因此在实际编写中断服务程序时,需要确保与单片机的中断系统兼容。
通过这种方式,我们可以利用单片机的定时器功能,实现精确的倒计时。这种方法不仅适用于60秒倒计时,还可以根据需要调整倒计时的长度,适用于各种需要倒计时的应用场景。
Ⅳ 为什么用单片机自带的时钟来计时精确度不高 为什么用DS1302时钟芯片精确度很高
DS1302也未必高,需要它的晶振好,其实高的还是DS12C887芯片,单片机自带的定时器中断有误差,虽然少,但有影响,一般在2%左右。使用AVR如果设置的初始值不对,会更高。