用51单片机连接共阴极8位数码管显示数字时钟代码
时间: 2024-03-09 08:46:07 浏览: 176
以下是用51单片机连接共阴极8位数码管显示数字时钟的基本代码,仅供参考:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = { // 共阴极8位数码管显示0~9的编码值
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
uchar hour = 0; // 小时数
uchar minute = 0; // 分钟数
uchar second = 0; // 秒数
void delay(uint t) { // 延时函数
uint i, j;
for (i = t; i > 0; i--)
for (j = 110; j > 0; j--);
}
void display(uchar *p) { // 数码管显示函数
uchar i;
for (i = 0; i < 8; i++) { // 8位数码管循环显示
P2 = 0xff; // 关闭数码管
P0 = p[i]; // 设置要显示的数字
P2 = ~(1 << i); // 打开对应的数码管
delay(1); // 延时1ms
}
}
void main() {
TMOD = 0x01; // 定时器0工作方式1,16位计数器模式
TH0 = 0x4c; // 定时器初值,1ms定时
TL0 = 0x00;
EA = 1; // 开启总中断
ET0 = 1; // 开启定时器0中断
TR0 = 1; // 开启定时器0
while (1) { // 主循环
uchar p[8];
p[0] = table[hour / 10]; // 显示小时的十位数字
p[1] = table[hour % 10]; // 显示小时的个位数字
p[2] = 0x40; // 显示冒号
p[3] = table[minute / 10]; // 显示分钟的十位数字
p[4] = table[minute % 10]; // 显示分钟的个位数字
p[5] = 0x40; // 显示冒号
p[6] = table[second / 10]; // 显示秒的十位数字
p[7] = table[second % 10]; // 显示秒的个位数字
display(p); // 数码管显示
}
}
void timer0() interrupt 1 { // 定时器0中断服务函数
TH0 = 0x4c;
TL0 = 0x00;
second++; // 秒数加1
if (second == 60) { // 如果秒数达到60
second = 0; // 秒数清零
minute++; // 分钟数加1
if (minute == 60) { // 如果分钟数达到60
minute = 0; // 分钟数清零
hour++; // 小时数加1
if (hour == 24) // 如果小时数达到24
hour = 0; // 小时数清零
}
}
}
```
注意:以上代码仅供参考,具体实现方式可能因人而异。同时,为了保证代码的正确性和可靠性,建议在编写代码时仔细思考和测试。
阅读全文