请你用C语言写一段51单片机程序:数码管首先显示 00-00 延时 1s 左右,每秒秒自动加 1, 显示从 00-01,依次自加,直到 00-59,1s 以后变成 01- 00。然后秒 继续自加当时间到达 59-59 之后(建议直接修改初始设定的时间如 “59-00”),再来一秒,显示又从 00-00 开始。
时间: 2023-05-11 21:03:38 浏览: 304
以下是程序代码:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = { // 数码管显示表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
void delay(uint t) { // 延时函数
uint i, j;
for (i = t; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main() {
uchar i, j, k, l;
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0x3c; // 定时器初值
TL0 = 0xb0;
TR0 = 1; // 启动定时器
while (1) {
if (TF0 == 1) { // 定时器溢出
TF0 = 0; // 清除溢出标志
TH0 = 0x3c; // 重新赋初值
TL0 = 0xb0;
i++; // 秒数加1
if (i == 60) { // 分钟数加1
i = 0;
j++;
if (j == 60) { // 小时数加1
j = 0;
k++;
if (k == 24) // 一天结束,重新开始
k = 0;
}
}
l = i % 10; // 个位数
P0 = table[l];
P2 = 0xfe; // 选择第一个数码管
delay(5); // 延时一段时间
P2 = 0xff; // 关闭数码管
l = i / 10; // 十位数
P0 = table[l];
P2 = 0xfd; // 选择第二个数码管
delay(5);
P2 = 0xff;
l = j % 10;
P0 = table[l];
P2 = 0xfb; // 选择第三个数码管
delay(5);
P2 = 0xff;
l = j / 10;
P0 = table[l];
P2 = 0xf7; // 选择第四个数码管
delay(5);
P2 = 0xff;
}
}
}
阅读全文