|
單片機(jī)
0.png (36.17 KB, 下載次數(shù): 62)
下載附件
2016-12-23 04:14 上傳
- ;------------------------------------
- ;程序?qū)崿F(xiàn)功能
- ;西南北路口直行與轉(zhuǎn)彎交替通行,數(shù)碼管顯示直行通行倒計(jì)時(shí),紅綠黃燈顯示包括人行道在內(nèi)的道路交通狀態(tài)。
- ;某一方向道路擁擠時(shí),可以人工控制調(diào)節(jié)東西南北方向通行時(shí)間。
- ;緊急情況時(shí),各路口交通燈顯示紅燈,數(shù)碼管保持?jǐn)?shù)據(jù)不變。
- ;工作寄存器及存儲(chǔ)單元分配
- ;1.工作寄存器
- ;R2設(shè)置為定時(shí)器定時(shí)中斷次數(shù),R6、R7用于延時(shí)程序中的寄存器
- ;2.片內(nèi)存儲(chǔ)單元
- ;30H、31H作為兩組數(shù)碼管顯示數(shù)據(jù)存儲(chǔ)單元;32H、33H作為交通燈初始狀態(tài)存儲(chǔ)單元;40H、41H作為交通燈顯示數(shù)據(jù)存儲(chǔ)單元
- ;3.標(biāo)志位
- ;00H:南北通行標(biāo)志位 ; 01H:東西通行標(biāo)志位;02H:緊急事件標(biāo)志位
- ;-----------------------------------
- SNF EQU 00H ;;;南北通行標(biāo)志位
- EWF EQU 01H ;;;東西通行標(biāo)志位
- URF EQU 02H ;;;緊急事件標(biāo)志位
- ORG 0000H
- LJMP MAIN ;;;上電轉(zhuǎn)主程序
- ORG 000BH ;;;定時(shí)中斷入口
- LJMP DSZD
- ORG 0003H ;;;緊急中斷入口
- LJMP URZD
- ORG 0030H
- MAIN: LCALL INIT ;;;調(diào)用初始化子程序
- LOOP: LCALL DIS ;;;循環(huán)執(zhí)行顯示子程序
- AJMP LOOP
- ;///////////初始化程序
- INIT: SETB SNF
- SETB EWF
- SETB URF
- MOV R2,#20 ;;;定時(shí)器中斷20次為1s
- MOV TMOD,#01H ;;;初始化定時(shí)器
- MOV TL0,#0B0H
- MOV TH0,#3CH
- SETB EA ;;;開定時(shí)中斷與緊急中斷
- SETB ET0
- SETB TR0
- SETB EX0
- SETB IT0 ;;;設(shè)置中斷程控方式
- MOV DPTR,#TAB ;;;數(shù)值首地址放入DPTR中
- MOV 40H,#40 ;;;東南西北通行時(shí)間設(shè)置
- MOV 41H,#40
- MOV 30H,#40 ;;;通行時(shí)間初始化
- MOV 31H,#60
- MOV P0,#4CH ;;;初始化時(shí)南北通行并把交通燈狀態(tài)分別放在32H和33H中
- MOV 32H,#4CH
- MOV P2,#15H
- MOV 33H,#15H
- RET
- ;////////////顯示子程序
- DIS: MOV P3,#0DFH ;;;選中南北方向的十位數(shù)碼管
- MOV A,30H ;;;把顯示數(shù)據(jù)送人數(shù)碼管顯示
- MOV B,#10
- DIV AB
- MOVC A,@A+DPTR
- MOV P1,A ;;;
- LCALL D1MS
- MOV P3,#0EFH ;;;選中南北方向的個(gè)位數(shù)碼管
- MOV A,B ;;;送入數(shù)碼管顯示
- MOVC A,@A+DPTR
- MOV P1,A
- LCALL D1MS
- MOV P3,#7FH ;;;選中第東西方向的十位數(shù)碼管
- MOV A,31H ;;;送入數(shù)碼管顯示
- MOV B,#10
- DIV AB
- MOVC A,@A+DPTR
- MOV P1,A
- LCALL D1MS
- MOV P3,#0BFH ;;;選中第東西方向的個(gè)位數(shù)碼管
- MOV A,B
- MOVC A,@A+DPTR
- MOV P1,A
- LCALL D1MS
- SETB P3.0
- SETB P3.1
- JNB P3.0,DIS_S ;;;查詢是否第一個(gè)按鍵按下
- JNB P3.1,DIS_E ;;;查詢是否第二個(gè)按鍵按下
- AJMP DIS_R ;;;沒有鍵按下則返回
- DIS_S:LCALL D5MS ;;;按鍵去抖
- JNB P3.0,DIS_SN
- AJMP DIS_R
- DIS_SN:MOV 40H,#50 ;;;對(duì)通行時(shí)間從新分配,南北通行時(shí)間加長
- MOV 41H,#30
- AJMP DIS_R
- DIS_E:LCALL D5MS ;;;按鍵去抖
- JNB P3.1,DIS_EW
- AJMP DIS_R
- DIS_EW:MOV 40H,#30 ;;;東西通行時(shí)間加長
- MOV 41H,#50
- DIS_R:RET
- ;///////定時(shí)中斷處理程序
- DS_C: LJMP DS_R ;;;接力跳轉(zhuǎn)
- DSZD: PUSH ACC ;;;保護(hù)現(xiàn)場
- PUSH PSW
- CLR TR0 ;;;關(guān)定時(shí)器及中斷標(biāo)志位并重新賦值
- CLR TF0
- MOV TL0,#0B0H
- MOV TH0,#3CH
- DJNZ R2,DS_C ;;;判斷1m時(shí)間是否到達(dá)
- MOV R2,#20 ;;;到達(dá)重新賦值
- DEC 30H ;;;南北方向通行時(shí)間減一
- MOV A,30H ;;;把減一后的時(shí)間送入顯示存儲(chǔ)單元
- ;;;;;;;南北通行到達(dá)最后4秒時(shí)黃燈閃爍
- DS_10:CJNE A,#4,DS_11 ;;;如果通行時(shí)間剩余4秒
- JNB SNF,DS_11 ;;;判斷是否是南北通行
- MOV P0,#8AH
- MOV 32H, #8AH ;;;把交通燈狀態(tài)存入存儲(chǔ)單元(后面類似)
- DS_11:CJNE A,#3,DS_12 ;;;不是剩余3秒,返回
- JNB SNF,DS_12 ;;;不是南北通行時(shí)間,返回
- MOV P0,#88H
- MOV 32H, #88H
- DS_12:CJNE A,#2,DS_13
- JNB SNF,DS_13
- MOV P0,#8AH
- MOV 32H, #8AH
- DS_13:CJNE A,#1,DS_14
- JNB SNF,DS_14
- MOV P0,#88H
- MOV 32H, #88H
- ;------------------------
- DS_14:JNZ DS_NE ;;;通行時(shí)間沒有結(jié)束轉(zhuǎn)向改變東西方向的數(shù)碼管
- CPL SNF ;;;如果通行時(shí)間結(jié)束則對(duì)標(biāo)志位取反
- JNB SNF,DS_1 ;;;判斷是否南北通行
- MOV 30H,40H ;;;是,點(diǎn)亮相應(yīng)的交通燈
- MOV P0,#4CH
- MOV 32H,#4CH ;;;存儲(chǔ)交通燈狀態(tài)
- MOV P2,#15H
- MOV 33H, #15H ;;;存儲(chǔ)交通燈狀態(tài)
- DS_NE:DEC 31H ;;;東西方向通行時(shí)間減一
- MOV A,31H ;;;把通行剩余時(shí)間送入顯示存儲(chǔ)單元
- ;;;;;;;;東西方向通行時(shí)間剩余4秒鐘黃燈閃爍(程序注釋與南北方向類似 略)
- DS_20:CJNE A,#4,DS_21
- JB EWF,DS_21
- MOV P0,#51H
- MOV 32H, #51H
- DS_21:CJNE A,#3,DS_22
- JB EWF,DS_22
- MOV P0,#41H
- MOV 32H, #41H
- DS_22:CJNE A,#2,DS_23
- JB EWF,DS_23
- MOV P0,#51H
- MOV 32H, #51H
- DS_23:CJNE A,#1,DS_24
- JB EWF,DS_24
- MOV P0,#41H
- MOV 32H, #41H
- ;-----------------------------
- DS_24:JNZ DS_R ;;;東西方向時(shí)間沒有結(jié)束,返回
- CPL EWF ;;;對(duì)通行狀態(tài)取反
- JNB EWF,DS_2 ;;;東西方向通行時(shí)間到來,跳轉(zhuǎn)
- MOV 31H,#80 ;;;東西方向通行結(jié)束,重新顯示時(shí)間
- MOV P0,#89H ;;;點(diǎn)亮相應(yīng)的交通燈
- MOV 32H, #89H
- MOV P2,#29H
- MOV 33H, #29H
- AJMP DS_R
- DS_1: MOV 30H,#80 ;;;南北通行時(shí)間結(jié)束,重新對(duì)顯示存儲(chǔ)單元賦值
- MOV P0,#89H ;;;執(zhí)行轉(zhuǎn)彎狀態(tài)1
- MOV 32H, #89H
- MOV P2,#26H
- MOV 33H, #26H
- AJMP DS_NE
- DS_2: MOV 31H,41H ;;;東西方向開始通行,賦值予顯示存儲(chǔ)單元
- MOV P0,#61H ;;;點(diǎn)亮相應(yīng)的交通燈
- MOV 32H, #61H
- MOV P2,#15H
- MOV 33H, #15H
- DS_R: SETB TR0
- POP PSW ;;;恢復(fù)現(xiàn)場
- POP ACC
- RETI
- ;/////////////緊急中斷處理程序
- URZD: PUSH ACC ;;;保護(hù)現(xiàn)場
- PUSH PSW
- CLR IE0 ;;;清除中斷標(biāo)志位
- CLR TR0 ;;;關(guān)定時(shí)器
- CPL URF ;;;緊急事件標(biāo)志位
- JB URF,UR_CON ;;;緊急結(jié)束;跳轉(zhuǎn)
- MOV P0,#49H ;;;各路口燈全顯示紅燈亮
- MOV P2,#15H
- AJMP UR_R
- UR_CON:SETB TR0 ;;;恢復(fù)正常交通
- MOV A,32H
- MOV P0,A
- MOV A,33H
- MOV P2,A
- UR_R: POP PSW ;;;恢復(fù)現(xiàn)場
- POP ACC
- RETI
- ;////////////查表指令0,1,2,3,4,5,6,7,8,9
- TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH
- DB 7DH, 07H, 7FH, 6FH
- ;//////////延時(shí)5ms與1ms
- D5MS: MOV R7,#5
- D1MS: MOV R7,#10
- MOV R6,#50
- L1: DJNZ R6,$
- DJNZ R7,L1
- RET
- END
復(fù)制代碼
0.png (41.08 KB, 下載次數(shù): 62)
下載附件
2016-12-23 04:14 上傳
|
-
-
交通燈控制器.rar
2016-12-20 21:30 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
156.56 KB, 下載次數(shù): 57, 下載積分: 黑幣 -5
|