基于at89c51设计的电子时钟编程
时间: 2023-12-08 18:06:38 浏览: 107
基于AT89C51的电子时钟
5星 · 资源好评率100%
下面是一个基于AT89C51单片机的电子时钟的例子程序:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
// 时钟计数器
uchar hour = 0;
uchar minute = 0;
uchar second = 0;
// 数码管显示表
const uchar displayTable[] = {
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f // 9
};
// 数码管位选
uchar digit = 0;
// 数码管显示函数
void display(uchar n) {
P0 = displayTable[n];
}
// 定时器0中断函数
void timer0_isr() interrupt 1 {
// 计数器加1
second++;
if (second >= 60) {
second = 0;
minute++;
if (minute >= 60) {
minute = 0;
hour++;
if (hour >= 24) {
hour = 0;
}
}
}
// 切换数码管位选
digit++;
if (digit >= 3) {
digit = 0;
}
// 显示数字
switch (digit) {
case 0:
display(hour / 10);
break;
case 1:
display(hour % 10);
break;
case 2:
display(minute / 10);
break;
case 3:
display(minute % 10);
break;
default:
break;
}
}
void main() {
// 定时器0初始化
TMOD = 0x01; // 16位定时器模式
TH0 = 0xfc; // 定时1ms
TL0 = 0x67;
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许总中断
TR0 = 1; // 启动定时器0
// 数码管引脚初始化
P2 = 0x00;
// 无限循环
while (1) {}
}
```
这个程序使用了定时器0来实现时钟的计时,并通过数码管显示时间。其中,定时器0的中断函数每隔1毫秒执行一次,计数器加1,同时切换数码管位选,显示对应的数字。
阅读全文