求51单片机的红绿灯设计的源代码

任务:利用单片机的数码管和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);  //显示数码管
}