51单片机数码管倒计时
时间: 2023-07-02 09:04:53 浏览: 291
51单片机数码管倒计时.zip
下面是一个简单的 51 单片机数码管倒计时的代码,使用了定时器中断和延时函数来实现:
```c
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
uchar code table[] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
}; // 显示数字 0 ~ 9 的编码表
uint count = 100; // 倒计时时间为 100 秒
void delay(uint xms) { // 延时函数
uint i, j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void display(uchar num) { // 在数码管上显示一个数字
LSA = 0;
LSB = 0;
LSC = 0;
P0 = table[num];
}
void main() {
uchar i, j, k;
TMOD = 0x01; // 设置定时器 0 为模式 1
TH0 = 0xfc; // 定时器初值为 65536 - 5000 = 60536
TL0 = 0x18;
TR0 = 1; // 启动定时器 0
ET0 = 1; // 允许定时器 0 中断
EA = 1; // 开启全局中断
while (count > 0) { // 倒计时循环
i = count / 100;
j = count % 100 / 10;
k = count % 10;
display(i);
delay(5);
display(j);
delay(5);
display(k);
delay(5);
}
}
void timer0() interrupt 1 { // 定时器 0 中断处理函数
TH0 = 0xfc;
TL0 = 0x18;
count--; // 每秒减少 1
}
```
这个倒计时程序通过定时器 0 中断每秒减少一次计数器的值,然后在数码管上显示剩余时间。当计数器归零时,倒计时就结束了。
阅读全文