51单片机电子时钟源代码
时间: 2023-09-30 18:10:55 浏览: 113
1602+18B20+DS1302电子时钟源程序_单片机_deal1wg_ds130218b20_DS130218B20_
5星 · 资源好评率100%
以下是一个简单的51单片机电子时钟的源代码,可以根据自己的需求进行修改和完善:
```c
#include <reg51.h> // 51单片机头文件
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管0-9的编码
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void display(unsigned char i) // 显示函数
{
P0 = table[i]; // 将数码管编码写入P0口
delay(1000); // 延时1s
}
void main()
{
unsigned char h = 0, m = 0, s = 0; // 时分秒
// 定时器0初始化,1s中断
TMOD = 0x01; // 定时器0工作模式1
TH0 = 0xfc; // 定时器0计数初值,1ms
TL0 = 0x18;
EA = 1; // 开全局中断
ET0 = 1; // 开定时器0中断
TR0 = 1; // 启动定时器0
while(1)
{
display(h / 10); // 显示小时的十位数
display(h % 10); // 显示小时的个位数
display(10); // 显示冒号
display(m / 10); // 显示分钟的十位数
display(m % 10); // 显示分钟的个位数
display(10); // 显示冒号
display(s / 10); // 显示秒钟的十位数
display(s % 10); // 显示秒钟的个位数
}
}
void timer0() interrupt 1 // 定时器0中断服务函数
{
TH0 = 0xfc; // 重新赋初值,1ms
TL0 = 0x18;
s++; // 秒加1
if(s == 60) // 如果秒钟为60,分钟加1
{
s = 0;
m++;
if(m == 60) // 如果分钟为60,小时加1
{
m = 0;
h++;
if(h == 24) // 如果小时为24,重新从0开始
{
h = 0;
}
}
}
}
```
这个程序使用了定时器0来进行时钟的计时,每隔1秒触发一次定时器中断,其中包括了时分秒的计算和显示函数。可以根据需要进行修改和调整。
阅读全文