利用c51单片机做一个24小时计数时钟程序
时间: 2023-08-05 16:26:47 浏览: 202
shizhong.rar_LED 时钟_单片机c51
好的,以下是一个基于C语言的24小时计数时钟程序示例:
```c
#include <reg52.h> // 引入STC51单片机头文件
#define display P0 // 定义数码管显示端口
void delay(unsigned int i); // 延时函数
void init(); // 初始化函数
void main() {
unsigned int sec = 0;
unsigned int min = 0;
unsigned int hour = 0;
init(); // 初始化时钟
while(1) { // 程序主循环
display = 0xff; // 关闭数码管显示
delay(5); // 延时
display = 0x00; // 打开数码管显示
delay(5); // 延时
sec++; // 秒数加1
if(sec >= 60) { // 如果秒数超过60秒,则分钟数加1
sec = 0;
min++;
}
if(min >= 60) { // 如果分钟数超过60分钟,则小时数加1
min = 0;
hour++;
}
if(hour >= 24) { // 如果小时数超过24小时,则重新从0开始计数
hour = 0;
}
display = sec % 10; // 显示秒数个位数
delay(2); // 延时
display = sec / 10; // 显示秒数十位数
delay(2); // 延时
display = min % 10; // 显示分钟数个位数
delay(2); // 延时
display = min / 10; // 显示分钟数十位数
delay(2); // 延时
display = hour % 10; // 显示小时数个位数
delay(2); // 延时
display = hour / 10; // 显示小时数十位数
delay(2); // 延时
}
}
void init() {
TMOD = 0x01; // 定时器0工作在16位定时模式
TH0 = 0xfc; // 定时器0初始值,1秒钟计数一次
TL0 = 0x66;
TR0 = 1; // 启动定时器0
ET0 = 1; // 打开定时器0中断
EA = 1; // 打开总中断
}
void delay(unsigned int i) {
unsigned int j, k;
for(j = 0; j < i; j++) {
for(k = 0; k < 125; k++) { // 延时
// do nothing
}
}
}
void timer0() interrupt 1 { // 定时器0中断服务程序
TH0 = 0xfc; // 重新设置定时器0初始值
TL0 = 0x66;
}
```
该程序使用了定时器0来计时,每秒钟触发一次中断,计数器加1。同时,程序使用了延时函数来控制数码管的显示,每隔一段时间刷新一次时间显示。
阅读全文