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

📄 shuzizhong.asm

📁 汇编语言实现数字钟功能
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;P1   数码管段码
;;;P2   0-5数码管位码
;;;p3   2\3按键
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



CHING BIT	20H
KEY1	BIT	21H
KEY2	BIT 22H
ALEREN	BIT 23H
ALER	BIT 24H
SECOND	BIT 25H
RE	BIT	26H
	DSEG	AT 30H
BUF:	DS	3	;时间值
BUFT:	DS	6	;转化后的时间值
ALERM:	DS	2
ALERMT: DS	4

SBUFT:	DS	6


	CSEG	AT	000H
	LJMP	MAIN


	CSEG	AT	0003H
	JMP	XINT0


	
	CSEG	AT	0BH
	JMP	INTT0

	CSEG	AT	0013H
	JMP	XINT1



	CSEG	AT	0100H


MAIN:
	MOV R0,#ALERM
	MOV R1,#6
VV:	MOV @R0,#0
	INC R0
	DJNZ R1,VV
	CLR ALER
	CLR ALEREN
	MOV R7,#0
	CLR KEY1
	CLR KEY2
	CLR	IT0
	CLR	IT1
	SETB EX0
	SETB EX1
	CLR CHING
	MOV R0,#BUF
	MOV @R0,#0
	INC R0
	MOV @R0,#0
	INC R0
	MOV @R0,#0
	MOV	TH0,#0D8H
	MOV	TL0,#0F0H
	MOV	TMOD,#1H
	
	SETB	ET0
	SETB	PT0
	SETB	EA
	SETB	TR0
	MOV	P0,#7FH
RESTA:
	JNB ALER,NEXT55
	CALL DIDI
NEXT55:
	CALL DIS
	JNB	KEY1,NEXT4
	
	JNB P3.2,RESTA
	CLR KEY1
	SETB EX0
	SETB EX1
	JNB ALER,NN
	CLR ALER
	CLR ALEREN
NN:	JMP CASE1


NEXT4:
	JNB KEY2,RESTA
	JNB P3.3,RESTA
	CLR KEY2
	SETB EX1
	MOV B,#100
REDIS:
	MOV R0,#ALERMT
	MOV	R2,#4
	MOV A,#0FEH
	CALL LOOP
	
	MOV P2,A
	MOV P1,0C7H
	CALL DELAY
	MOV A,P2
	ORL	A,#0C0H
	RL	A
	MOV P2,A
	MOV P1,#88H
	CALL DELAY
	CALL KEYSCAN00
	DJNZ B,REDIS
	CLR	KEY2
	SETB EX0
	SETB EX1
	JMP RESTA





KEYSCAN00:
	
	JNB KEY2,KK
	JNB P3.3,KK
	CLR KEY2
	
	SETB EX1

	MOV R0,#SBUFT
	MOV A,#6
NEXT92:
	MOV @R0,#0
	INC R0
	DJNZ	ACC,NEXT92
	POP ACC
	POP ACC
	CLR KEY2
	SETB EX0
	SETB EX1
NEXT91:
	CALL KEYSCAN01
	MOV R0,#SBUFT
	MOV	R2,#6
	MOV A,#0FEH
	
	CALL LOOP
	JMP NEXT91
	
KK:	RET

KEYSCAN01:
	JNB KEY2,NEXT95
	JNB P3.3,NEXT95
	CPL SECOND
	CLR RE
	CLR KEY2
	SETB EX0
	SETB EX1
	
NEXT95:
	JNB KEY1,NEXT93
	JNB P3.2,NEXT93
	CLR KEY1
	SETB EX0
	SETB EX1
	CLR SECOND
	JB RE,BACK
	MOV R0,#SBUFT
	MOV A,#6
NEXT94:
	SETB	RE
	MOV @R0,#0
	INC R0
	DJNZ	ACC,NEXT94
NEXT93:	
	RET

BACK:
	MOV SP,#07H
	JMP RESTA
CASE1:
	
RES:	MOV B,#100
RESHO:
	JB ALEREN,ON
	MOV P2,#0FEH
	MOV P1,#8EH
	CALL DELAY
	SETB P2.0
	CLR P2.1
	MOV P1,#8EH
	CALL DELAY
	SETB P2.1
	CLR	P2.2
	MOV P1,#0C0H
	CALL DELAY
	
	
	SETB P2.2
	JMP AL
	
ON:
	MOV P2,#0FEH
	MOV P1,#0C8H
	CALL DELAY
	SETB P2.0
	CLR P2.1
	MOV P1,#0C0H
	CALL DELAY
	SETB P2.1
AL:
	CLR P2.4
	MOV P1,#0C7H
	CALL DELAY
	SETB P2.4
	CLR P2.5
	MOV P1,#88H
	CALL DELAY
	JNB KEY1,NEXT5
	JNB P3.2,RES
	CLR KEY1
	JMP CASE2
