51单片机时分秒显示C语言程序
时间: 2023-12-05 16:05:54 浏览: 50
以下是一个基于51单片机的时分秒显示C语言程序示例:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = { // 数码管显示表
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f // 9
};
void delay(uint i) // 延时函数
{
while(i--);
}
void main()
{
uchar hour, minute, second;
uint i;
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0x4c; // 定时器0初值高位
TL0 = 0x00; // 定时器0初值低位
TR0 = 1; // 启动定时器0
while(1) // 时分秒循环显示
{
if(TF0 == 1) // 定时器0溢出
{
TF0 = 0; // 清除定时器0溢出标志
second++; // 秒加1
if(second == 60) // 分钟进位
{
second = 0;
minute++;
}
if(minute == 60) // 小时进位
{
minute = 0;
hour++;
}
if(hour == 24) // 一天结束
{
hour = 0;
}
}
P0 = 0xff; // 全部数码管不显示
P2 = 0x01; // 第1位数码管显示
P0 = table[hour / 10]; // 显示小时的十位数
delay(1000); // 延时1秒
P0 = 0xff; // 全部数码管不显示
P2 = 0x02; // 第2位数码管显示
P0 = table[hour % 10]; // 显示小时的个位数
delay(1000); // 延时1秒
P0 = 0xff; // 全部数码管不显示
P2 = 0x04; // 第3位数码管显示
P0 = table[minute / 10]; // 显示分钟的十位数
delay(1000); // 延时1秒
P0 = 0xff; // 全部数码管不显示
P2 = 0x08; // 第4位数码管显示
P0 = table[minute % 10]; // 显示分钟的个位数
delay(1000); // 延时1秒
P0 = 0xff; // 全部数码管不显示
P2 = 0x10; // 第5位数码管显示
P0 = table[second / 10]; // 显示秒的十位数
delay(1000); // 延时1秒
P0 = 0xff; // 全部数码管不显示
P2 = 0x20; // 第6位数码管显示
P0 = table[second % 10]; // 显示秒的个位数
delay(1000); // 延时1秒
}
}
```
该程序使用定时器0来进行秒数累加,并通过数码管实现时分秒的循环显示。程序中使用了一个数码管显示表将数字转换为相应的数码管显示码。