stc89c52数码管倒计时显示,keil5
时间: 2024-01-15 18:45:05 浏览: 121
下面是基于STC89C52单片机的数码管倒计时显示程序,使用Keil5进行编译和烧录。
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x6f};
void delay(uint z) // 延时函数
{
uint x, y;
for (x = z; x > 0; x--)
for (y = 110; y > 0; y--);
}
void main()
{
uchar second = 30; // 设置倒计时时间,单位为秒
uchar minute = 0;
uchar hour = 0;
uchar i = 0;
while (1)
{
P2 = 0xff;
P0 = table[second % 10]; // 显示秒的个位数
P2 = 0xfe; // 第一个数码管
delay(2); // 延时一段时间,保证显示效果
P2 = 0xff;
P0 = table[second / 10]; // 显示秒的十位数
P2 = 0xfd; // 第二个数码管
delay(2);
P2 = 0xff;
P0 = table[minute % 10]; // 显示分的个位数
P2 = 0xfb; // 第三个数码管
delay(2);
P2 = 0xff;
P0 = table[minute / 10]; // 显示分的十位数
P2 = 0xf7; // 第四个数码管
delay(2);
P2 = 0xff;
P0 = table[hour % 10]; // 显示时的个位数
P2 = 0xef; // 第五个数码管
delay(2);
P2 = 0xff;
P0 = table[hour / 10]; // 显示时的十位数
P2 = 0xdf; // 第六个数码管
delay(2);
if (second == 0 && minute == 0 && hour == 0) // 倒计时结束
{
for (i = 0; i < 50; i++) // 闪烁提示
{
P2 = 0xff;
P0 = 0x00;
delay(50);
P2 = 0xdf;
P0 = 0x00;
delay(50);
}
second = 30; // 复位
minute = 0;
hour = 0;
}
second--; // 每次循环秒数减一
if (second == 255) // 秒数为0时,分钟数减一
{
second = 59;
minute--;
if (minute == 255) // 分钟数为0时,小时数减一
{
minute = 59;
hour--;
}
}
}
}
```
该程序使用了共阳数码管,通过P2口的高四位选择要显示的数码管,通过P2口的低四位控制数码管的显示内容。在`delay`函数中,通过嵌套循环来实现延时,具体的延时时间需要自己测试调整。
程序中先设置了倒计时时间为30秒,然后每次循环秒数减一。当秒数为0时,分钟数减一,当分钟数为0时,小时数减一。当倒计时结束时,会闪烁提示,然后复位倒计时时间。
阅读全文