51单片机60秒倒计时器
时间: 2023-12-06 11:57:54 浏览: 60
以下是51单片机60秒倒计时器的代码:
```
#include <reg52.h> //包含51单片机头文件
#define uint unsigned int //定义无符号整型
#define uchar unsigned char //定义无符号字符型
uchar code table[] = { //数码管显示0~9的编码
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
sbit D1 = P2^0; //定义数码管位选引脚
sbit D2 = P2^1;
sbit D3 = P2^2;
sbit D4 = P2^3;
sbit D5 = P2^4;
sbit D6 = P2^5;
sbit D7 = P2^6;
sbit D8 = P2^7;
void delay(uint xms) { //延时函数
uint i, j;
for(i = xms; i > 0; i--) {
for(j = 110; j > 0; j--);
}
}
void display(uchar num) { //数码管显示函数
D1 = 0; D2 = 0; D3 = 0; D4 = 0;
D5 = 0; D6 = 0; D7 = 0; D8 = 0;
switch(num) {
case 0: P0 = table[0]; break;
case 1: P0 = table[1]; break;
case 2: P0 = table[2]; break;
case 3: P0 = table[3]; break;
case 4: P0 = table[4]; break;
case 5: P0 = table[5]; break;
case 6: P0 = table[6]; break;
case 7: P0 = table[7]; break;
case 8: P0 = table[8]; break;
case 9: P0 = table[9]; break;
default: break;
}
}
void main() {
uchar i, j, k;
while(1) {
for(i = 5; i > 0; i--) { //60秒倒计时
for(j = 9; j > 0; j--) {
for(k = 9; k > 0; k--) {
display(k); D1 = 1; delay(2); D1 = 0;
display(j); D2 = 1; delay(2); D2 = 0;
display(i - 1); D3 = 1; delay(2); D3 = 0;
}
}
}
}
}
```
代码中使用了数码管显示和延时函数,其中数码管显示的编码表由`table`数组定义,延时函数使用了嵌套循环来实现精确的延时时间。主函数中使用了三重循环来实现60秒倒计时的功能,其中每个循环都使用了一个计数器变量。在循环中,先将数码管的位选引脚置为高电平,然后调用`display`函数显示相应的数字,最后延时2ms后将位选引脚置为低电平,以控制数码管的显示。程序无限循环,可以一直倒计时。
阅读全文