keil代码at89c52倒计时提醒系统
时间: 2024-01-09 14:04:22 浏览: 101
以下是一个基本的AT89C52倒计时提醒系统的Keil代码示例:
```C
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = { // 显示数字表
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
uchar second; // 存储秒数
bit flag; // 计时标志位
// 延时函数
void delay(uint t) {
while (t--);
}
// 定时器0中断服务函数
void timer0() interrupt 1 {
TH0 = 0x4c; // 设置定时器初值
TL0 = 0x00;
if (flag) { // 如果计时标志位为真
if (second > 0) { // 如果秒数大于0
second--; // 秒数减1
} else { // 如果秒数等于0
second = 59; // 秒数变为59
}
}
}
// 显示函数
void display(uchar num) {
P0 = 0xff; // 关闭所有数码管
P2 = 0xfe; // 打开第一个数码管
P0 = table[num / 10]; // 显示十位数
delay(100); // 稍作延时
P0 = 0xff; // 关闭数码管
P2 = 0xfd; // 打开第二个数码管
P0 = table[num % 10]; // 显示个位数
delay(100); // 稍作延时
}
void main() {
TMOD = 0x01; // 定时器0工作在模式1:16位自动重装载定时器
TH0 = 0x4c; // 设置定时器初值
TL0 = 0x00;
ET0 = 1; // 允许定时器0中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器0
second = 59; // 初始化秒数
flag = 1; // 设置计时标志位为真
while (1) {
display(second); // 显示秒数
if (second == 0) { // 如果秒数等于0
flag = 0; // 关闭计时标志位
P0 = 0x00; // 发出提示
delay(10000); // 延时10秒
P0 = 0xff; // 关闭提示
flag = 1; // 打开计时标志位
}
}
}
```
这个代码示例使用了AT89C52的定时器0来计时,并且通过数码管显示倒计时的秒数。当秒数为0时,系统会发出提示,并且延时10秒后重新开始计时。你可以根据需要进行修改和优化。
阅读全文