51单片机8位数码管时分秒计时器的代码
时间: 2024-05-02 09:15:06 浏览: 185
51单片机是一种常用的8位微控制器,可以用来实现各种应用,包括时分秒计时器。下面是一个简单的51单片机8位数码管时分秒计时器的代码示例:
```c
#include <reg51.h>
// 定义数码管显示的数字对应的编码
unsigned char code digitCode[] = {
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90 // 9
};
// 定义全局变量,用于保存时、分、秒的值
unsigned char hour = 0;
unsigned char minute = 0;
unsigned char second = 0;
// 数码管显示函数
void display(unsigned char num) {
P2 = digitCode[num]; // 将对应数字的编码输出到P2口
}
// 延时函数,用于控制数码管的刷新速度
void delay() {
unsigned int i, j;
for (i = 0; i < 100; i++) {
for (j = 0; j < 1000; j++);
}
}
// 定时器中断处理函数,每秒钟触发一次
void timerInterrupt() interrupt 1 {
TH0 = 0xFC; // 设置定时器初值,使其每50ms溢出一次
TL0 = 0x67;
second++; // 秒数加1
if (second >= 60) {
second = 0;
minute++; // 分钟数加1
if (minute >= 60) {
minute = 0;
hour++; // 小时数加1
if (hour >= 24) {
hour = 0;
}
}
}
}
// 主函数
void main() {
TMOD = 0x01; // 设置定时器0为工作模式1
TH0 = 0xFC; // 设置定时器初值,使其每50ms溢出一次
TL0 = 0x67;
TR0 = 1; // 启动定时器0
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许总中断
while (1) {
display(hour / 10); // 显示小时的十位数
P1 = 0x01; // 打开第一个数码管
delay();
display(hour % 10); // 显示小时的个位数
P1 = 0x02; // 打开第二个数码管
delay();
display(minute / 10); // 显示分钟的十位数
P1 = 0x04; // 打开第三个数码管
delay();
display(minute % 10); // 显示分钟的个位数
P1 = 0x08; // 打开第四个数码管
delay();
display(second / 10); // 显示秒钟的十位数
P1 = 0x10; // 打开第五个数码管
delay();
display(second % 10); // 显示秒钟的个位数
P1 = 0x20; // 打开第六个数码管
delay();
}
}
```
这段代码使用了定时器中断来实现每秒钟更新一次时分秒的功能,并通过数码管显示出来。你可以根据自己的需求进行修改和扩展。
阅读全文