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

📄 exp1.asm

📁 能显示时间
💻 ASM
字号:
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP TIME
ORG 000BH
LJMP TIMER2
ORG 0030H
MAIN:	MOV SP,#6AH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	MOV R0,#40H	;建立译码器对应查找表
	MOV @R0,#3FH
	INC R0
	MOV @R0,#06H
	INC R0
	MOV @R0,#5BH
	INC R0
	MOV @R0,#4FH
	INC R0
	MOV @R0,#66H
	INC R0
	MOV @R0,#6DH
	INC R0
	MOV @R0,#7DH
	INC R0
	MOV @R0,#07H
	INC R0
	MOV @R0,#7FH
	INC R0
	MOV @R0,#6FH
;
	MOV TMOD,#11H
	MOV 20H,#28H
	CLR A
	MOV 30H,A	;分别存放时分秒
	MOV 31H,A
	MOV 32H,A
	SETB ET1
	SETB EA
	MOV IP,#08H	;中断优先级控制,计时器1为高优先级
	MOV TH1,#0A6H
	MOV TL1,#00H
	SETB TR1
	SETB ET0
	MOV TH0,#0F4H
	MOV TL0,#00H
	SETB TR0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	SJMP $
JMAIN:	
	MOV R2,#07FH
WTEMP:	MOV R1,#0FFH
TEMP:	DJNZ R1,TEMP
	DJNZ R2,WTEMP


	ACALL KEY	;调用按键检测程序
	ACALL KPRO	;调用按键处理程序

	AJMP JMAIN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TIME:	PUSH PSW	;计时器1中断服务程序,提供基准时间
	PUSH ACC
	MOV TH1,#0A6H
	MOV TL1,#00H
	DJNZ 20H,RETUNT
	MOV 20H,#28H
	MOV A,#01H
	ADD A,32H
	DA A
	MOV 32H,A
	CJNE A,#60H,RETUNT
	MOV 32H,#00H
	MOV A,#01H
	ADD A,31H
	DA A
	MOV 31H,A
	CJNE A,#60H,RETUNT
	MOV 31H,#00H
	MOV A,#01H
	ADD A,30H
	DA A
	MOV 30H,A
	CJNE A,#24H,RETUNT
	MOV 30H,#00H
RETUNT:	POP ACC
	POP PSW
	RETI



TIMER2:	PUSH PSW
	PUSH ACC
	MOV TH0,#0F4H	;计时器2,扫描显示控制
	MOV TL0,#00H
	MOV A,38H
	INC A
	CJNE A,#07H,CREL
	MOV A,#01H
CREL:	MOV 38H,A
	DEC A
	JZ A01
	DEC A
	JZ A02
	DEC A
	JZ A03
	DEC A
	JZ A04
	DEC A
	JZ A05
	DEC A
	JZ A06
A01:	MOV A,#0FH
	ANL A,32H
	AJMP RTT2
A02:	MOV A,#0F0H
	ANL A,32H
	SWAP A
	AJMP RTT2
A03:	MOV A,#0FH
	ANL A,31H
	AJMP RTT2
A04:	MOV A,#0F0H
	ANL A,31H
	SWAP A
	AJMP RTT2
A05:	MOV A,#0FH
	ANL A,30H
	AJMP RTT2
A06:	MOV A,#0F0H
	ANL A,30H
	SWAP A
	AJMP RTT2
RTT2:	MOV 39H,A
	ACALL DPLAY
	POP ACC
	POP PSW
	RETI


DPLAY:	MOV R0,38H	;显示函数,将39里的内容显示到数码管第38位
	CLR A
	SETB CY
LOOPC:	RLC A
	DJNZ R0,LOOPC
	MOV DPTR,#8000H
	MOVX @DPTR,A
	MOV A,39H
	ADD A,#40H
	MOV R0,A
	MOV A,@R0
	MOV DPTR,#9000H
	MOVX @DPTR,A
	CLR CY
	RET



KEY:	ACALL KEYCH	;调用查键子程序
	JNZ DSHAKE
	AJMP KEND
DSHAKE:	ACALL DELAY	;消抖子程序调用延时子程序	
	ACALL KEYCH
	JNZ SCAN
	AJMP KEND
;扫描查键
SCAN:	MOV R6,#01H	;将第0行置一
	MOV R7,#00H	;从第0号开始检查
SCAN1:	MOV DPTR,#8000H
	MOV A,R6
	MOVX @DPTR,A
	MOVX A,@DPTR
	JNB ACC.0,LONE
	MOV A,#00H
	AJMP LKP
LONE:	JNB ACC.1,LTWO
	MOV A,#01H
	AJMP LKP
LTWO:	JNB ACC.2,LTHR
	MOV A,#02H
	AJMP LKP
LTHR:	JNB ACC.3,NEXT
	MOV A,#03H
LKP:	ADD A,R7
	PUSH ACC
SCAN2:	ACALL KEYCH
	JNZ SCAN2
	POP ACC
	AJMP SCANED
NEXT:	INC R7
	INC R7
	INC R7
	INC R7
	MOV A,R6
	JB ACC.3,KEND
	RL A
	MOV R6,A
	AJMP SCAN1
SCANED:	INC A
	MOV 3AH,A
	RET
KEND:	MOV 3AH,#0H
	RET

KEYCH:	MOV DPTR,#8000H	;查询按键是否改变子程序,将改变的列置1
	MOV A,#0FFH
	MOVX @DPTR,A
	MOVX A,@DPTR
	ANL A,#0FH
	RET

DELAY:	MOV R2,#20H	;延时程序,按键消抖用
DELAY2:	MOV R1,#0FFH
DELAY3:	DJNZ R1,DELAY3
	DJNZ R2,DELAY2
	RET


;按键处理程序
KPRO:	MOV A,3AH
	JZ KPEND
	DEC A
	JZ K1
	DEC A
	JZ K2
KPEND:	RET
K1:	MOV A,30H
	INC A
	DA A
	MOV 30H,A
	SUBB A,#24H
	JNZ HOK
	MOV A,#00H
	MOV 30H,A
HOK:	AJMP KPEND
	
K2:	MOV A,31H
	INC A
	DA A
	MOV 31H,A
	SUBB A,#60H
	JNZ MOK
	MOV A,#00H
	MOV 31H,A
MOK:	AJMP KPEND
	


END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -