新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSC51單片機交通燈程序

        MSC51單片機交通燈程序

        作者: 時間:2012-08-16 來源:網絡 收藏
        /***************************************************************
        * 程序名稱:交通燈 晶振:12.00 P1口
        * 實驗對象:HC6800學習開發板
        * 單 片 機:AT89S52或STC89C52 時間:紅綠燈各亮10s
        *
        * 更多的資料和程序共享請關注51hei.com
        ****************************************************************/
        /#include reg52.h>
        #define uchar unsigned char /*宏定義 */
        #define uint unsigned int /*宏定義 */
        uchar sec,sec1; /*秒*/
        uchar int_num; /*定時溢出作用標號*/
        sbit reda=P1^0; //A路口紅燈
        sbit yellowa=P1^1; //A路口黃燈
        sbit greena=P1^2; //A路口綠燈
        sbit redb=P1^3; //B路口紅燈
        sbit yellowb=P1^4; //b路口黃燈
        sbit greenb=P1^5; //b路口綠燈
        void redyellowb(); //b路口紅黃燈閃爍
        void redyellowa(); //a路口紅黃燈閃爍
        void delay10ms(uint x); //閃爍延時
        void inter_init(); /*定時器初始化子函數聲明*/


        /****專用數碼管顯示表***/
        //uchar code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; /*0x40顯示“一”符號*/
        //uchar code wema[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00};




        //---------------------初始化T0函數--------------------------
        void time0(void) interrupt 1 /*定時器T0服務子程序*/
        {
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        int_num++;
        }

        //---------------------定時器函數--------------------------
        void inter_init() /*定時器初始化子函數*/
        {
        EA=1;
        ET0=1; /*打開定時器T0*/
        TMOD=0x01; /*工作方式1*/
        TCON = 0x00; /*觸發方式*/
        IP = 0x01; /*中斷優先級別,T0優先*/
        TH0=(65535-50000)/256; /*置初值,大約50ms一個中斷 */
        TL0=(65535-50000)%256;
        TR0=1; /*置位TR0,啟動定時器0*/
        }
        //--------------------- 交通燈變換--------------------------
        void time10()
        {
        if(int_num==20) //20為1s可改為10加速調試
        {
        int_num=0;
        sec++;
        sec1++;
        if(sec==10) //10s
        {
        greenb=1; // b路口綠燈關
        EA=0; // 關中斷
        redyellowa(); // a路口紅黃燈共閃(調用)
        reda=1; // a路口紅燈關
        greena=0; // a路口綠燈開
        redb=0; // b路口紅燈開
        EA=1; // 開中斷
        }
        if(sec1==20) //20s
        {
        greena=1; // a路口綠燈關
        EA=0; // 關中斷
        redyellowb(); // b路口紅黃燈
        redb=1; // b路口紅燈關
        greenb=0; // b路口綠燈開
        reda=0; // a路口紅燈開
        sec=0; // 秒清零
        EA=1; // 關中斷
        sec1=0; // 秒1清零 ()
        }
        } //
        }

        //------------------------------10ms時間調用----------------------------------

        void delay10ms(uint x)
        { uint i,j; // 聲明變量
        for (i=1;ix;i++) // 執行x次,延遲X*10ms
        for (j=1;j120;j++);// 執行120次,延遲10ms
        } // delay1ms()函數結束

        //---------------------- // a路口紅黃燈共閃(調用)---------------------------
        void redyellowa()
        {
        yellowb=0;redb=0;
        delay10ms(50);
        yellowb=1;redb=1;
        delay10ms(50);
        yellowb=0;redb=0;
        delay10ms(50);
        yellowb=1;redb=1;
        delay10ms(50);
        yellowb=0;redb=0;
        delay10ms(50);
        yellowb=1;redb=1;
        delay10ms(50);
        yellowb=0;redb=0;
        delay10ms(50);
        yellowb=1;redb=1;
        }
        //---------------------- // b路口紅黃燈共閃(調用)---------------------------
        void redyellowb()
        {
        yellowa=0;reda=0;
        delay10ms(50);
        yellowa=1;reda=1;
        delay10ms(50);
        yellowa=0;reda=0;
        delay10ms(50);
        yellowa=1;reda=1;
        delay10ms(50);
        yellowa=0;reda=0;
        delay10ms(50);
        yellowa=1;reda=1;
        delay10ms(50);
        yellowa=0;reda=0;
        delay10ms(50);
        yellowa=1;reda=1;
        }
        //---------------------主函數--------------------------------
        void main()
        {
        inter_init(); /*定時器初始化*/
        reda=0;greenb=0; // 路燈初始化
        while(1) //死循環

        {

        time10(); //調用


        }
        }


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 庆城县| 芮城县| 岑巩县| 焦作市| 勃利县| 温泉县| 泰顺县| 日喀则市| 阿荣旗| 虹口区| 香格里拉县| 买车| 和顺县| 洪湖市| 高淳县| 集安市| 辽宁省| 都昌县| 安远县| 苏州市| 苏尼特左旗| 富顺县| 湖南省| 屯留县| 子长县| 江阴市| 洛南县| 金湖县| 永寿县| 鄂托克前旗| 陵水| 连云港市| 澄江县| 台中县| 常山县| 宁德市| 凌云县| 万山特区| 黔南| 新疆| 肥乡县|