89C52数码管设置电子时钟
时间: 2023-07-04 19:22:08 浏览: 87
基于89c52的电子时钟
5星 · 资源好评率100%
89C52单片机可以通过其提供的IO口连接到数码管上,实现电子时钟的显示。以下是一个简单的示例程序,可以实现基于时分秒的电子时钟:
```
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code LedChar[]={
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f, //9
};
uchar code LedPlace[]={
0xfe, //第0位
0xfd, //第1位
0xfb, //第2位
0xf7 //第3位
};
void delay(uint i)
{
while(i--);
}
void main()
{
uchar hour=0, minute=0, second=0;
TMOD=0x01; //设置定时器0为模式1
TH0=0xfc; //定时器初值
TL0=0x18;
TR0=1; //启动定时器0
ET0=1; //开定时器0中断
EA=1; //开总中断
while(1)
{
P0=LedChar[hour/10];
P2=LedPlace[0];
delay(1000);
P0=LedChar[hour%10];
P2=LedPlace[1];
delay(1000);
P0=LedChar[minute/10];
P2=LedPlace[2];
delay(1000);
P0=LedChar[minute%10];
P2=LedPlace[3];
delay(1000);
P0=0x00;
}
}
void timer0() interrupt 1
{
TH0=0xfc; //定时器初值
TL0=0x18;
second++;
if(second==60) //一分钟
{
second=0;
minute++;
if(minute==60) //一小时
{
minute=0;
hour++;
if(hour==24) //一天
{
hour=0;
}
}
}
}
```
在上面的程序中,我们使用了定时器0来实现时间的计时,每隔1秒钟更新一次时钟的显示。具体的实现过程如下:
1. 首先定义了两个数组变量`LedChar`和`LedPlace`,分别存放数码管显示的字符和位置。
2. 然后定义了一个`delay`函数,用于实现简单的延时。
3. 在`main`函数中,我们启动了定时器0,并开启了定时器0中断。在主循环中,我们不断地更新数码管的显示,以实现时钟的实时更新。
4. 在定时器0中断处理函数`timer0`中,我们每隔1秒钟将秒数加1,并根据时间的不同段来更新时分秒的值。具体地,当秒数达到60时,将秒数清零并将分钟数加1;当分钟数达到60时,将分钟数清零并将小时数加1;当小时数达到24时,将小时数清零。
通过上面的程序,我们就可以实现一个简单的基于89C52单片机和数码管的电子时钟了。
阅读全文