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

📄 addsub.asm

📁 定时减法计数。输入数据0到9之间三位数
💻 ASM
字号:
;按键模式控制,设置定时的时间,同时可做加减法运算
	ORG	0000H
	LJMP	START
	ORG	0003H
	LJMP	INTERRUPT0
	ORG	000BH
	LJMP	TIMER0
	ORG	0030H
START:			;INITIAL
	MOV	P1,#0FFH
	MOV	P3,#0FFH
	MOV	P2,#0FFH; 有硬件时必要
	MOV	DPTR,#TAB
	MOV	TMOD,#01H
	MOV	TL0,#0BH
	MOV	TH0,#3CH
	SETB	EA
	SETB	EX0
	SETB	IT0
	SETB	ET0
MAIN_LOOP:
	LCALL	SCAN_KEY	;
	LCALL	DISPLAY		;	
	LJMP	MAIN_LOOP
;------------------------
EXIT10:
	CLR	40H	;按键上一次弹起后,40H中清零
EXIT11:	
	LJMP	EXIT1
SCAN_KEY:
	MOV	A,20H
	JNZ	EXIT11
	MOV	P2,#0FH
	MOV	A,P2
	CLR	C
	SUBB	A,#0FH
	JZ	EXIT10
	JB	40H,EXIT11
	SETB	40H
	MOV	P2,#0FEH
	MOV	A,P2
	ANL	A,#0F0H
	CJNE	A,#0E0H,L11
	MOV	50H,#1
LS:
	LJMP	EXIT0
L11:
	CJNE	A,#0D0H,L12
	MOV	50H,#2
	LJMP	EXIT0
L12:
	CJNE	A,#0B0H,L13
	MOV	50H,#3
	LJMP	EXIT0
L13:
	CJNE	A,#070H,L2
	MOV	50H,#4
	LJMP	EXIT0
L2:
	MOV	P2,#0FDH
	MOV	A,P2
	ANL	A,#0F0H
	CJNE	A,#0E0H,L21
	MOV	50H,#5
	LJMP	EXIT0
L21:
	CJNE	A,#0D0H,L22
	MOV	50H,#6
	LJMP	EXIT0
L22:
	CJNE	A,#0B0H,L23
	MOV	50H,#7
	LJMP	EXIT0
L23:
	CJNE	A,#070H,L3
	MOV	50H,#8
	LJMP	EXIT0
L3:
	MOV	P2,#0FBH
	MOV	A,P2
	ANL	A,#0F0H
	CJNE	A,#0E0H,L31
	MOV	50H,#9
	LJMP	EXIT0
L31:
	CJNE	A,#0D0H,L32
	;MOV	50H,#0AH	+
	LCALL	ADDITION
	LJMP	EXIT1
L32:
	CJNE	A,#0B0H,L33
	;MOV	50H,#0BH	-
	LCALL	SUBTRATION
	LJMP	EXIT1
L33:
	CJNE	A,#070H,L4
	;MOV	50H,#0CH	=
	LCALL	OPERATION
	LJMP	EXIT1
l4:
	MOV	P2,#0F7H
	MOV	A,P2
	ANL	A,#0F0H
	CJNE	A,#0E0H,L41
	;MOV	50H,#0DH	CLR
	LCALL	CLEAR		
	LJMP	EXIT1
L41:
	CJNE	A,#0D0H,L42
	;MOV	50H,#0EH	清除
	LCALL	RIGHT
	LJMP	EXIT1
L42:
	CJNE	A,#0B0H,L43
	MOV	50H,#0FH
	LJMP	EXIT0
L43:
	CJNE	A,#070H,EXIT0
	MOV	50H,#0
	LJMP	EXIT0
EXIT0:
	MOV	21H,#0	;确定按中断开关可以计数
	MOV	A,22H
	JNZ	M1
	MOV	33H,50H
	INC	22H
	LJMP	EXIT1
M1:
	MOV	A,22H
	CJNE	A,#1,M2
	MOV	32H,33H
	MOV	33H,50H
	INC	22H
	LJMP	EXIT1
M2:
	MOV	A,22H
	CJNE	A,#2,M3
	MOV	31H,32H
	MOV	32H,33H
	MOV	33H,50H
	INC	22H
	LJMP	EXIT1
M3:
	MOV	A,22H
	CJNE	A,#3,EXIT1	
	MOV	30H,31H
	MOV	31H,32H
	MOV	32H,33H
	MOV	33H,50H
	INC	22H
EXIT1:	
	RET
ADDITION:
	MOV	40H,30H
	MOV	41H,31H
	MOV	42H,32H
	MOV	43H,33H
	MOV	44H,#0	;确定为加法
	MOV	30H,#0
	MOV	31H,#0
	MOV	32H,#0
	MOV	33H,#0
	MOV	22H,#0
	RET
SUBTRATION:
	MOV	40H,30H
	MOV	41H,31H
	MOV	42H,32H
	MOV	43H,33H
	MOV	44H,#1	;确定为减法
	MOV	30H,#0
	MOV	31H,#0
	MOV	32H,#0
	MOV	33H,#0
	MOV	22H,#0
	RET
OPERATION:		;运算
	MOV	A,44H
	JZ	ADDI
;----------------------------
	CLR	C
	MOV	A,43H
	SUBB	A,33H
	MOV	B,33H
	MOV	33H,A
	JNC	NEXT0
	MOV	33H,B
	MOV	A,43H
	ADD	A,#10
	CLR	C
	SUBB	A,33H
	MOV	33H,A
	MOV	A,42H
	JZ	NEXT01
	DEC	42H
	LJMP	NEXT0
