单片机秒表23-59-59程序代码
时间: 2023-07-04 22:11:02 浏览: 138
以下是一种可能的单片机秒表23-59-59程序代码,使用的是8051单片机:
```c
#include <reg51.h>
// 定义数码管显示的端口
sbit dig1 = P1^0;
sbit dig2 = P1^1;
sbit dig3 = P1^2;
sbit dig4 = P1^3;
// 定义数码管显示的数字
unsigned char code num[10] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// 定义数码管显示的时间
unsigned char hour = 0;
unsigned char min = 0;
unsigned char sec = 0;
// 定义定时器中断处理函数
void timer_isr() interrupt 1
{
TH0 = 0xFC; // 重新赋值计时器初值
TL0 = 0x18;
sec++; // 秒数加1
if (sec == 60) { // 如果秒数达到60秒
sec = 0; // 秒数清零
min++; // 分钟数加1
if (min == 60) { // 如果分钟数达到60分钟
min = 0; // 分钟数清零
hour++; // 小时数加1
if (hour == 24) { // 如果小时数达到24小时
hour = 0; // 小时数清零
}
}
}
}
void main()
{
// 初始化定时器
TMOD = 0x01; // 使用定时器0,工作模式1(16位定时器)
TH0 = 0xFC; // 计时器初值为0xFC18,时钟频率为11.0592MHz
TL0 = 0x18;
TR0 = 1; // 启动定时器
ET0 = 1; // 允许定时器中断
// 初始化数码管显示
dig1 = dig2 = dig3 = dig4 = 1;
// 循环显示时间
while (1) {
// 数码管1显示小时的十位数
dig1 = 0;
P2 = num[hour / 10];
dig1 = 1;
// 数码管2显示小时的个位数
dig2 = 0;
P2 = num[hour % 10];
dig2 = 1;
// 数码管3显示分钟的十位数
dig3 = 0;
P2 = num[min / 10];
dig3 = 1;
// 数码管4显示分钟的个位数
dig4 = 0;
P2 = num[min % 10];
dig4 = 1;
// 延时1毫秒
for (unsigned int i = 0; i < 1000; i++);
}
}
```
这段代码使用定时器0来计时,每秒钟触发一次定时器中断,从而更新秒数、分钟数和小时数,并通过数码管显示出来。代码中使用了常量数组来保存数码管显示的数字,使用了位控制来控制数码管的显示。
阅读全文