?? 交通燈.asm
字號:
;存儲單元分配
; 堆棧--60H-7FH
; 顯示緩沖區--50H-55H
; 計時區--40H-46H
; 鍵值--30H
;***********************************************
;主程序
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0100H
MAIN: MOV SP,#60H
LCALL SHEZHI
MOV 40H,#10
SETB EA
SETB ET0
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
LL: LCALL DISP1
LCALL DISP
SJMP LL
;***********************************************
; 中斷服務程序
;
ORG 0200H
INTT0: PUSH ACC
PUSH PSW
SETB RS1
SETB RS0
DJNZ 40H,DOWN
MOV 40H,#10
MOV R0,#41H
MOV A,@R0
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#60H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#60H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0
ADD A,#1
DA A
CLR C
SUBB A,#24H
JC DOWN
MOV @R0,#0
DOWN: CLR TR0
MOV A,#0B7H
ADD A,TL0
MOV TL0,A
MOV A,#3CH
ADDC A,TH0
MOV TH0,A
SETB TR0
POP PSW
POP ACC
RETI
;***********************************************
; 動態顯示程序
; 工作寄存器第1組
; 段選口:FFDCH
; 位選口:FFDDH
;
;
;***********************************************
ORG 0300H
DISP: PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
MOV R2,#8
MOV R3,#01H
MOV R0,#50H
LP2: MOV DPTR,#LEDTAB
MOV A,@R0
INC R0
MOVC A,@A+DPTR
MOV DPTR,#0FFDCH
MOVX @DPTR,A
MOV DPTR,#0FFDDH
MOV A,R3
MOVX @DPTR,A
RL A
MOV R3,A
MOV R7,#0
DJNZ R7,$
DJNZ R2,LP2
POP PSW
POP ACC
RET
;***********************************************
; 數字分離程序
; 工作寄存器第2組
; R0:計時單元地址
; R1:顯示緩沖區地址
;***********************************************
ORG 0400H
DISP1: PUSH ACC
PUSH PSW
SETB RS1
CLR RS0
MOV R0,#41H
MOV R1,#50H
MOV R2,#3
LP1: MOV A,@R0
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,@R0
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
INC R0
DJNZ R2,LP1
POP PSW
POP ACC
RET
;***********************************************
; 鍵盤掃描程序
; 行線口:0FFDDH
; 列線口:0FFDEH
;
;
ORG 0500H
KEY: LCALL DISP
MOV DPTR,#0FFDDH
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
CPL A
ANL A,#0FH
JZ KEY
LCALL DISP
LCALL DISP
MOV DPTR,#0FFDDH
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
CPL A
ANL A,#0FH
JZ KEY
MOV R2,#0FEH
MOV R3,#8
MOV R4,#0
LP3: MOV DPTR,#0FFDDH
MOV A,R2
MOVX @DPTR,A
RL A
MOV R2,A
INC DPTR
MOVX A,@DPTR
CPL A
ANL A,#0FH
JNZ SCAN
INC R4
DJNZ R3,LP3
SJMP KEY
SCAN: JNB ACC.0,TKEY0
MOV A,#0
SJMP ENDLP
TKEY0: JNB ACC.1,TKEY1
MOV A,#8
SJMP ENDLP
TKEY1: JNB ACC.2,TKEY2
MOV A,#10H
SJMP ENDLP
TKEY2: JNB ACC.3,RETKEY
MOV A,#18H
ENDLP: ADD A,R4
MOV DPTR,#KEYTAB
MOVC A,@A+DPTR
MOV 30H,A
RETKEY: MOV DPTR,#0FFDDH
MOV A,#0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
CPL A
ANL A,#0FH
JNZ RETKEY
RET
;***********************************************
; 設置時間初值
;
ORG 0600H
SHEZHI: MOV R0,#50H
MOV R7,#6
LP4: MOV @R0,#10H
INC R0
DJNZ R7,LP4
MOV R0,#55H
MOV R7,#6
LP5: LCALL KEY
MOV @R0,30H
DEC R0
DJNZ R7,LP5
MOV R0,#50H
MOV R1,#41H
MOV R6,#3
LP6: MOV A,@R0
MOV R5,A
INC R0
MOV A,@R0
SWAP A
ADD A,R5
MOV @R1,A
INC R0
INC R1
DJNZ R6,LP6
RET
;***********************************************
;
;
;**********************************************
; MCS-51系列單片機仿真實驗系統 硬件實驗項目
; 外部中斷處理(急救車與交通燈實驗)
;**********************************************
Flash equ 0 ;LED狀態
STOP equ 1
SY equ P1.0 ;南北黃燈
SG equ P1.1 ;南北綠燈
SR equ P1.2 ;南北紅燈
EY equ P1.3 ;東西黃燈
EG equ P1.4 ;東西綠燈
ER equ P1.5 ;東西紅燈
org 0
ljmp Start
org 3
setb STOP ;南北、東西均紅燈
reti
Start:
mov SP,#70
mov TCON,#01h ;下降沿, IT0
mov IE,#81h ;EA允許, EX0
clr SR ;南北、東西均紅燈
setb SY
setb SG
clr ER
setb EY
setb EG
clr STOP
Loop:
jb STOP,AllRed
clr SR ;南北紅燈,東西綠燈
setb SY
setb SG
setb ER
setb EY
clr EG
mov a,#20
call Delay
jb STOP,AllRed
clr SR ;南北紅燈, 東西黃燈閃
setb SY
setb SG
setb ER
setb EY
setb EG
clr Flash
mov r7,#9
Loop1:
mov c,Flash
mov EY,c
mov a,#1
call Delay
cpl Flash
djnz r7,Loop1
jb STOP,AllRed
setb SR ;南北綠燈,東西紅燈
setb SY
clr SG
clr ER
setb EY
setb EG
mov a,#20
call Delay
jb STOP,AllRed
setb SR ;東西紅燈,南北黃燈閃
setb SY
setb SG
clr ER
setb EY
setb EG
clr Flash
mov r7,#9
Loop2:
mov c,Flash
mov SY,c
mov a,#1
call Delay
cpl Flash
djnz r7,Loop2
ljmp Loop
AllRed: ;兩個方向交通信號燈全紅
clr SR
setb SY
setb SG
clr ER
setb EY
setb EG
clr STOP
mov a,#10
call Delay
ljmp Loop
Delay: ;延時子程序
mov r1,#80H
mov r0,#0
DelayLoop:
jb STOP,ExitDelay
djnz r0,DelayLoop
djnz r1,DelayLoop
djnz ACC,Delay
ExitDelay:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;end
LEDTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
DB 0FFH,0CH,89H,7FH,0BFH
KEYTAB: DB 07H,04H,08H,05H,09H,06H,0AH,0BH
DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -