中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)交通燈設(shè)計(jì)源程序

        單片機(jī)交通燈設(shè)計(jì)源程序

        作者: 時(shí)間:2014-01-13 來源:網(wǎng)絡(luò) 收藏
        #include reg51.h>
        #include intrins.h>
        #define uchar unsigned char
        #define uint unsigned int
        sbit k1=P1^6;
        sbit k2=P1^7;
        sbit k3=P2^7;
        sbit k4=P3^0;
        sbit yellowled_nb=P1^4; //南北黃燈
        sbit yellowled_dx=P1^1; //東西黃燈
        uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共陰
        uchar data dig; //位選
        uchar data led; //
        uchar data buf[4];
        uchar data sec_dx=20;//東西數(shù)碼指示值
        uchar data sec_nb=20;//南北數(shù)碼指示值
        uchar data set_timedx=20;
        uchar data set_timenb=20;//倒計(jì)時(shí)設(shè)置的鍵值保存
        uchar data b;//定時(shí)器中斷次數(shù)
        bit time;//燈狀態(tài)循環(huán)標(biāo)志
        bit int0_time;//中斷強(qiáng)行標(biāo)志
        bit set;//調(diào)時(shí)方向切換鍵標(biāo)志
        void delay(int ms);//延時(shí)子程序
        void key();//按鍵掃描子程序
        void key_to1();//鍵處理子程序
        void key_to2();
        void display();//顯示子程序
        void main()
        {
        TMOD=0X01;
        TH0=0X3C;
        TL0=0XB0;
        EA=1;
        ET0=1;
        TR0=1;
        EX0=1;
        EX1=1;
        P1=0Xf3;// 東西通行
        while(1)
        {
        key(); //調(diào)用按鍵掃描程序
        display(); //調(diào)用顯示程序
        }
        }
        void key() //按鍵掃描子程序
        {
        if(k1!=1)
        {
        delay(10);
        if(k1!=1)
        {
        while(k1!=1);
        key_to1();
        }
        }
        if(k2!=1)
        {
        delay(10);
        if(k2!=1)
        {
        while(k2!=1);
        key_to2();
        }
        }
        if(k4!=1)
        {
        delay(10);
        if(k4!=1)
        {
        while(k4!=1);
        set=!set;
        }
        }
        if(k3!=1int0_time==1)
        {
        TR0=1; //啟動(dòng)定時(shí)器
        sec_nb=20;
        sec_dx=20;
        int0_time=0;//清標(biāo)志
        } else if(k3!=1int0_time==0)
        {
        TR0=1;
        set_timenb=sec_nb;
        set_timedx=sec_dx; //設(shè)置的鍵值返回保存
        }
        }
        void display()
        {
        buf[1]=sec_dx/10; //第1位 東西秒十位
        buf[2]=sec_dx%10; //第2位 東西秒個(gè)位
        buf[3]=sec_nb/10; //第3位 南北秒十位
        buf[0]=sec_nb%10; //第4位 南北秒個(gè)位
        P0=table[buf[led]];
        delay(2); //先延時(shí),提前顯示一位了
        P2=dig;
        dig=_crol_(dig,1);
        led++;
        if (led==4)
        {led=0;
        dig=0xfe;
        }
        }
        void time0(void) interrupt 1 using 1 //定時(shí)中斷子程序
        {
        b++;
        if(b==10) // 定時(shí)器中斷次數(shù)。
        {
        b=0;
        sec_dx--;
        sec_nb--;
        /******************南北黃燈閃爍判斷*************************/
        if(sec_nb==3time==0)
        {
        yellowled_nb=1;//南北黃燈亮
        delay(300);
        yellowled_nb=0;
        }
        if(sec_nb==2time==0)
        {
        yellowled_nb=1;//南北黃燈亮
        delay(300);
        yellowled_nb=0;
        }
        if(sec_nb==1time==0)
        {
        yellowled_nb=1;
        delay(300);
        yellowled_nb=0;
        }
        /*******************東西黃燈閃判斷************************/
        if(sec_dx==3time==1)
        {
        yellowled_dx=1;//南北黃燈亮
        delay(300);
        yellowled_dx=0;
        }
        if(sec_dx==2time==1)
        {
        yellowled_dx=1;//南北黃燈亮
        delay(300);
        yellowled_dx=0;
        }
        if(sec_dx==1time==1)
        {
        yellowled_dx=1;
        delay(300);
        yellowled_dx=0;
        }
        /*******************************************/
        if(sec_dx==0||sec_nb==0) //東西或南北先到達(dá)1S時(shí)即開始重新計(jì)時(shí)
        {
        sec_dx=set_timedx;
        sec_nb=set_timenb; //第一次循環(huán)結(jié)束重置
        if(time==1)
        {
        P1=0XF3; //東西通行
        }
        else
        {
        P1=0xde; //南北通行
        }
        time=!time; //取反
        }
        }
        }
        void key_to1()
        {
        TR0=0; //關(guān)定時(shí)器
        if(set==0)
        sec_nb++; //南北加1S
        else
        sec_dx++;//東西加1S
        if(sec_nb==100)
        sec_nb=1;
        if( sec_dx==100)
        sec_dx=1;//加到100置1
        }
        void key_to2()
        {
        TR0=0;//關(guān)定時(shí)器
        if(set==0)
        sec_nb--; //南北減1S
        else
        sec_dx--; //東西減1S
        if(sec_nb==0)
        sec_nb=99;
        if( sec_dx==0 )
        sec_dx=99;//減到1重置99


        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