⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 自动校时器.asm

📁 单片机的自动校时器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;====================================检查音频信号
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 + -