用c语言编写一个STC89C52的51单片机程序,做一个数字时钟,实现的功能为显示时、分、秒
时间: 2024-03-01 17:54:48 浏览: 82
好的,我可以为您提供一个简单的STC89C52的51单片机数字时钟程序,以下是代码:
```c
#include<reg52.h> //包含STC89C52的头文件
unsigned char second, minute, hour; //定义秒、分、时变量
void delay(unsigned int i) //延时函数
{
unsigned int j, k;
for(j=0;j<i;j++)
for(k=0;k<125;k++);
}
void display(unsigned char num) //数码管显示函数
{
unsigned char code table[]={
// 0 1 2 3 4 5 6 7 8 9
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
P0 = table[num]; //将数码管段码通过P0口输出
}
void main()
{
TMOD = 0x01; //设置计时器T0为模式1
TH0 = 0x3c; //设置计时器T0的初始值
TL0 = 0xb0;
TR0 = 1; //启动计时器T0
ET0 = 1; //允许计时器T0中断
EA = 1; //开启总中断
while(1)
{
display(hour/10); //显示时的十位
P2 = 0xfe; //选择第一位数码管
delay(5); //延时5毫秒
display(hour%10); //显示时的个位
P2 = 0xfd; //选择第二位数码管
delay(5);
display(minute/10); //显示分的十位
P2 = 0xfb; //选择第三位数码管
delay(5);
display(minute%10); //显示分的个位
P2 = 0xf7; //选择第四位数码管
delay(5);
display(second/10); //显示秒的十位
P2 = 0xef; //选择第五位数码管
delay(5);
display(second%10); //显示秒的个位
P2 = 0xdf; //选择第六位数码管
delay(5);
}
}
void timer0() interrupt 1 //计时器T0中断函数
{
TH0 = 0x3c; //重置计时器T0的初始值
TL0 = 0xb0;
second++; //秒数加1
if(second == 60) //如果秒数等于60,进位到分
{
second = 0;
minute++;
if(minute == 60) //如果分数等于60,进位到时
{
minute = 0;
hour++;
if(hour == 24) //如果小时等于24,归零
{
hour = 0;
}
}
}
}
```
您可以根据自己的需要对代码进行修改,比如更改延时时间、数码管接口等。希望能对您有所帮助!
阅读全文