• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

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

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

    作者: 時間:2012-11-08 來源:網絡 收藏

    采用51作為系統的MCU,基本完成兩組指示燈交替亮

    每個街口有左拐、直行及行人三種指示燈。直行燈每個燈有紅、黃、綠三種顏色。自行車與汽車共用左拐和直行燈。

    首先東西向直行綠燈和行人燈亮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

    本文引用地址:http://www.czjhyjcfj.com/article/170710.htm


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 浮梁县| 龙陵县| 嘉祥县| 龙井市| 北安市| 永修县| 清徐县| 酒泉市| 大厂| 荣成市| 铜鼓县| 呼和浩特市| 黑河市| 淳安县| 乌拉特中旗| 图们市| 万年县| 通化县| 盐山县| 武宁县| 泽库县| 永仁县| 西和县| 靖州| 广饶县| 来凤县| 双峰县| 旬邑县| 苍南县| 保德县| 正安县| 南阳市| 剑川县| 赣州市| 化州市| 永德县| 永新县| 黄龙县| 玉树县| 榆社县| 任丘市|