急求KEIL C51 红绿灯程序!(用C语言!)

模拟十字路红绿灯显示程序 使用P1口控制红 绿 黄 三个灯,七段数码管显示35秒倒计时,如果是红灯,时间到则变绿灯.如果是绿灯时,最后3秒显示黄灯,然后再显示红灯!



//12M晶振

//共阴数码管

#include <reg51.h>

sbit red=P1^0;

sbit green=P1^1;

sbit yellow=P1^2;

bit flag=1;

unsigned char code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char code wei[ ]={0xfd,0xfe};

unsigned char time=35;

void main()

{

    void show_time();

    void show_light();

    EA=1;

    ET0=1;

    TMOD=0x01;

    TH0=(65536-50000)/256;

    TL0=(65536-50000)%256;

    TR0=1;

    red=0;

    while(1)

    {

        show_time();

        show_light();

    }

}

void show_time()

{

    void delay();

    unsigned char num=time,i;

    for(i=0;i<2;++i)

    {

        P2=wei[i];

        P0=duan[num%10];

        delay();

        P0=0x00;

        num/=10;

    }

}

void delay()

{

    int i;

    for(i=1000;i;i--);

}

void show_light()

{

    if(flag)

    {

        if(!time)

        {

            flag=0;

            red=1;

            green=0;

            time=35;

        }

    }

    else

    {

        if(time>0&&time<4)

        {

            green=1;

            yellow=0;

        }       

        if(!time)

        {

            yellow=1;

            red=0;

            flag=1;

            time=35;

        }

    }

}

void dec_sec() interrupt 1

{

    static count=0;

    TH0=(65536-50000)/256;

    TL0=(65536-50000)%256;

    if(++count==20)

    {

        count=0;

        time--;

    }

}

温馨提示:答案为网友推荐,仅供参考
相似回答