📄 traficlast.asm
字号:
;-------------------------------------traffic program----------------------------
ORG 0000H ;定义首地址,表示此程序经编译后存在0000H开始的单元
AJMP MAIN
ORG 000BH ;中断入口地址
AJMP PIPO
ORG 0100H
MAIN: MOV SP,#13H ;定义堆栈指针
MOV 40H,#00H
MOV 41H,#25H ;存倒计的秒数
MOV TMOD,#01H ;选用定时器0工作方式1,同时选用定时器1工作方式0
MOV TH0,#0DCH ;定时10MS并赋初值
MOV TL0,#00H
MOV 42H,#00H
MOV R6,#00H ;用以控制倒计五秒时是否闪烁与闪铃
MOV 44H,#00H
inKEY1:
mOV P3,#0FFH
clr p2.0
jb p3.5,INKEY1
;----------------------------------
MOV DPTR,#7F0AH
MOV A,#26H ;DV2,DV1,DV0=010, RS3~RS0=0110
MOVX @DPTR,A
INC DPTR
MOV A,#1AH ;START
MOVX @DPTR,a
SETB EA ;开总中断
SETB ET0 ;允许定时中断
SETB TR0
;---------------------------------
CYCLE:
LCALL INKEY2
MOV DPTR,#7F0AH
MOVX A,@DPTR
WAIT:
JB ACC.7,WAIT ;UPI=1?
MOV DPL,#00H
MOV R0,#30H
MOVX A,@DPTR
MOV @R0,A
MOV DPL,#02H
INC R0
MOVX A,@DPTR
MOV @R0,A
INC R0
MOV DPL,#04H
MOVX A,@DPTR
MOV @R0,A
LCALL DISP ;等待中断
LJMP CYCLE
;----------------------------------中断服务程序------------------------------------
PIPO:
INC R6 ;1秒闪烁两次
CJNE R6,#32H,NEXT
MOV R6,#00H
INC 44H
NEXT: PUSH PSW ;10MS
PUSH ACC
MOV TH0,#0DCH ;重置初始
MOV TL0,#00H
INC 40H
MOV A,40H
CJNE A,#64H,RET0
MOV 40H,#00H
MOV A,41H
DEC A
KK: CJNE A,#1FH,KK0 ;到1F时减6
SUBB A,#06H
AJMP KK1
KK0: CJNE A,#0FH,KK1 ;到0F时减6
SUBB A,#06H
KK1: MOV 41H,A
KK2: CJNE A,#0FFH,RET0
MOV R7,42H
AA0: CJNE R7,#00H,AA1 ;25秒5秒15秒5秒循环显示
MOV 41H,#05H
INC 42H
AA1: CJNE R7,#01H,AA2
MOV 41H,#15H
INC 42H
AA2: CJNE R7,#02H,AA3
MOV 41H,#05H
INC 42H
AA3: CJNE R7,#03H,RET0
MOV 41H,#25H
MOV 42H,#00H
RET0: POP ACC
POP PSW
RETI
;----------------------------------------显示子程序--------------------------------------
DISP:
DISPLAY:
MOV A,30H
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.4
ACALL DELAY ;进行延时,以免过度闪烁
SETB P0.4
MOV A,30H
SWAP A
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.5
ACALL DELAY
SETB P0.5
MOV A,31H
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.6
ACALL DELAY ;进行延时,以免过度闪烁
SETB P0.6
MOV A,31H
SWAP A
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.7
ACALL DELAY
SETB P0.7
MOV A,32H
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.3
ACALL DELAY ;进行延时,以免过度闪烁
SETB P0.3
MOV A,32H
SWAP A
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.2
ACALL DELAY
SETB P0.2
MOV A,41H
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.1
ACALL DELAY ;进行延时,以免过度闪烁
SETB P0.1
MOV A,41H
SWAP A
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.0
ACALL DELAY
SETB P0.0
mov p0,#0ffh
mov p2,#0ffh
BB0: MOV R7,42H
CJNE R7,#01H,BB1
MOV A,44H
JB ACC.0, BULIAO1
SETB P1.3
MOV P2,#0FFH
CLR P2.4
CLR P2.0
CLR P1.3
ACALL DELAY
SETB P1.3
BULIAO1:
BB1: MOV R7,42H
CJNE R7,#02H,BB2
SETB P1.3
MOV P2,#0FFH
CLR P2.2
CLR P2.3
CLR P1.3
ACALL DELAY
SETB P1.3
BB2: MOV R7,42H
CJNE R7,#03H,BB3
MOV A,44H
JB ACC.0, BULIAO
SETB P1.3
MOV P2,#0FFH
CLR P2.1
CLR P2.3
CLR P1.3
ACALL DELAY
SETB P1.3
BULIAO:
BB3: MOV R7,42H
CJNE R7,#00H,OUT1
setb p1.3
mov p2,#0ffh
CLR P2.5
CLR P2.0
CLR P1.3
ACALL DELAY
setb p1.3
;setb p0.7
OUT1: RET
INKEY2:
MOV P3,#0FFH
JB P3.4,OUTPP ;P3.3??1???
KK2X:
JNB P3.4 ,KK2X
aJMP preset
OUTPP:
RET
;---------------------------------实时时钟程序,预置ds12887的数据--------------------
preset:
MOV DPTR,#7F0AH ;指向A寄存器
MOV A,#70H ;分频复位,DV2,DV1,DV0=111
MOVX @ DPTR,A
INC DPTR ;指向B寄存器
MOV A,#8ah ;停止更新,允许更新中断,程序可初始化时间与日历字节,选BCD码,24小时制
MOVX @DPTR,A
mov dptr,#7f04h ;指向秒字节
MOV A,#00
MOVX @DPTR,A ;写入00秒
mov dptr,#7f00h ;指向分字节
MOV A,#00
MOVX @DPTR,A ;写入00分
mov dptr,#7f02h ;指向小时字节
MOV A,#00
MOVX @DPTR,A
MOV DPTR,#7F0AH
MOV A,#26H ;DV2,DV1,DV0=010, RS3~RS0=0110
MOVX @DPTR,A
INC DPTR
MOV A,#1aH ;START
MOVX @DPTR,A
acall delay
MOV 41H,#25H
ret
TABLE:INC A
MOVC A,@A+PC
RET
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
;-----------------------------------------延时子程序-------------------------------------
DELAY: PUSH PSW
MOV R3,#10H
DELAY0: MOV R4,#50H
DELAY1: DJNZ R4,DELAY1
DJNZ R3,DELAY0
POP PSW
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -