📄 自动校时器.asm
字号:
;====================================检查音频信号
DTSB02: CALL YS500M
CLR EA
CLR XHF
MOV XHYS,#XHYSC
CLR XHDDF
MOV XHDD,#XHDDC
SETB EA
DTSB06: JNB XHF,DTSB04
JB JZTYF,DTSB10
JMP DTSB07
DTSB04: JNB XHDDF,DTSB05
JB JZTYF,DTSB03
JMP DTSB11
DTSB05: JNB JSF,DTSB06
CLR JSF
CALL XS
JMP DTSB06
;====================================音量增大三倍
DTSB07: MOV A,VOL
RL A
MOV R6,A
DTSB08: SETB UD
CALL YS54
CLR STEP
CALL YS54
SETB STEP
CALL YS54
INC VOL
DJNZ R6,DTSB08
;====================================固定音量电位器位置
SETB CS
CALL YS54
;------------------------------------
DTSB10: SETB DTF
;====================================
DTSB03: POP ACC
POP PSW
;------------------------------------
RET
;************************************音量预置
YLYZ: PUSH PSW
PUSH ACC
;====================================数字电位器复位
CLR UD
SETB STEP
CALL YS54
CALL YS54
CLR CS
CALL YS54
CALL YS54
MOV A,#32
YLYZ00: CLR STEP
CALL YS54
SETB STEP
CALL YS54
DJNZ ACC,YLYZ00
;------------------------------------数字电位器置为10
MOV VOL,#00
MOV A,#10
YLYZ01: SETB UD
CALL YS54
CLR STEP
CALL YS54
SETB STEP
CALL YS54
INC VOL
DJNZ ACC,YLYZ01
;====================================固定音量位置
SETB CS
CALL YS54
;====================================
POP ACC
POP PSW
;====================================
RET
;************************************手动时间调整
SGJS: CLR EA
MOV IE,#00
CLR TR1
CLR TF1
;-----------------------------------
CLR PWEN ;开启电源
;-----------------------------------
SETB LED
CALL YS100M
JNB MENU,$
CALL YS100M
;-----------------------------------
MOV PSW,#00
MOV 20H,#00
MOV 21H,#00
MOV 22H,#00
MOV 24H,#00
MOV 25H,#00
MOV 26H,#00
MOV 27H,#00
MOV TL1,#00
MOV TH1,#00
MOV R6,#SSSDC
MOV R7,#AJYSC
MOV TMOD,#11H
SETB TR1
;===================================
SGJS04: SETB MS3
CLR MS2
CLR MS1
MOV R0,#JSDATA+2
;------------------------------------
SGJS09: JB MENU,SGJS00
CALL YS60M
CALL YS60M
JNB MENU,$
CALL YS60M
CALL YS60M
DEC R0
CJNE R0,#JSDATA+1,SGJS01
SETB MS2
CLR MS3
CLR MS1
JMP SGJS02
SGJS01: CJNE R0,#JSDATA,SGJS03
SETB MS1
CLR MS3
CLR MS2
JMP SGJS02
SGJS03: CJNE R0,#JSDATA-1,SGJS04
JMP SGJS05
;-----------------------------------
SGJS00: JB UP,SGJS06
CALL YS60M
CLR IDF
JMP SGJS07
SGJS06: JB DOWN,SGJS08
CALL YS60M
SETB IDF
SGJS07: CLR WSF
CALL AJZJ
CLR TF1
MOV R6,#SSSDC
JMP SGJS09
SGJS08: CLR SID
CLR YSD
MOV R7,#AJYSC
CALL YS60M
;-----------------------------------
SGJS02: JNB TF1,SGJS09
CLR TF1
DJNZ R6,SGJS09
MOV R6,#SSSDC
CPL WSF
CALL XS
JMP SGJS09
;===================================
SGJS05: CLR TR0
CLR TF0
CLR TR1
CLR TF1
MOV C,JZTYF
MOV 20H,#00
MOV 21H,#00
MOV 22H,#00
MOV 23H,#00
MOV 24H,#00
MOV 25H,#00
MOV 26H,#00
MOV 27H,#00
MOV JZTYF,C
MOV TMOD,#21H
SETB RS0
CLR RS1
MOV R2,#00
MOV R3,#00
MOV KXD,#00
MOV XHDD,#XHDDC
MOV XHYS,#XHYSC
MOV PSW,#00
MOV TL1,#06
MOV TH1,#06
MOV TL0,#00
MOV TH0,#00
CLR IE0
CLR IE1
SETB PWEN ;关闭电源
SETB ET1
SETB EX0
SETB EX1
SETB EA
SETB TR1 ;启动计时器
SETB EA
;-----------------------------------
RETI
;***********************************按键增减
AJZJ: JB SID,AJZJ00
JB IDF,AJZJ01
;===================================增
INC @R0
CJNE R0,#JSDATA+2,AJZJ05
CJNE @R0,#24,AJZJ05
MOV @R0,#00
AJZJ05: CJNE R0,#JSDATA+1,AJZJ06
CJNE @R0,#60,AJZJ06
MOV @R0,#00
AJZJ06: CJNE R0,#JSDATA,AJZJ02
CJNE @R0,#60,AJZJ02
MOV @R0,#00
JMP AJZJ02
;-----------------------------------减
AJZJ01: DEC @R0
CJNE R0,#JSDATA+2,AJZJ07
CJNE @R0,#0FFH,AJZJ07
MOV @R0,#23
AJZJ07: CJNE R0,#JSDATA+1,AJZJ08
CJNE @R0,#0FFH,AJZJ08
MOV @R0,#59
AJZJ08: CJNE R0,#JSDATA,AJZJ02
CJNE @R0,#0FFH,AJZJ02
MOV @R0,#59
;-----------------------------------
AJZJ02: CALL XS
SETB SID
AJZJ00: JB YSD,AJZJ03 ;按键延时
CALL YS60M
DJNZ R7,AJZJ04
MOV R7,#AJYSC
SETB YSD
JMP AJZJ04
;===================================延时后连续增减
AJZJ03: CLR SID
MOV R7,#AJYSC
CALL YS60M
CALL YS60M
CALL YS60M
CALL YS60M
CALL YS60M
CALL YS60M
CALL YS60M
CALL YS60M
;===================================
AJZJ04: RET
;************************************秒计时器
JSQ: PUSH PSW
;------------------------------------REG1
SETB RS0
CLR RS1
;====================================
DJNZ XHYS,JSQ03
MOV XHYS,#XHYSC
CLR XHF
SETB XHJGF
JB WTF,JSQ03
SETB LED
;====================================
JSQ03: INC R2
;------------------------------------
CJNE R2,#35H,JSQ00 ;"35H"
CJNE R3,#05H,JSQ00 ;"05H"
;------------------------------------
MOV R2,#00
MOV R3,#00
MOV R0,#JSDATA ;"40H"
INC @R0
CJNE @R0,#60,JSQ02 ;"60"
MOV @R0,#00
INC R0
INC @R0
CJNE @R0,#60,JSQ02 ;"60"
MOV @R0,#00
INC R0
INC @R0
CJNE @R0,#24,JSQ02 ;"24"
MOV @R0,#00
;------------------------------------
JSQ02: SETB JSF ;秒计时到
JNB WTF,JSQ04
CPL LED
JSQ04: DJNZ XHDD,JSQ01
MOV XHDD,#XHDDC
SETB XHDDF
JMP JSQ01
;------------------------------------
JSQ00: CJNE R2,#00,JSQ01 ;"00H"
INC R3
;====================================
JSQ01: MOV R0,#JSDATA+1 ;"(41H)"
CJNE @R0,#15,JSQ05 ;"15分"
JSQ05: JC JSQ06
CLR LXJSF
CJNE @R0,#45,JSQ07 ;"45分"
JSQ07: JC JSQ08
JSQ06: SETB LXJSF
;====================================
JSQ08: POP PSW
;====================================
RETI
;***********************************LCD显示子程序
XS: PUSH PSW
PUSH ACC
PUSH B
MOV A,R1
PUSH ACC
MOV A,R4
PUSH ACC
;===================================
SETB DLA
CALL YS12
;====================================处理显示数据
SETB XSF
JNB WSF,XS03
JNB MS1,XS03
MOV JSCACH+1,#10
MOV JSCACH,#10
JMP XS04
XS03: MOV A,JSDATA
MOV B,#10
DIV AB
MOV JSCACH+1,A
MOV JSCACH,B
;-----------------------------------
XS04: JNB WSF,XS05
JNB MS2,XS05
MOV JSCACH+3,#10
MOV JSCACH+2,#10
JMP XS06
XS05: MOV A,JSDATA+1
MOV B,#10
DIV AB
MOV JSCACH+3,A
MOV JSCACH+2,B
;-----------------------------------
XS06: JNB WSF,XS07
JNB MS3,XS07
MOV JSCACH+5,#10
MOV JSCACH+4,#10
JMP XS08
XS07: MOV A,JSDATA+2
MOV B,#10
DIV AB
MOV JSCACH+5,A
MOV JSCACH+4,B
;===================================显示数据输出
XS08: CLR XSF
CLR DLA
CALL YS12
MOV A,#0A0H
MOV B,#03
CALL OUTB
MOV A,#00
MOV B,#06
CALL OUTB
;-----------------------------------
MOV R4,#03
MOV R1,#JSCACH+5
XS02: MOV DPTR,#TAB0
MOV A,@R1
CJNE A,#00,XS00
CJNE R4,#03,XS00
MOV A,#00
MOV B,#16
CALL OUTB
JMP XS01
XS00: RL A
MOVC A,@A+DPTR
MOV B,#08
CALL OUTB
MOV A,@R1
RL A
INC A
MOVC A,@A+DPTR
MOV B,#08
CALL OUTB
XS01: DEC R1
;-----------------------------------
MOV DPTR,#TAB1
MOV A,@R1
RL A
MOVC A,@A+DPTR
MOV B,#08
CALL OUTB
MOV A,@R1
RL A
INC A
MOVC A,@A+DPTR
MOV B,#08
CALL OUTB
DEC R1
DJNZ R4,XS02
;===================================数据装入
CALL YS12
SETB DLA
CALL YS12
SETB SDA
;===================================
POP ACC
MOV R4,A
POP ACC
MOV R1,A
POP B
POP ACC
POP PSW
RET
;***********************************输出LCD指令
OUTI: PUSH PSW
PUSH ACC
PUSH B
;-----------------------------------
CLR DLA
CALL YS12
MOV A,#80H
MOV B,#03
CALL OUTB
MOV A,INST
MOV B,#09
CALL OUTB
SETB DLA
CALL YS12
SETB SDA
;-----------------------------------
POP B
POP ACC
POP PSW
;-----------------------------------
RET
;***********************************LCD复位
LCDRST: SETB DLA
SETB CLK
SETB SDA
CALL YS12
CLR DLA
CALL YS12
SETB DLA
CALL YS12
;-----------------------------------
RET
;***********************************LCD位发送
OUTB: RLC A
MOV SDA,C
CALL YS12
CLR CLK
CALL YS12
SETB CLK
CALL YS12
DJNZ B,OUTB
;-----------------------------------
RET
;***********************************12uS延时子程序
YS12: RET
;***********************************51uS延时子程序
YS54: PUSH DRY
;-----------------------------------
MOV DRY,#DRYC
DJNZ DRY,$
;-----------------------------------
POP DRY
;-----------------------------------
RET
;***********************************1mS延时子程序
YS1M: CLR TR0
CLR TF0
MOV TH0,#0BFH
MOV TL0,#0FEH
SETB TR0
JNB TF0,$
CLR TR0
;-----------------------------------
RET
;***********************************60mS延时子程序
YS60M: CLR TR0
CLR TF0
MOV TH0,#0ECH
MOV TL0,#0B1H
SETB TR0
JNB TF0,$
CLR TR0
;-----------------------------------
RET
;***********************************100mS延时子程序
YS100M: CLR TR0
CLR TF0
MOV TH0,#0D7H
MOV TL0,#7DH
SETB TR0
JNB TF0,$
CLR TR0
;-----------------------------------
RET
;***********************************500mS延时子程序
YS500M: CALL YS100M
CALL YS100M
CALL YS100M
CALL YS100M
CALL YS100M
RET
;************************************LCD显示字符码
TAB0: DB 0CCH,48H,40H,40H,84H,0C8H ;"0","1","2"
DB 44H,0C8H,48H,0C0H,4CH,88H ;"3","4","5"
DB 0CCH,88H,44H,40H,0CCH,0C8H ;"6","7","8"
DB 4CH,0C8H,00H,00H ;"9"," "
TAB1: DB 0CCH,4CH,40H,44H,84H,0CCH ;"0.","1.","2."
DB 44H,0CCH,48H,0C4H,4CH,8CH ;"3.","4.","5."
DB 0CCH,8CH,44H,44H,0CCH,0CCH ;"6.","7.","8."
DB 4CH,0CCH,00H,00H ;"9."," "
;************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -