用延时函数写一个c51单片机的数码管60秒倒计时代码,时钟信号为11.0592MHz
时间: 2024-03-07 14:49:21 浏览: 162
59秒计时器(利用定时器延时,查询法)C51单片机例程KEIL工程源代码.zip
下面是一个使用延时函数在 C51 单片机上实现 60 秒倒计时的代码,使用的时钟信号为 11.0592MHz。假设使用的是共阳数码管,且连接到 P1 口:
```
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code digit[10] = { // 数码管显示数字的编码表
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
void delay(uint ms) { // 延时函数,延时 ms 毫秒
uint i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 110; j++);
}
}
void main() {
uchar sec = 60; // 剩余秒数
uchar display[4] = {0, 0, 0, 0}; // 数码管显示的四个数字
TMOD = 0x01; // 定时器 0 工作在模式 1
TH0 = 0x4c; // 定时器 0 初始值为 0x4c06,产生 1ms 的定时器中断
TL0 = 0x06;
ET0 = 1; // 允许定时器 0 中断
EA = 1; // 允许总中断
TR0 = 1; // 启动定时器 0
while (1) {
display[0] = sec / 10; // 计算秒的十位
display[1] = sec % 10; // 计算秒的个位
// 在 P1 口显示秒的十位和个位
P1 = digit[display[0]];
P1 &= ~(1 << 7);
delay(5);
P1 = digit[display[1]];
P1 |= 1 << 7;
delay(5);
if (sec == 0) { // 倒计时结束
P1 = 0xff; // 关闭数码管
while (1); // 进入死循环
}
delay(1000); // 延时 1s
sec--; // 秒数减 1
}
}
void timer0() interrupt 1 { // 定时器 0 中断处理函数
TH0 = 0x4c;
TL0 = 0x06;
}
```
这个代码使用了定时器 0 产生 1ms 的定时器中断来计时,每个时钟中断处理函数中,定时器 0 的初始值被重新设置为 0x4c06。同时,使用一个数组 `display` 来存储当前需要显示的四个数字,然后在主循环中更新这个数组,并在 P1 口显示每个数字。当倒计时结束后,关闭数码管并进入死循环。
阅读全文