51单片机倒计时代码
时间: 2023-11-11 10:03:53 浏览: 39
以下是51单片机的倒计时代码示例:
```c
#include <reg51.h> // 引入51单片机头文件
#define uchar unsigned char // 定义uchar为unsigned char
uchar count, sec, min; // 定义count、sec、min三个变量
void delay(unsigned int xms) // 延时函数
{
unsigned int i, j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main()
{
TMOD = 0x01; // 设置定时器T0为工作方式1
TH0 = 0x4C; // 设定定时器初值,计算公式:65536-(12MHz/12)/100=4C00H
TL0 = 0x00;
TR0 = 1; // 启动定时器T0
ET0 = 1; // 允许定时器T0中断
EA = 1; // 开启总中断
count = 1; // 设定计数初值
sec = 10; // 设定秒数
min = 1; // 设定分钟数
while (1)
{
if (count == 20) // 当计数器到20时,表示1秒钟已经过去
{
count = 0; // 计数器复位
if (sec > 0) // 如果秒数不为0,则继续倒计时
sec--;
else if (min > 0) // 如果秒数为0且分钟数不为0,则分钟数减1,秒数恢复到59
{
min--;
sec = 59;
}
}
}
}
void timer0() interrupt 1 // 定时器T0中断服务程序
{
TH0 = 0x4C; // 重新赋初值
TL0 = 0x00;
count++; // 计数器加1
}
```
在上述代码中,我们使用了定时器T0来计时,定时器T0的工作方式为1,即13位定时器(TH0和TL0)自动重装载,计数值为65536-(12MHz/12)/100=4C00H,也就是每100个机器周期(大约是12.5μs)为1个计数值。
在while循环中,我们先判断count是否到达20(约1秒),如果到达则将count复位,并根据当前的秒数和分钟数进行倒计时。当倒计时结束时,程序会一直停留在while循环中。