新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機用C語言實現交通燈

        51單片機用C語言實現交通燈

        作者: 時間:2016-11-25 來源:網絡 收藏
        51單片機C語言實現交通燈(紅綠燈)源程序
        交通燈,紅黃綠燈交替亮,怎樣實現呢?其實就是根據單片機定時器及倒計時的程序修改。

        源程序如下:



        #include

        bit red,green,yellow,turnred; //定義紅、黃、綠及轉紅標志

        code unsigned char tab[]=
        {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        //共陰數碼管 0-9

        unsigned char Dis_Shiwei;//定義十位
        unsigned char Dis_Gewei; //定義個位
        void delay(unsigned int cnt) //用于動態掃描數碼管的延時程序
        {
        while(--cnt);
        }

        main()
        {

        TMOD |=0x01;//定時器設置 10ms in 12M crystal定時器0,工作方式1,16位定時器
        TH0=0xd8; //65535-10000=55535=D8F0(十六進制)
        TL0=0xf0;
        IE= 0x82; //中斷控制,EA=1開總中斷,ET0=1:定時器0中斷允許
        TR0=1; //開定時器0中斷

        P1=0xfc;//紅燈亮,根據紅黃綠接燈的順序。
        red =1;
        while(1)
        {
        P0=Dis_Shiwei;//顯示十位,這里實現用8位數碼管,即左1位
        P2=0;
        delay(300);//短暫延時
        P0=Dis_Gewei; //顯示個位,左數,2位
        P2=1;
        delay(300);
        }

        }



        void tim(void) interrupt 1 using 1
        {
        static unsigned char second=60,count; //初值60

        TH0=0xd8;//重新賦值,10毫秒定時
        TL0=0xf0;
        count++;
        if (count==100)
        {
        count=0;
        second--;//秒減1
        if(second==0)
        { //這里添加定時到0的代碼 ,可以是燈電路,繼電器吸合等,或者執行一個程序
        if(red) //紅滅,先轉黃
        {
        red=0;yellow=1;
        second=4;
        P1=0xF3;//黃燈亮4秒,黃燈為過渡燈,再根據情況轉綠或轉紅
        }
        else if(yellow && !turnred)
        {
        yellow=0;green=1;
        second=25;
        P1=0xCF;//綠燈亮25秒,
        }
        else if(green)
        {
        yellow=1;green=0;
        second=4;
        P1=0xF3;//黃燈亮4秒
        turnred=1;
        }
        else if(yellow && turnred) //綠燈滅,轉黃燈,后紅燈,turnred=1時
        {
        red=1;yellow=0;
        P1=0xFC;//紅燈亮60秒
        second=60;
        turnred=0; //接下來是轉黃,綠。
        }

        }
        Dis_Shiwei=tab[second/10];//十位顯示值處理
        Dis_Gewei=tab[second]; //個位顯示處理

        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 乌拉特后旗| 邹平县| 达孜县| 铜鼓县| 鄱阳县| 永和县| 咸丰县| 北碚区| 房产| 清新县| 资源县| 小金县| 离岛区| 津南区| 石景山区| 通化市| 新沂市| 山阴县| 尖扎县| 巴塘县| 宁津县| 资溪县| 杭锦后旗| 寻甸| 得荣县| 永康市| 高雄县| 苍溪县| 德州市| 达尔| 金乡县| 客服| 凤翔县| 扶余县| 县级市| 白河县| 伊金霍洛旗| 楚雄市| 大宁县| 明溪县| 九江县|