51单片机的电子钟c语言程序,基于51单片机的电子钟C语言程序
时间: 2023-11-10 18:06:32 浏览: 77
以下是基于51单片机的电子钟C语言程序的代码:
```
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code table[] = { // 数码管显示数字对应的值
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90
};
uchar second = 0; // 秒
uchar minute = 0; // 分
uchar hour = 0; // 时
uchar display[8]; // 数码管显示数组
void delayms(uint xms) { // 延时函数
uint i, j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void init() { // 初始化函数
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0x4c; // 定时器0初值,1ms
TL0 = 0x00;
ET0 = 1; // 允许定时器0中断
EA = 1; // 开总中断
TR0 = 1; // 启动定时器0
}
void displayTime() { // 数码管显示函数
uchar i;
for (i = 0; i < 8; i++) {
P0 = 0xff; // 关闭数码管
switch (i) { // 选择要显示的数码管
case 0: P2 = 0xfe; break; // 第一个数码管
case 1: P2 = 0xfd; break; // 第二个数码管
case 2: P2 = 0xfb; break; // 第三个数码管
case 3: P2 = 0xf7; break; // 第四个数码管
case 4: P2 = 0xef; break; // 第五个数码管
case 5: P2 = 0xdf; break; // 第六个数码管
case 6: P2 = 0xbf; break; // 第七个数码管
case 7: P2 = 0x7f; break; // 第八个数码管
}
P0 = table[display[i]]; // 显示对应数字
delayms(5); // 延时,避免闪烁
}
}
void main() {
init();
while (1) {
display[0] = hour / 10; // 显示小时的十位数
display[1] = hour % 10; // 显示小时的个位数
display[2] = minute / 10; // 显示分钟的十位数
display[3] = minute % 10; // 显示分钟的个位数
display[4] = second / 10; // 显示秒钟的十位数
display[5] = second % 10; // 显示秒钟的个位数
display[6] = 10; // 显示冒号
display[7] = 10; // 显示空格
displayTime(); // 数码管显示函数
}
}
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;
}
}
}
}
```
注:以上代码仅供参考,具体实现可能会因硬件不同而有所差异,请以实际情况为准。
阅读全文