NEXT01:
	MOV	A,41H
	JZ	NEXT02
	DEC	41H
	MOV	42H,#9
	LJMP	NEXT0
NEXT02:
	DEC	40H
	MOV	41H,#9
	MOV	42H,#9
NEXT0:
	CLR	C
	MOV	A,42H
	SUBB	A,32H
	MOV	B,32H
	MOV	32H,A
	JNC	NEXT1
	MOV	32H,B
	MOV	A,42H
	ADD	A,#10
	CLR	C
	SUBB	A,32H
	MOV	32H,A
	MOV	A,41H
	JZ	NEXT11
	DEC	41H
	LJMP	NEXT1
NEXT11:
	DEC	40H
	MOV	41H,#9
NEXT1:
	CLR	C
	MOV	A,41H
	SUBB	A,31H
	MOV	B,31H
	MOV	31H,A
	JNC	NEXT2
	MOV	31H,B
	MOV	A,41H
	ADD	A,#10
	CLR	C
	SUBB	A,31H
	MOV	31H,A	
	DEC	40H
NEXT2:
	CLR	C
	MOV	A,40H
	SUBB	A,30H
	MOV	30H,A
	LJMP	NEXT3
;----------------------------
ADDI:
	CLR	C
	MOV	A,40H
	SWAP	A
	ORL	A,41H
	MOV	40H,A
	MOV	A,42H
	SWAP	A
	ORL	A,43H
	MOV	41H,A
	MOV	A,30H
	SWAP	A
	ORL	A,31H
	MOV	42H,A
	MOV	A,32H
	SWAP	A
	ORL	A,33H
	MOV	43H,A
	MOV	A,41H
	ADD	A,43H
	DA	A
	MOV	41H,A
	MOV	A,40H
	ADDC	A,42H
	DA	A
	MOV	40H,A
	ANL	A,#0F0H
	SWAP	A
	MOV	30H,A
	MOV	A,40H
	ANL	A,#0FH
	MOV	31H,A
	MOV	A,41H
	ANL	A,#0F0H
	SWAP	A
	MOV	32H,A
	MOV	A,41H
	ANL	A,#0FH
	MOV	33H,A
NEXT3:
	RET
CLEAR:			;归零
	MOV	30H,#0
	MOV	31H,#0
	MOV	32H,#0
	MOV	33H,#0
	MOV	22H,#0
	RET
RIGHT:
	DEC	22H
	MOV	33H,32H
	MOV	32H,31H
	MOV	31H,30H
	MOV	30H,#0
	RET
DISPLAY:		;动态显示高低位依次30H,31H,32H,33H
	MOV	P3,#7FH
	MOV	A,33H
	MOVC	A,@A+DPTR
	MOV	P1,A
	LCALL	DELAY10MS
	MOV	P3,#0BFH
	MOV	A,32H
	MOVC	A,@A+DPTR
	MOV	P1,A
	LCALL	DELAY10MS
	MOV	P3,#0FDH
	MOV	A,31H
	MOVC	A,@A+DPTR
	MOV	P1,A
	LCALL	DELAY10MS
	MOV	P3,#0FEH
	MOV	A,30H
	MOVC	A,@A+DPTR
	MOV	P1,A
	LCALL	DELAY10MS
	RET
;每1S 修改一次显示值
CTIME:
	MOV	A,33H
	JZ	N1
	DEC	33H
	LJMP	N4
N1:	
	MOV	A,32H
	JZ	N2
	MOV	33H,#9
	DEC	32H
	LJMP	N4
N2:
	MOV	A,31H
	JZ	N3
	DEC	31H
	MOV	32H,#9
	MOV	33H,#9
	LJMP	N4
N3:
	MOV	A,30H
	JZ	N4
	DEC	30H
	MOV	31H,#9
	MOV	32H,#9
	MOV	33H,#9
N4:
	MOV	A,30H
	JNZ	EXIT3
	MOV	A,31H
	JNZ	EXIT3
	MOV	A,32H
	JNZ	EXIT3
	MOV	A,33H
	JNZ	EXIT3
	MOV	20H,#0	;计数为零后 开启按键扫描
	CLR	TR0
	CLR	P0.7
EXIT3:
	RET
DELAY10MS:
	MOV	R1,#05H	
S2:
	MOV	R0,#0FFH
S1:
 	NOP
	DJNZ	R0,S1
	DJNZ	R1,S2	
	RET
DELAY1S:
	MOV	R2,#0FFH
S3:
	LCALL	DELAY10MS
	DJNZ	R2,S3
	RET
INTERRUPT0:
	MOV	A,21H
	JZ	L01
	MOV	20H,#0
	MOV	21H,#0
	CLR	TR0
	MOV	30H,#0
	MOV	31H,#0
	MOV	32H,#0
	MOV	33H,#0
	LJMP	L02
L01:	
	MOV	20H,#1	;计数开始 停止按键扫描
	MOV	21H,#1
	MOV	22H,#0
	SETB	TR0	;开始计数
L02:
	RETI
TIMER0:
	MOV	TL0,#0BH
	MOV	TH0,#3CH
	INC	R3
	CJNE	R3,#1,EXIT2	;中断1S
	MOV	R3,#0
	LCALL	CTIME	
EXIT2:

	RETI
TAB:	DB	3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
	END

⌨️ 快捷键说明

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