51hei.png (26.01 KB, 下載次數(shù): 88)
下載附件
2021-4-19 15:13 上傳
單片機源程序如下:
- ORG 0000H
- A_BIT EQU 20H ;用于存放南北十位數(shù)
- B_BIT EQU 21H ;用于存放南北十位數(shù)
- C_BIT EQU 22H ;用于存放東西十位數(shù)
- D_BIT EQU 23H ; 用于存放東西位數(shù)
- TEMP1 EQU 24H ;用于存放第一二南北狀態(tài)要顯示的時間
- TEMP2 EQU 25H ;用于存放第一二東西狀態(tài)要顯示的時間
- TEMP3 EQU 26H ;用于存放第三第四南北狀態(tài)要顯示的時間
- TEMP4 EQU 27H;用于存放第三第四南北狀態(tài)要顯示的時間
- LJMP MAIN
- ORG 0003H ;外部中斷0入口
- LJMP INTA ;跳轉到外部0中斷
- ORG 0013H ;外部中斷1入口
- LJMP INTB ;跳轉到外部1中斷
- INTA: MOV A,P1 ;外部0中斷
- PUSH ACC
- MOV A,P2 ;中斷保護
- PUSH ACC
- MOV P1,#0FFH ;清除先前狀態(tài)
- MOV P2,#0FFH
- CLR P1.0
- CLR P1.4 ;南北通行,東西禁止通行
- CLR P1.6
- CLR P2.3
- JNB P3.2 ,$ ;判斷是否還在中斷狀態(tài)
- POP ACC
- MOV P2,A ;返回中斷前狀態(tài)
- POP ACC
- MOV P1,ACC
- RETI ;中斷返回
- INTB:MOV A,P1 ;外部1中斷
- PUSH ACC ;中斷保護
- MOV A,P2
- PUSH ACC
- MOV P1,#0FFH ;清除先前狀態(tài)
- MOV P2,#0FFH
- CLR P1.2
- CLR P2.1
- CLR P1.3 ;東西通行,南北禁止通行
- CLR P1.5
- JNB P3.3 ,$ ;判斷是否還在中斷狀態(tài)
- POP ACC
- MOV P2,A ;返回中斷前狀態(tài)
- POP ACC
- MOV P1,A
- RETI ;中斷返回
- MAIN:
- ORG 0100H ;初始情況
- MOV P1,#0FFH
- MOV P2,#0FFH ;滅所有燈
- MOV TMOD,#55H ;計數(shù)方式方式1
- MOV IE,#85H ;開中斷
- MOV TEMP1,#20 ;
- MOV TEMP2,#25
- MOV TEMP3,#25
- MOV TEMP4,#20
- STAR:
- MOV P1,#0FFH
- MOV P2,#0FFH ;滅所有燈
- MOV A,24H ;將顯示時間送A
- CJNE A,#20,T40T ;判斷時間,選初始值
- T20T: ;南北通行要顯示的時間為20的計數(shù)器初始值
- CLR TF0 ;清TF0
- CLR TF1 ;清TF1
- MOV TH1 ,#0FFH ;送20秒時的初始值
- MOV TL1 ,#0FCH ;在些設計20秒6輛為多車
- MOV TH0 ,#0FFH
- MOV TL0 ,#0FCH
- LJMP TEMP20 ;跳到20秒
- T40T: ;南北通行要顯示的時間為40的計數(shù)器初始值
- CLR TF0 ;清TF0
- CLR TF1 ;清TF1
- MOV TH1,#0FFH ;送40秒時的初始值
- MOV TL1 ,#0F8H ;在些設計40秒8輛為多車
- MOV TH0 ,#0FFH
- MOV TL0 ,#0F8H
- LJMP TEMP40 ;跳到40秒
- TEMP20: ;TEMP1=20情況
- SETB TR0 ;開始計數(shù)
- SETB TR1
- CLR P1.2
- CLR P2.1 ;南北通行,東西禁止通行
- CLR P1.3
- CLR P1.5
- MOV TEMP1,#20 ;南北要顯示的時間,
- MOV TEMP2,#25 ;東西要顯示的時間
- STLOP:
- ACALL DISPLAY1 ;調用顯示
- DEC TEMP1 ;時間夠一秒顯示時間減1
- DEC TEMP2
- MOV A,TEMP1
- CJNE A,#0,NEXT ;若顯示時間不為0保持現(xiàn)在狀態(tài)
- LJMP STAR2 ;若顯示時間為 0跳到第二狀態(tài)
- NEXT: LJMP STLOP
- STAR2: ;狀態(tài)1
- SETB P1.2
- CLR P1.1 ;南北黃燈,東西禁止通行
- SETB P1.3
- CLR P1.4
- MOV TEMP1,#05 ;南北要顯示的時間,
- MOV TEMP2,#05 ;東西要顯示的時間,
- STLOP2:
- ACALL DISPLAY1 ;調用顯示
- DEC TEMP1 ;時間夠一秒顯示時間減1
- DEC TEMP2
- MOV A,TEMP1
- CJNE A,#0,NEXT2 ;若顯示時間不為0保持現(xiàn)在狀態(tài)
- JB TF1 ,T40 ;判斷南北是否多車
- JB TF0 ,T40 ;判斷北南是否多車
- MOV TEMP1,#20 ;少車下次顯示時間為20秒
- LJMP STAR3 ;跳到狀態(tài)3
- T40:
- MOV TEMP1,#40 ; 多車下次顯示時間為40秒
- LJMP STAR3 ;若顯示時間為 0跳到第三狀態(tài)
- NEXT2:LJMP STLOP2
- TEMP40:;TEM=40 程序
- SETB TR0 ; 開始計數(shù)
- SETB TR1
- CLR P1.2
- CLR P2.1 ;南北通行,東西禁止通行
- CLR P1.3
- CLR P1.5
- MOV TEMP1,#40 ;南北要顯示的時間,
- MOV TEMP2,#45 ;東西要顯示的時間
- STLOP11:
- ACALL DISPLAY1 ;調用顯示
- DEC TEMP1 ;時間夠一秒顯示時間減1
- DEC TEMP2
- MOV A,TEMP1
- CJNE A,#0,NEXT11 ;若顯示時間不為0保持現(xiàn)在狀態(tài)
- LJMP STAR22 ;若顯示時間為 0跳到第二狀態(tài)
- NEXT11: LJMP STLOP11
- STAR22: ;狀態(tài)1
- SETB P1.2
- CLR P1.1 ;南北黃燈,東西禁止通行
- SETB P1.3
- CLR P1.4
- MOV TEMP1,#05 ;南北要顯示的時間,
- MOV TEMP2,#05 ;東西要顯示的時間,
- STLOP22:
- ACALL DISPLAY1 ;調用顯示
- DEC TEMP1 ;時間夠一秒顯示時間減1
- DEC TEMP2
- MOV A,TEMP1
- CJNE A,#0,NEXT22 ;若顯示時間不為0保持現(xiàn)在狀態(tài)
- JB TF1 ,T401 ; 判斷是否多車
- JB TF0 ,T401
- MOV TEMP1,#20 ;少車下次顯示時間為20秒
- LJMP STAR3
- T401:MOV TEMP1,#40 ;多車下次顯示時間為40秒
- LJMP STAR3 ;若顯示時間為 0跳到第三狀態(tài)
- NEXT22:LJMP STLOP22
- STAR3:
- MOV A,26H
- CJNE A,#25,T40T1 ;判斷時間,選初始值
- T20T1: ;南北通行要顯示的時間為20的計數(shù)器初始值
- CLR TF0 ; 清溢出位
- CLR TF1
- MOV TH1 ,#0FFH ; 給初值
- MOV TL1 ,#0FCH
- MOV TH0 ,#0FFH
- MOV TL0 ,#0FCH
- LJMP TEMP320
- T40T1: ;南北通行要顯示的時間為40的計數(shù)器初始值
- CLR TF0 ;
- CLR TF1
- MOV TH1,#0FFH ;給初值
- MOV TL1 ,#0F8H
- MOV TH0 ,#0FFH
- MOV TL0 ,#0F8H
- LJMP TEMP340
- TEMP320:;狀態(tài)三
- SETB TR1 ;南北停止計數(shù)
- SETB TR0 ;東西開始計數(shù)
- SETB P1.1 ;東西通行,南北禁止通行
- CLR P1.0
- SETB P1.1
- CLR P1.0
- SETB P1.5
- CLR P1.6
- SETB P2.1
- CLR P2.3
- MOV TEMP3,#25 ;南北要顯示的時間,
- MOV TEMP4,#20 ;東西要顯示的時間,
- STLOP33:
- ACALL DISPLAY ;調用顯示
- DEC TEMP3 ;時間夠一秒顯示時間減1
- DEC TEMP4
- MOV A,TEMP4
- CJNE A,#0,NEXT33 ;若顯示時間不為0保持現(xiàn)在狀態(tài)
- LJMP STAR34 ;若顯示時間為 0跳到第四狀態(tài)
- NEXT33:LJMP STLOP33
- STAR34: ;狀態(tài)四
- SETB P2.3
- CLR P2.2
- SETB P1.6 ;東西黃燈,南北禁止通行
- CLR P1.5
- MOV TEMP3,#05 ;南北要顯示的時間,
- MOV TEMP4,#05 ;東西要顯示的時間,
- STLOP34:
- ACALL DISPLAY ;調用顯示
- DEC TEMP3 ;時間夠一秒顯示時間減1
- DEC TEMP4
- MOV A,TEMP4
- CJNE A,#0,NEXT34 ;若顯示時間不為0保持現(xiàn)在狀態(tài)
- JB TF1 ,T402
- JB TF0 ,T402
- MOV TEMP3,#25
- LJMP STAR
- T402:
- MOV TEMP3,#45
- LJMP STAR
- NEXT34: LJMP STLOP34
- TEMP340 :
- SETB TR1 ;南北停止計數(shù)
- SETB TR0 ;東西開始計數(shù)
- SETB P1.1 ;東西通行,南北禁止通行
- CLR P1.0
- SETB P1.1
- CLR P1.0
- SETB P1.5
- CLR P1.6
- SETB P2.1
- CLR P2.3
- MOV TEMP3,#45 ;南北要顯示的時間,
- MOV TEMP4,#40 ;東西要顯示的時間,
- STLOP43:
- ACALL DISPLAY ;調用顯示
- DEC TEMP3 ;時間夠一秒顯示時間減1
- DEC TEMP4
- MOV A,TEMP4
- CJNE A,#0,NEXT43 ;若顯示時間不為0保持現(xiàn)在狀態(tài)
- LJMP STAR44 ;若顯示時間為 0跳到第四狀態(tài)
- NEXT43:LJMP STLOP43
- STAR44: ;狀態(tài)四
- SETB P2.3
- CLR P2.2
- SETB P1.6 ;東西黃燈,南北禁止通行
- CLR P1.5
- MOV TEMP3,#05 ;南北要顯示的時間,
- MOV TEMP4,#05 ;東西要顯示的時間,
- STLOP44:
- ACALL DISPLAY ;調用顯示
- DEC TEMP3 ;時間夠一秒顯示時間減1
- DEC TEMP4
- MOV A,TEMP3
- CJNE A,#0,NEXT44 ;若顯示時間不為0保持現(xiàn)在狀態(tài)
- JB TF1 ,T403
- JB TF0 ,T403
- MOV TEMP3,#25
- LJMP STAR
- T403:
- MOV TEMP3,#45
- LJMP STAR
- NEXT44: LJMP STLOP44
- ;顯示
- DISPLAY1:
- MOV A,TEMP1 ;將南北要顯示的數(shù)存放到A
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
交通燈.rar
(50.94 KB, 下載次數(shù): 57)
2021-4-19 11:38 上傳
點擊文件名下載附件
下載自取 下載積分: 黑幣 -5
|