任务:利用单片机的数码管和led灯来实现红绿灯,要求数码管倒计时;有红灯35秒,黄灯5秒,绿灯30秒并配合led灯,利用中断和定时器实现。
求源代码
以下代码仅提供参考
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LED P0 // 定义LED接口
uchar LED_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管码表
void delay(uint xms) //延时xms的函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void show_LED(uchar num) //数码管显示
{
P2=0xff;
P0=LED_code[num];
P2=0xfe;
}
void timer0() interrupt 1 //定时器0中断函数
{
static uchar cnt=35; //定义计数器cnt
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //重新赋值,实现0.01s的延时
cnt--;
if(cnt==0) //当计数器为0时
{
LED=0xff; //红灯亮
cnt=35; //cnt重新赋值为35,从35s开始倒计时
}
if(cnt==30) //当计数器为30时
{
LED=0x00; //绿灯亮
cnt=30; //cnt重新赋值为30,从30s开始倒计时
}
if(cnt==5) //当计数器为5时
{
LED=0x7f; //黄灯亮
cnt=5; //cnt重新赋值为5,从5s开始倒计时
}
show_LED(cnt); //显示数码管
}