c51两位数码管倒计时
时间: 2023-12-31 18:04:47 浏览: 29
以下是基于C51单片机的两位数码管倒计时程序,可以通过P0口控制数码管的显示。假设使用的是共阳数码管。
```c
#include <reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char num=99; // 初始倒计时时间为99秒
void delay(unsigned int i) // 延时函数,单位为毫秒
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(unsigned char n) // 数码管显示函数
{
unsigned char a,b;
a=n/10; // 十位数
b=n%10; // 个位数
dula=1; // 打开十位数段选,关闭个位数段选
P0=0xc0+a;
delay(1);
dula=0;
wela=1; // 打开第一位数码管,关闭第二位数码管
P0=0xfe;
delay(1);
wela=0;
dula=1; // 打开个位数段选,关闭十位数段选
P0=0xc0+b;
delay(1);
dula=0;
wela=1; // 打开第二位数码管,关闭第一位数码管
P0=0xfd;
delay(1);
wela=0;
}
void main()
{
while(1)
{
display(num); // 显示当前时间
delay(1000); // 延时1秒
num--; // 时间减1秒
if(num==0) // 时间到
{
num=99; // 重新开始倒计时
}
}
}
```
在程序中,使用了两个函数:`delay()` 和 `display()`。`delay()` 函数用于实现延时,以控制显示的时间;`display()` 函数则用于实现数码管的显示。
程序中使用了两个全局变量:`num` 和 `time`,分别表示倒计时的时间和当前时间。在主函数中,使用 `while` 循环不断更新时间并显示。当 `num` 为0时,表示时间到了,需要重新开始倒计时。
其中,数码管的控制通过P0口实现,P2.6和P2.7分别用于控制数码管的段选和位选。具体的控制方法可以参考数码管的控制电路。