c51单片机0-9红绿灯倒计时用共阴八位数码管,且利用定时计数器实现精确秒
时间: 2023-06-14 16:05:16 浏览: 56
以下是一个简单的C语言程序,用于在C51单片机上实现0-9红绿灯倒计时,使用共阴八位数码管,并利用定时计数器实现精确秒:
```c
#include<reg51.h>
//定义数码管对应端口
#define digit P1
//定义数码管段选对应码表
unsigned char code disp[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int main()
{
//定义定时器计数器初值
unsigned int cnt=50000;
//定义倒计时秒数
unsigned char sec=10;
//定义红绿灯状态
bit red=0,green=0;
//开启定时器1
TMOD|=0x10;
TH1=(65536-cnt)/256;
TL1=(65536-cnt)%256;
TR1=1;
while(1)
{
//判断定时器是否溢出
if(TF1)
{
//重载计数器
TH1=(65536-cnt)/256;
TL1=(65536-cnt)%256;
TF1=0;
//数码管显示倒计时秒数
digit=disp[sec];
sec--;
//判断倒计时是否结束
if(sec==0)
{
//倒计时结束,切换红绿灯状态
if(red==0)
{
red=1;
green=0;
}
else
{
red=0;
green=1;
}
//重置倒计时秒数
sec=10;
}
}
//判断红绿灯状态,控制输出
if(red==1)
{
//红灯亮,绿灯灭
P2=0x01;
}
else
{
//绿灯亮,红灯灭
P2=0x02;
}
}
return 0;
}
```
程序中,我们利用定时器1实现精确秒的倒计时,并通过数码管显示倒计时秒数。当倒计时结束时,切换红绿灯状态。在程序中,我们通过P2口控制红绿灯的输出。
相关推荐


















