新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機的交通燈控制程序

        基于51單片機的交通燈控制程序

        作者: 時間:2012-11-08 來源:網絡 收藏
        每個街口有左拐、直行及行人三種指示燈。直行燈每個燈有紅、黃、綠三種顏色。自行車與汽車共用左拐和直行燈。

        首先東西向直行綠燈和行人燈亮1分鐘,左轉燈亮30秒,黃燈亮5秒(同時南北向紅燈亮95秒),然后東西向紅燈亮95秒鐘(同時首先南北向直行綠燈和行人燈亮1分鐘,左轉燈亮30秒,黃燈亮5秒),然后東西向的綠燈亮,依次類推。
        每次綠燈亮的時候,對應的行人燈亮。

        60S/30S/5S/60S/30S/5S
        東西道
        綠和行人/左轉/黃/紅/紅/紅
        南北道
        紅/紅/紅/綠和行人/左轉/黃
        行人燈亮的時候有聲音提示盲人能通過。
        突發交通事故的時候能夠緊急全紅燈。
        在有重要人物通過的時候能手動改為綠燈。

        ORG 0000H ;主程序的入口地址
        LJMP MAIN ;跳轉到主程序的開始處
        ORG 0003H ;外部中斷0的中斷程序入口地址
        ORG 000BH ;定時器0的中斷程序入口地址
        LJMP T0_INT ;跳轉到中斷服務程序處
        ORG 0013H ;外部中斷1的中斷程序入口地址
        MAIN : MOV SP,#50H
        MOV IE,#8EH ;CPU開中斷,允許T0中斷,T1中斷和外部中斷1中斷
        MOV TMOD,#51H ;設置T1為計數方式,T0為定時方式,且都工作于模式1
        MOV TH1,#00H ;T1計數器清零
        MOV TL1,#00H
        SETB TR1 ;啟動T1計時器
        SETB EX1 ;允許INT1中斷
        SETB IT1 ;選擇邊沿觸發方式
        MOV DPTR ,#0003H
        MOV A, #80H ;給8255賦初值,8255工作于方式0
        MOVX @DPTR, A
        AGAIN: JB P3.1,N0 ;判斷是否要設定東西方向紅綠燈時間的初值,若P3.1為1 則跳轉
        MOV A,P1
        JB P1.7,RED ;判斷P1.7是否為1,若為1則設定紅燈時間,否則設定綠燈時間
        MOV R0,#00H ;R0清零
        MOV R0,A ;存入東西方向綠燈初始時間
        MOV R3,A
        LCALL DISP1
        LCALL DELAY
        AJMP AGAIN
        RED: MOV A,P1
        ANL A,#7FH ;P1.7置0
        MOV R7,#00H ;R7清零
        MOV R7,A ;存入東西方向紅燈初始時間
        MOV R3,A
        LCALL DISP1
        LCALL DELAY
        AJMP AGAIN
        ;----------------------------------
        N0: SETB TR0 ;啟動T0計時器
        MOV 76H,R7 ;紅燈時間存入76H
        N00: MOV A,76H ;東西方向禁止,南北方向通行
        MOV R3,A
        MOV DPTR,#0000H ;置8255A口,東西方向紅燈亮,南北方向綠燈亮
        MOV A,#0DDH
        MOVX @DPTR, A
        N01: JB P2.0,B0
        N02: SETB P3.0
        CJNE R3,#00H,N01 ;比較R3中的值是否為0,不為0轉到當前指令處執行
        ;------黃燈閃爍5秒程序------
        N1: SETB P3.0
        MOV R3,#05H
        MOV DPTR,#0000H ;置8255A口,東西,南北方向黃燈亮
        MOV A,#0D4H
        MOVX @DPTR,A
        N11: MOV R4,#00H
        N12: CJNE R4,#7DH,$ ;黃燈持續亮0.5秒
        N13: MOV DPTR,#0000H ; 置8255A口,南北方向黃燈滅
        MOV A,#0DDH
        MOVX @DPTR,A
        N14: MOV R4,#00H
        CJNE R4,#7DH,$ ;黃燈持續滅0.5秒
        CJNE R3,#00H,N1 ;閃爍時間達5秒則退出
        ;-----------------------------------
        N2: MOV R7,#00H
        MOV A,R0 ;東西通行,南北禁止
        MOV R3,A
        MOV DPTR,#0000H ; 置8255A口,東西方向綠燈亮,南北方向紅燈亮
        MOV A,#0EBH
        MOVX @DPTR,A
        N21: JB P2.0,T03

        N22: CJNE R3,#00H,N21
        ;------黃燈閃爍5秒程序------
        N3: MOV R3,#05H
        MOV DPTR,#0000H ;置8255A口,東西,南北方向黃燈亮
        MOV A,#0E2H
        MOVX @DPTR,A
        N31: MOV R4,#00H
        CJNE R4,#7DH,$ ;黃燈持續亮0.5秒
        N32: MOV DPTR,#0000H ; 置8255A口,南北方向黃燈滅
        MOV A,#0EBH
        MOVX @DPTR,A
        N33: MOV R4,#00H
        CJNE R4,#7DH,$ ;黃燈持續滅0.5秒
        CJNE R3,#00H,N3 ;閃爍時間達5秒則退出
        SJMP N00
        ;------闖紅燈報警程序------
        B0: MOV R2,#03H ;報警持續時間3秒
        B01: MOV A,R3
        JZ N1 ;若倒計時完畢,不再報警
        CLR P3.0 ;報警
        CJNE R2,#00H,B01 ;判斷3秒是否結束
        SJMP N02
        ;------1秒延時子程序-------
        N7: RETI
        T0_INT:MOV TL0,#9AH ;給定時器T0送定時10ms的初值
        MOV TH0,#0F1H
        INC R4
        INC R5
        CJNE R5,#0FAH,T01 ;判斷延時是否夠一秒,不夠則調用顯示子程序
        MOV R5,#00H ;R5清零
        DEC R3 ;倒計時初值減一
        DEC R2 ;報警初值減一
        T01: ACALL DISP ;調用顯示子程序
        RETI ;中斷返回
        ;------顯示子程序------
        DISP: JNB P2.4,T02
        DISP1: MOV B,#0AH
        MOV A,R3 ;R3中值二轉十顯示轉換
        DIV AB
        MOV 79H,A
        MOV 7AH,B
        DIS: MOV A,79H ;顯示十位
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV DPTR,#0002H
        MOVX @DPTR,A
        MOV DPTR,#0001H
        MOV A,#0F7H
        MOVX @DPTR,A
        LCALL DELAY
        DS2: MOV A,7AH ;顯示個位
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV DPTR,#0002H
        MOVX @DPTR,A
        MOV DPTR,#0001H
        MOV A,#0FBH
        MOVX @DPTR,A
        RET
        ;------東西方向車流量檢測程序------
        T03: MOV A,R3
        SUBB A,#00H ;若綠燈倒計時完畢,不再檢測車流量
        JZ N3
        JB P2.0,T03
        INC R7
        CJNE R7,#64H,E1
        MOV R7,#00H ;中斷到100次則清零
        E1: SJMP N22
        ;------東西方向車流量顯示程序------
        T02: MOV B,#0AH
        MOV A,R7 ;R7中值二轉十顯示轉換
        DIV AB
        MOV 79H,A
        MOV 7AH,B
        DIS3: MOV A,79H ;顯示十位
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV DPTR,#0002H
        MOVX @DPTR,A
        MOV DPTR,#0001H
        MOV A,#0F7H
        MOVX @DPTR,A
        LCALL DELAY
        DS4: MOV A,7AH ;顯示個位
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV DPTR,#0002H
        MOVX @DPTR,A
        MOV DPTR,#0001H
        MOV A,#0FBH
        MOVX @DPTR,A
        LJMP N7
        ;------延時4MS子程序----------
        DELAY: MOV R1,#0AH
        LOOP: MOV R6,#64H
        NOP
        LOOP1: DJNZ R6,LOOP1
        DJNZ R1,LOOP
        RET
        ;------字符表------
        TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
        END

        電子鎮流器相關文章:電子鎮流器工作原理


        電子鎮流器相關文章:




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 绥棱县| 长子县| 台中县| 南昌县| 池州市| 金塔县| 连云港市| 德清县| 九龙坡区| 乐陵市| 榆中县| 黄梅县| 叙永县| 久治县| 临漳县| 常山县| 南雄市| 隆回县| 屏东市| 琼结县| 封开县| 扶沟县| 杭州市| 额济纳旗| 沁水县| 顺义区| 封开县| 黄骅市| 图木舒克市| 荔浦县| 抚州市| 噶尔县| 长兴县| 墨玉县| 光泽县| 冷水江市| 银川市| 河西区| 丹东市| 枣庄市| 赤壁市|