NEXT5:
	JNB KEY2,NEXT6
	JNB P3.3,RES
	CLR KEY2
	CPL ALEREN
	SETB EX0
	SETB EX1
	JMP CASE1
NEXT6:
	DJNZ B,RESHO
	JMP RESTA



CASE2:
	
	SETB EX0
	SETB EX1
LL:	MOV R6,#20
	MOV R7,#30
	
NEXT7:
	CALL SCANKEY
	CALL DIS
	DJNZ R6,NEXT7
	
NEXT9:
	CALL SCANKEY
	JNB	CHING,NEXT8
	CALL TRASS
NEXT8:
	 
	MOV R0,#BUFT
	MOV	R2,#4
	MOV A,#0FEH
	CALL LOOP
	

	DJNZ R7,NEXT9
	JMP LL
SCANKEY:
	JNB KEY1,NEXT10
	JNB P3.2,XZ
	CLR KEY1
	POP ACC
	POP ACC
	JMP CASE3
NEXT10:
	JNB KEY2,XZ
	JNB P3.3,XZ
	CLR KEY2
	SETB EX0
	SETB EX1
	MOV A,#BUF
	ADD A,#2
	MOV R0,A
	MOV A,@R0
	INC A
	CJNE A,#24,NEXT11
	MOV A,#0
NEXT11:
	MOV @R0,A
	SETB CHING 
XZ:	RET




CASE3:
	SETB EX0
	SETB EX1
	
NEXT12:
	MOV R6,#20
	MOV R7,#30
NEXT14:
	CALL SCANKEY1
	CALL DIS
	DJNZ R6,NEXT14
	
NEXT16:
	CALL SCANKEY1
	JNB	CHING,NEXT15
	CALL TRASS
NEXT15:
	MOV R0,#BUFT
	MOV	R2,#2
	MOV A,#0FEH 
	CALL LOOP
	INC R0
	INC R0
	MOV R2,#2
	MOV A,#0EFH
	CALL LOOP

	DJNZ R7,NEXT16

	JMP CASE3


SCANKEY1:
	JNB KEY1,NEXT13
	JNB P3.2,XY
	CLR KEY1
	POP ACC
	POP ACC
	SETB EX0
	SETB EX1
	JMP CASE4
NEXT13:
	JNB KEY2,XY
	JNB P3.3,XY
	CLR KEY2
	SETB EX0
	SETB EX1
	MOV A,#BUF
	INC A
	MOV R0,A
	MOV A,@R0
	INC A
	CJNE A,#60,NEXT17
	
	MOV A,#0
	
NEXT17:
	MOV @R0,A
	SETB CHING 
XY:	RET

CASE4:
	
	SETB EX0
	SETB EX1

DD:	CALL KEYSCAN2
	CALL TRASAL
	MOV R6,#20
	MOV R7,#30
BB:	MOV R0,#ALERMT
	MOV	R2,#4
	MOV A,#0FEH
	CALL LOOP
	
	MOV P2,A
	MOV P1,0C7H
	CALL DELAY
	MOV A,P2
	ORL	A,#0C0H
	RL	A
	MOV P2,A
	MOV P1,#88H
	CALL DELAY
	DJNZ R6,BB




CC:	MOV R0,#ALERMT
	MOV	R2,#2
	MOV A,#0FEH
	CALL LOOP
	SETB P2.1
	CLR P2.4
	
	MOV P1,0C7H
	CALL DELAY
	SETB P2.4
	CLR P2.5
	
	MOV P1,#88H
	CALL DELAY
	DJNZ R7,CC
	JMP DD

KEYSCAN2:
	JNB KEY1,NEXT20
	JNB P3.2,ZZ
	CLR KEY1
	POP ACC
	POP ACC
	JMP CASE5
NEXT20:
	JNB KEY2,ZZ
	JNB P3.3,ZZ
	CLR KEY2
	SETB EX0
	SETB EX1
	MOV A,#ALERM
	INC A
	MOV R0,A
	MOV A,@R0
	INC A
	CJNE A,#24,NEXT21
	MOV A,#0
NEXT21:
	MOV @R0,A
	
ZZ:	RET


TRASAL:
	MOV	R0,#ALERM
	MOV	A,@R0
	MOV	B,#10
	DIV AB
	MOV R1,#ALERMT
	MOV @R1,B
	INC R1
	MOV @R1,A
	INC	R0
	MOV A,@R0
	MOV B,#10
	DIV	AB
	INC	R1
	MOV @R1,B
	INC R1

	MOV @R1,A
	RET


CASE5:
	SETB EX0
	SETB EX1

EE:	CALL KEYSCAN3
	CALL TRASAL
	MOV R6,#20
	MOV R7,#30
FF:	MOV R0,#ALERMT
	MOV	R2,#4
	MOV A,#0FEH
	CALL LOOP
	
	MOV P2,A
	MOV P1,0C7H
	CALL DELAY
	MOV A,P2
	ORL	A,#0C0H
	RL	A
	MOV P2,A
	MOV P1,#88H
	CALL DELAY
	DJNZ R6,FF




