AT89C51数码管倒计时
时间: 2023-12-31 10:04:47 浏览: 134
下面是基于AT89C51单片机的数码管倒计时的代码示例,假设使用的是共阳极数码管。
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
void delay(uint t)
{
while (t--);
}
void main()
{
uchar i, j, k;
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0x3c; // 定时器0初值
TL0 = 0xb0;
TR0 = 1; // 开启定时器0
while (1) {
for (i = 5; i > 0; i--) {
for (j = 9; j >= 0; j--) {
for (k = 99; k >= 0; k--) {
P0 = table[i];
P2 = 0xfe;
delay(1000);
P0 = table[j];
P2 = 0xfd;
delay(1000);
P0 = table[k / 10];
P2 = 0xfb;
delay(1000);
P0 = table[k % 10];
P2 = 0xf7;
delay(1000);
}
}
}
}
}
```
其中,函数 `delay` 是自定义的延时函数,可以根据需要进行调整。在 `main` 函数中,使用三层嵌套的循环实现了倒计时的功能,分别控制百位、十位和个位上的数码管显示,每个数码管显示一秒钟。具体地,循环变量 `i` 表示百位上的数字,循环变量 `j` 表示十位上的数字,循环变量 `k` 表示个位上的数字。变量的初始值分别为 5、9 和 99,表示倒计时从 5 分钟开始,每次减少一秒。在每一次循环中,通过 `P0` 和 `P2` 寄存器分别控制数码管的显示,其中 `P0` 寄存器用于控制数码管的数字,`P2` 寄存器用于控制数码管的位选。
阅读全文
相关推荐


















