當前位置:編程學習大全網 - 熱門推薦 - 單片機交通燈程序

單片機交通燈程序

采用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

  • 上一篇:中央政府湖南人有哪些
  • 下一篇:杭州哪裏租房子好
  • copyright 2024編程學習大全網