;;;;;;;;;;;;;; ;;;;
加1操作程序
;;;;;;;;;;;;;; ;;;;
ADD1: MOV A,@R0 ;取计数值
DEC R0 ;指向低一个地址
SWAP A ;计数值高低四位交换
ORL A,@R0 ;相或组合成一个数据
ADD A,#01H ;加1
DA A ;十进制调整
MOV R3,A ;暂存R3内
ANL A,#0FH ;高四位变0
MOV @R0,A ;放回低地址
MOV A,R3 ;取回R3内数据
INC R0 ;地址加1
SWAP A ;高低四位交换
ANL A,#0FH ;高四位为0
MOV @R0,A ;放回原地址
RET ;返回
;
;;;;;;;;;;;;;
清0程序
;;;;;;;;;;;;;
CLR0: CLR A ;清A
MOV @R0,A ;对应地址单元清0
DEC R0 ;指向低一地址
MOV @R0,A ;清0
RET ;返回
;;;;;;;;;;;;;
显示程序
;;;;;;;;;;;;;
DISP: MOV R1,#70H ;显示数据首址
MOV R5,#0FEH ;扫描字
PLAY: MOV A,R5 ;扫描字入A
MOV P2,A ;从P2口输出
MOV A,@R1 ;取显示数据
MOV DPTR,#TAB ;取段码表首址
MOVC A,@A+DPTR ; 查数据对应段码
MOV P0,A ;段码从P0口输出
LCALL DL1MS ;点亮1毫秒
INC R1 ;指向下显示数地址
MOV A,R5 ;扫描字入A
JNB ACC.6,ENDOUT ;ACC.6=0转ENDOUT结束
RL A ;循环左移
MOV R5,A ;放回A
AJMP PLAY ;转PLAY再显示
ENDOUT: MOV P2,#0FFH ;显示结束处理。P2口置1
RET ;子程序结束
;
;LED共阴段码表(0-9)
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;
;1毫秒延时程序
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
;
;延时程序,用调用显示程序实现,可使LED显示稳定
DS50MS: LCALL DISP ;(7毫秒)
LCALL DISP
LCALL DISP
DS20MS: LCALL DISP
LCALL DISP
LCALL DISP
RET
;
;10秒延时程序,用调用显示程序实现,可使LED显示不熄灭
DS10S: MOV R2,#08H ;(8*11*16*7=9956毫秒)
TI0: MOV R0,#0B0H
TI1: LCALL DISP
DJNZ R0,TI1
DJNZ R2,TI0
RET
7毫秒延时程序,跑道计数器抗干扰用
DL7MS: SETB PX1 ;外中断1置高优先级
MOV R2,#0EH ;赋定时值
DL11: LCALL DISP ;调用显示程序
DJNZ R2,DL11 ;循环
CLR PX1 ;外中断1恢复低优先级
RET 返回
END 程序结束
上一页 [1] [2] [3] [4] [5] [6] 下一页