单片机控制数码管显示时间代码 - AT89C51 实战教程
以下是一个简单的单片机控制数码管显示时间的代码,使用的是AT89C51单片机和共阳数码管。
#include <reg51.h> // 引入单片机头文件
// 定义数码管段选编码
unsigned char code digit[10] = {
0xc0, // 0
0xf9, // 1
0xa4, // 2
0xb0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xf8, // 7
0x80, // 8
0x90 // 9
};
void delay(unsigned int count) { // 延时函数
unsigned int i, j;
for (i = 0; i < count; i++)
for (j = 0; j < 120; j++);
}
void main() {
unsigned char hour = 12; // 初始化小时数为12
unsigned char minute = 0; // 初始化分钟数为0
unsigned char second = 0; // 初始化秒数为0
while (1) { // 循环显示时间
P2 = digit[hour / 10]; // 显示十位小时数
P0 = 0xfe; // 选择第一位数码管
delay(5); // 延时一段时间
P2 = digit[hour % 10]; // 显示个位小时数
P0 = 0xfd; // 选择第二位数码管
delay(5);
P2 = digit[minute / 10]; // 显示十位分钟数
P0 = 0xfb; // 选择第三位数码管
delay(5);
P2 = digit[minute % 10]; // 显示个位分钟数
P0 = 0xf7; // 选择第四位数码管
delay(5);
P2 = digit[second / 10]; // 显示十位秒数
P0 = 0xef; // 选择第五位数码管
delay(5);
P2 = digit[second % 10]; // 显示个位秒数
P0 = 0xdf; // 选择第六位数码管
delay(5);
second++; // 秒数加1
if (second == 60) { // 如果秒数达到60,则将分钟数加1
second = 0;
minute++;
if (minute == 60) { // 如果分钟数达到60,则将小时数加1
minute = 0;
hour++;
if (hour == 24) // 如果小时数达到24,则将小时数重置为0
hour = 0;
}
}
}
}
上述代码使用了一个循环来不断地显示当前时间,每个数码管的显示时间间隔为5毫秒,可以根据需要进行调整。在每次循环中,先分别计算出当前的小时数、分钟数和秒数,并将它们分别显示在数码管上,然后将秒数加1,如果秒数达到60,则将分钟数加1,如果分钟数达到60,则将小时数加1,如果小时数达到24,则将小时数重置为0。这样就可以实现一个简单的单片机控制数码管显示时间的功能了。
原文地址: https://www.cveoy.top/t/topic/l3aI 著作权归作者所有。请勿转载和采集!