GG:	MOV R0,#ALERMT
	INC R0
	INC R0
	MOV	R2,#2
	MOV A,#0FBH
	CALL LOOP
	SETB P2.3
	CLR P2.4
	
	MOV P1,0C7H
	CALL DELAY
	SETB P2.4
	CLR P2.5
	
	MOV P1,#88H
	CALL DELAY
	DJNZ R7,GG
	JMP EE
KEYSCAN3:
	JNB KEY1,NEXT30
	JNB P3.2,QQ
	CLR KEY1
	SETB EX0
	SETB EX1
	POP ACC
	POP ACC
	JMP RESTA
NEXT30:
	JNB KEY2,QQ
	JNB P3.3,QQ
	CLR KEY2
	SETB EX0
	SETB EX1
	MOV A,#ALERM
	
	MOV R0,A
	MOV A,@R0
	INC A
	CJNE A,#60,NEXT31
	MOV A,#0
NEXT31:
	MOV @R0,A
	
QQ:	RET




	
INCOS:	
	MOV	R0,#BUF
	MOV	A,@R0
	INC	A
	CJNE	A,#60,NEXT2
	MOV	@R0,#0
	INC	R0
	MOV	A,@R0
	INC	A
	CJNE	A,#60,NEXT2
	
	MOV	@R0,#0
	INC	R0
	MOV	A,@R0
	INC	A
	CJNE	A,#24,NEXT2
	MOV	A,#0
	
NEXT2:	
	MOV	@R0,A
	RET



TRASS:
	CLR	CHING
	MOV	R0,#BUF
	MOV	A,@R0
	MOV	B,#10
	DIV AB
	MOV R1,#BUFT
	MOV @R1,B
	INC R1
	MOV @R1,A
	INC	R0
	MOV A,@R0
	MOV B,#10
	DIV	AB
	INC	R1
	MOV @R1,B
	INC R1

	MOV @R1,A
	INC R0
	MOV A,@R0
	MOV B,#10
	DIV AB
	INC R1
	MOV @R1,B
	INC R1
	MOV @R1,A
	JB CHING,TRASS
	RET
DIS: 
	JNB	CHING,NEXT3
	CALL TRASS
NEXT3:
	 
	MOV R0,#BUFT
	MOV	R2,#6
	MOV A,#0FEH

LOOP:
	MOV P2,A	
	MOV A,@R0
	MOV	DPTR,#TAB
	MOVC A,@A+DPTR
	MOV P1,A
	CALL DELAY
	
	MOV A,P2
	ORL	A,#0C0H
	RL	A
	
	INC R0
	
	DJNZ R2,LOOP
	RET
DELAY:
	MOV R4,#0
DELAY1:	MOV R5,#5
	DJNZ R5,$
	DJNZ R4,DELAY1
	RET
INTT0:
	PUSH	ACC
	MOV A,R0
	PUSH	ACC
	CLR	EA
	CLR	TR0
	MOV	TH0,#0D8H
	MOV	TL0,#0F0H
	SETB	EA
	SETB	TR0
	JNB SECOND,PP
	CALL INC10MS
PP:	INC	R3
	CJNE	R3,#100,NEXT1
	MOV	R3,#0
	SETB	CHING
	CPL	P0.7
	CPL	P0.6		
	CALL	INCOS
	JNB ALEREN,NEXT1
	CALL	CPAM
NEXT1:
	POP ACC
	MOV R0,ACC
	POP	ACC
	RETI


INC10MS:
	MOV	R0,#SBUFT
	MOV A,@R0
	INC A
	CJNE A,#10,NEXT90
	MOV @R0,#0
	INC R0
	MOV A,@R0
	INC A
	CJNE A,#10,NEXT90
	MOV @R0,#0
	INC R0
	MOV A,@R0
	INC A
	CJNE A,#10,NEXT90
	MOV @R0,#0
	INC R0
	MOV A,@R0
	INC A
	CJNE A,#6,NEXT90
	
	MOV @R0,#0
	INC R0
	MOV A,@R0
	INC A
	CJNE A,#10,NEXT90
	MOV @R0,#0
	INC R0
	MOV A,@R0
	INC A
	CJNE A,#10,NEXT90
	MOV @R0,#0
NEXT90:
	MOV @R0,A
	RET
	
	
XINT0:
	CLR EX0
	CLR EX1
	SETB KEY1
	RETI
XINT1:
	CLR EX0
	CLR EX1
	SETB KEY2
	RETI
	
CPAM:
	
	MOV R0,#ALERM
	INC R0
	MOV A,@R0
	
	
	CJNE A,32H,NEXT41
	DEC R0
	MOV A,@R0
	CJNE A,31H,NEXT41
	SETB ALER
NEXT41:
	RET
DIDI:
	
	CLR P0.0
	CALL DELAY
	
	SETB P0.0 	
	RET

	
	
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
	END
	
	

⌨️ 快捷键说明

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