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

📄 跑步机.asm

📁 本程式为跑步机电子表显示的完整程式,有仔细的注解
💻 ASM
📖 第 1 页 / 共 4 页
字号:
SWTSP1:	JNB	SW_4KM,SWTSP2
	MOV	A,#40
SWTSP2:	JNB	SW_6KM,SWTSP3
	MOV	A,#60
SWTSP3:	JNB	SW_8KM,SWTSP4
	MOV	A,#80
SWTSP4:	JNB	SW_10KM,SWTSP5
	MOV	A,#100
SWTSP5:	JNB	SW_12KM,SWTSP6		
	MOV	A,#120
SWTSP6:
	JZ	SWTSPA
	MOV	@R0,A
	SETB	F_SPD_DISF
	JMP	SWTSPDS											
SWTSPA:				
	JNB	F_ADD,SWTSB
	CLR	F_ADD
	MOV	A,C_SPD
	CLR	C
	SUBB	A,LSPD
	JC	SWTSPA0
	MOV	@R0,C_SPD
SWTSPA0:
	MOV	A,@R0
	CLR	C
	SUBB	A,HSPD		;极值判断
	JNC	SWTSPA1		;大于转
	INC	@R0
	JMP	SWTSPDS
SWTSPA1:
	JB	F_SOVER,SWTSPDEND
	SETB	F_SOVER
	SETB	F_BUEN
	JMP	SWTSPDEND
SWTSB:
	JNB	F_SUB,SWTSPDEND
	CLR	F_SUB
	CLR	C
	MOV	A,C_SPD
	JZ	SWTSB1
	DEC	A
	SUBB	A,LSPD	
	JC	SWTSB1
	MOV	@R0,C_SPD
SWTSB1:	
	MOV	A,@R0
	DEC    A
	CLR	C
	SUBB	A,LSPD
	JC	SWTSPA1
	DEC	@R0
SWTSPDS:
	SETB	F_BUEN
	CALL	SWCLR			
	CALL	CSPD2RAM
	CALL	DC2AMPL
SWTSPDEND:	
	RET
;----------------------------------------------------------
;显示区数据连续载入子程
;入口 ACC
DPYSET:
	MOV	R0,#0C0H
DPYST1:	MOV	@R0,A
	INC	R0
	CJNE	R0,#0D0H,DPYST1
	RET
;------------------------------------------------------------------	
;程式名称:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7    堆栈需求:  2字节
;------------------------------------------------------------------
D2BCD:
HB2:	CLR	A		;BCD码初始化
	MOV	R3,A
	MOV	R4,A
	MOV	R5,A
	MOV	R2,#10H		;转换双字节十六进制整数
HB3:	MOV	A,R7		;从高端移出待转换数的一位到CY中
	RLC	A
	MOV	R7,A
	MOV	A,R6
	RLC	A
	MOV	R6,A
	MOV	A,R5		;BCD码带进位自身相加,相当于乘2
	ADDC	A,R5
	DA	A		;十进制调整
	MOV	R5,A
	MOV	A,R4
	ADDC	A,R4
	DA	A
	MOV	R4,A
	MOV	A,R3
	ADDC	A,R3
	MOV	R3,A		;双字节十六进制数的万位数不超过6,不用调整
	DJNZ	R2,HB3		;处理完16bit	
;转换成非压缩BCD码	
	MOV	A,R5
	ANL	A,#00001111B
	MOV	R7,A		;最低位
	MOV	A,R5
	ANL	A,#11110000B
	SWAP	A
	MOV	R6,A		;次低位
	MOV	A,R4
	ANL	A,#00001111B
	MOV	R5,A
	MOV	A,R4		;次高位
	ANL	A,#11110000B
	SWAP	A
	MOV	R4,A		;中高位,最高位不用转化	
	RET 	
;****************************************************************
;功能:     显示所有段数,
;****************************************************************	
DISALL:
	MOV	R0,#DPY1
DISALL1:
	MOV	@R0,#0FFH
	INC	R0
	CJNE	R0,#LEDB2+1,DISALL1
	RET
;************************************************************
;功能:     显示缓冲区清0
;************************************************************
DISOFF:
	MOV	R0,#DPY1
DISOFF1:
	MOV	@R0,#0H
	INC	R0
	CJNE	R0,#LEDB2+1,DISOFF1
	RET
;**********************************************************
;功能:    数码管查表:
;入口:    ACC
;出口:    ACC
;影响资源:ACC DPTR STACK==1
;**********************************************************
BCD2DIS:
	MOV	DPTR,#TABL1
	MOVC	A,@A+DPTR	
	RET		
BCD2DIS1:
	MOV	DPTR,#TABL2
	MOVC	A,@A+DPTR	
	RET			
;**********************************************************
;功能:    数据显示
;入口:    
;出口:    
;影响资源:
;**********************************************************
DISPLAY:
;==========================================================	
;速度显示

SPDDIS:
	JNB	F_BLK_SPD,SPDDISIN
	JNB	F_BLINKEN,SPDDISIN
	JMP	SPDDISOFF
SPDDISIN:
	MOV	A,DISM_SPD
	CJNE	A,#0,SPDDISI1
	JMP	SPDDISN
SPDDISI1:
	CJNE	A,#1,SPDDISI2
	JMP	PRONUMDIS
SPDDISI2:
	CJNE	A,#2,SPDDISI3
	JMP	PAUDIS
SPDDISI3:
	CJNE	A,#3,SPDDISI4
	JMP	ENDDIS
SPDDISI4:			
	JMP	FATNAMEDIS	
;*********************************************************
SPDDISOFF:
	MOV	R0,#DPY8
	MOV	A,#0
	MOV	@R0,A
	INC	R0
	MOV	@R0,A
	INC	R0
	MOV	@R0,A
	JMP	SPDDISEND	
;**********************************************************
SPDDISN:
	MOV	R0,#SPEED
	JB	F_SPD_DISF,SPDDISN1
	MOV	R0,#C_SPD	;当前速度
SPDDISN1:	
	MOV	A,@R0
	MOV	R7,A
	MOV 	R6,#0
	CALL	D2BCD
	MOV	R0,#DPY8
	MOV	A,R5
	JZ	SPDDN2
	CALL	BCD2DIS
SPDDN2:	MOV	@R0,A

	INC	R0
	MOV	A,R6
	CALL	BCD2DIS
	SETB	ACC.7
	MOV	@R0,A
	
	INC	R0
	MOV	A,R7
	CALL	BCD2DIS
	MOV	@R0,A
	
	JMP	SPDDISEND
;==========================================================
PAUDIS:
	MOV	R0,#DPY8
	MOV	@R0,#01110011B
	INC	R0
	MOV	@R0,#01110111B
	INC	R0
	MOV	@R0,#00111110B
	JMP	SPDDISEND
;==========================================================
ENDDIS:
	MOV	R0,#DPY8
	MOV	@R0,#01111001B
	INC	R0
	MOV	@R0,#01010100B
	INC	R0
	MOV	@R0,#01011110B
	JMP	SPDDISEND
;==========================================================
PRONUMDIS:
	MOV	R0,#DPY8
	MOV	@R0,#01110011B
	MOV	A,CNT_MODE
	CLR	C
	SUBB	A,#3
	JNC	PRONDIS1
	MOV	A,#0
	JMP	PRONDIS2
PRONDIS1:	
	INC	A
PRONDIS2:
	MOV	R7,A
	MOV	R6,#0
	CALL	D2BCD
	MOV	R0,#DPY9
	MOV	A,R6
	CALL	BCD2DIS
	MOV	@R0,A
	INC	R0
	MOV	A,R7
	CALL	BCD2DIS
	MOV	@R0,A
	JMP	SPDDISEND
;==========================================================
FATNAMEDIS:
	MOV	R0,#DPY8
	MOV	@R0,#01110001B
	INC	R0
	MOV	@R0,#01110111B
	INC	R0
	MOV	@R0,#00110001B
	JMP	SPDDISEND			
;==========================================================	
SPDDISEND:
;==========================================================
SPDPDIS:
	JB	F_START,SPDPDISEN
	JB	F_STAND,SPDPDISEN
	JMP	SPDPDISEND
SPDPDISEN:	
	MOV	R0,#SPEED
	JB	F_SPD_DISF,SPDPDISN1
	MOV	R0,#C_SPD	;当前速度
SPDPDISN1:	
	MOV	A,@R0
	MOV	B,#10
	DIV	AB
	MOV	B,#2
	MUL	AB
	MOV	R1,A
	MOV	R0,#LEDB1
	MOV	DPTR,#TABRUNB
	MOVC	A,@A+DPTR	
	MOV	@R0,A
	
	INC	R0	
	INC	R1
	MOV	A,R1
	MOV	DPTR,#TABRUNB
	MOVC	A,@A+DPTR	
	MOV	@R0,A	
			
SPDPDISEND:
;==========================================================
;里程显示:
DISDIS:	
	JNB	F_BMI,DISDISEN
	JMP	FATDIS
DISDISEN:
	JNB	F_EN_PUL,DISDISEN2
	JMP	PULDIS
DISDISEN2:	
	JNB	F_BLK_DIS,DISDISIN
	JNB	F_BLINKEN,DISDISIN
DISDISOFF:
	MOV	R0,#DPY1
	MOV	@R0,#0
	INC	R0
	MOV	@R0,#0
	INC	R0
	MOV	@R0,#0	
	JMP	DISDISEND
DISDISIN:
	MOV	A,DISM_DIS
	CJNE	A,#0,DISDISI1
	JMP	DISDISUP
DISDISI1:
	JMP	DISDISDWN	
DISDISDWN:
	MOV	R0,#SET_DISL
	MOV	R1,#SET_DISH
	JMP	DISDISA
DISDISUP:
	MOV	R0,#DISL
	MOV	R1,#DISH		
DISDISA:	
	MOV	A,@R0
	MOV	R7,A
	MOV	A,@R1
	MOV 	R6,A
	CALL	D2BCD
	
	MOV	R0,#DPY1
	
	MOV	A,R4
	JNZ	DISDISA2
	MOV	A,R5
	CALL	BCD2DIS
	SETB	ACC.7
	MOV	@R0,A
	
	INC	R0
	MOV	A,R6
	CALL	BCD2DIS
	MOV	@R0,A
	
	INC	R0
	MOV	A,R7
	CALL	BCD2DIS
	MOV	@R0,A
	JMP	DISDISEND	
	
DISDISA2:
	MOV	A,R4
	CALL	BCD2DIS
	MOV	@R0,A
	
	INC	R0
	MOV	A,R5
	CALL	BCD2DIS
	SETB	ACC.7
	MOV	@R0,A
	
	INC	R0
	MOV	A,R6
	CALL	BCD2DIS
	MOV	@R0,A	
DISDISEND:
	JMP	DPFDISEND
;=========================================================	
PULDIS:
	MOV	R0,#PULSE			
	MOV	A,@R0
	MOV	R7,A
	MOV	A,#0
	MOV 	R6,A
	CALL	D2BCD
	
	MOV	R0,#DPY1
	MOV	A,R5
	JZ	PULDIS1
	CALL	BCD2DIS
PULDIS1:
	MOV	@R0,A
	
	INC	R0
	MOV	A,R6
	CALL	BCD2DIS
	MOV	@R0,A
	
	INC	R0
	MOV	A,R7
	CALL	BCD2DIS
	JB	F_PULE,PULDIS2
	SETB	ACC.7
PULDIS2:	
	MOV	@R0,A
	
	JMP	DPFDISEND
;==========================================================
FATDIS:
	MOV	A,CNT_BMI
	CJNE	A,#0,FATDIS1
	JMP	SEXDIS
FATDIS1:CJNE	A,#1,FATDIS2
	JMP	AGEDIS
FATDIS2:CJNE	A,#2,FATDIS3
	JMP	HHTDIS
FATDIS3:CJNE	A,#3,FATDIS4
	JMP	WHTDIS
FATDIS4:JMP	BMIDIS
;***********************************************************
SEXDIS:
	MOV	R5,#0
	MOV	R6,#0
	MOV	A,SEX
	MOV	R7,A
	JMP	FATDISIN
;***********************************************************
AGEDIS:
	MOV	R0,#AGE
	MOV	A,@R0
	MOV	R7,A
	MOV 	R6,#0
	CALL	D2BCD
	JMP	FATDISIN
;***********************************************************
HHTDIS:
	MOV	R0,#HHT
	MOV	A,@R0
	MOV	R7,A
	MOV 	R6,#0
	CALL	D2BCD
	JMP	FATDISIN
;***********************************************************
WHTDIS:
	MOV	R0,#WHT
	MOV	A,@R0
	MOV	R7,A
	MOV 	R6,#0
	CALL	D2BCD
	JMP	FATDISIN
;************************************************************
BMIDIS:		
	MOV	A,BMI
	JNZ	BMIDIS1
	MOV	R0,#DPY1
	MOV	@R0,#01000000B
	INC	R0
	MOV	@R0,#01000000B
	INC	R0
	MOV	@R0,#01000000B
	JMP	PULDISEND
BMIDIS1:
	MOV	R0,#BMI
	MOV	A,@R0
	MOV	R7,A
	MOV 	R6,#0
	CALL	D2BCD
	JMP	FATDISIN	
;=========================================================
FATDISIN:
	MOV	R0,#DPY1
	MOV	A,R5
	JZ	FATDISIN1
	CALL	BCD2DIS
FATDISIN1:
	MOV	@R0,A
	
	INC	R0
	MOV	A,R6
	CALL	BCD2DIS
	MOV	@R0,A
	
	INC	R0
	MOV	A,R7
	CALL	BCD2DIS
	MOV	@R0,A			
PULDISEND:
;=========================================================
DPFDISEND:
;==========================================================
DISPDIS:
	JB	F_START,DISPDISEN
	JB	F_STAND,DISPDISEN
	JMP	DISPDISEND
DISPDISEN:	
	MOV	A,CNT_D1
	JB	F_TM,DISPDIS1
	INC	A
DISPDIS1:		
	MOV	B,#2
	MUL	AB	
	MOV	R1,A
	MOV	R0,#LEDA1
	MOV	DPTR,#TABRUNA
	MOVC	A,@A+DPTR	
	MOV	@R0,A
	
	INC	R0	
	INC	R1
	MOV	A,R1
	MOV	DPTR,#TABRUNA
	MOVC	A,@A+DPTR	
	MOV	@R0,A		
DISPDISEND:
;==========================================================
;时间显示:
TIMDIS:
	JNB	F_BMI,TIMDISEN
	JMP	FATNUMDIS
TIMDISEN:	
	JNB	F_BLK_TIM,TIMDISIN
	JNB	F_BLINKEN,TIMDISIN
	MOV	R0,#DPY4
	MOV	@R0,#0
	INC	R0
	MOV	@R0,#0
	INC	R0
	MOV	@R0,#0
	INC	R0
	MOV	@R0,#0
	JMP	TIMDISEND
TIMDISIN:	
	MOV	A,DISM_TIME
	CJNE	A,#0,TIMDISI1
	JMP	TIMDISUP	
TIMDISI1:
	CJNE	A,#1,TIMDISI2
	JMP	TIMDISDWN
TIMDISI2:
	JMP	TIMDISST	
;**********************************************************	
TIMDISUP:
	MOV	R0,#TIMEH	
	CALL	TIMDISA
	MOV	R0,#TIMEL
	CALL	TIMDISB
	JMP	TIMDISEND
;**********************************************************	
TIMDISDWN:
	MOV	R0,#SET_TIMEH	
	CALL	TIMDISA
	MOV	R0,#SET_TIMEL
	CALL	TIMDISB
	JMP	TIMDISEND
;**********************************************************
TIMDISST:
	MOV	R0,#DPY4
	MOV	@R0,#0
	INC	R0
	MOV	@R0,#10000000B
	MOV	R0,#CNT_STA
	CALL	TIMDISB
	JMP	TIMDISEND	
;**********************************************************	
FATNUMDIS:	
	MOV	R0,#DPY4
	MOV	@R0,#0
	INC	R0
	MOV	@R0,#0		
	MOV	R0,#CNT_BMI
	CALL	TIMDISB
	JMP	TIMDISEND
;==========================================================
TIMDISA:
	MOV	A,@R0
	MOV	R7,A
	MOV	R6,#0
	CALL	D2BCD
	MOV	R0,#DPY4
	MOV	A,R6
	JZ	TIMDISA1
	CALL	BCD2DIS
TIMDISA1:
	MOV	@R0,A
	
	INC	R0
	MOV	A,R7
	CALL	BCD2DIS
	JB	F_TM,TIMDISA2
	SETB	ACC.7
TIMDISA2:
	MOV	@R0,A
	RET
;==========================================================
TIMDISB:
	MOV	A,@R0
	MOV	R7,A
	MOV	R6,#0
	CALL	D2BCD
	MOV	R0,#DPY6
	MOV	A,R6
	CALL	BCD2DIS1
	JB	F_BMI,TIMDISB1
	JB	F_TM,TIMDISB1	
	SETB	ACC.0
TIMDISB1:
	MOV	@R0,A
	
	INC	R0
	MOV	A,R7
	CALL	BCD2DIS1
	MOV	@R0,A
	RET				
;**********************************************************	
TIMDISEND:
;==========================================================
LEDDIS:
	JB	F_RUNEN,LEDDISEN
	JMP	LEDDISEND
LEDDISEN:	
	MOV	R0,#LEDA1
	MOV	A,NUM_RUN
	MOV	B,#4
	MUL	AB
	MOV	R1,A
	MOV	DPTR,#TABRUN
	MOVC	A,@A+DPTR	
	MOV	@R0,A
	
	INC	R0	
	INC	R1
	MOV	A,R1
	MOV	DPTR,#TABRUN
	MOVC	A,@A+DPTR	
	MOV	@R0,A	
	
	INC	R0
	INC	R1
	MOV	A,R1
	MOV	DPTR,#TABRUN
	MOVC	A,@A+DPTR	
	MOV	@R0,A
	
	INC	R0	
	INC	R1
	MOV	A,R1
	MOV	DPTR,#TABRUN
	MOVC	A,@A+DPTR	
	MOV	@R0,A	
	
LEDDISEND:
;==========================================================
DISPLAYEND:	
	RET	
	
;----------------------------------------------------------
TABL1: ;0    1    2    3    4    5    6    7    8    9
DB	03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH
TABL2: ;0    1    2    3    4    5    6    7    8    9
DB	0FCH,00CH,0DAH,09EH,02EH,0B6H,0F6H,01CH,0FEH,0BEH

TABRUN:
DB	00000000B,11111000B,11111000B,00000000B
DB	00000000B,01111100B,01111100B,00000000B
DB	00000000B,00111110B,00111110B,00000000B
DB	00000000B,00011111B,00011111B,00000000B
DB	10000000B,00001111B,00001111B,10000000B
DB	11000000B,00000111B,00000111B,11000000B
DB	11100000B,00000011B,00000011B,11100000B
DB	11110000B,00000001B,00000001B,11110000B
DB	11111000B,00000000B,00000000B,11111000B
DB	01111100B,00000000B,00000000B,01111100B
DB	00111110B,00000000B,00000000B,00111110B
DB	00011111B,00000000B,00000000B,00011111B
DB	00001111B,10000000B,10000000B,00001111B
DB	00000111B,11000000B,11000000B,00000111B
DB	00000011B,11100000B,11100000B,00000011B
DB	00000001B,11110000B,11110000B,00000001B
DB	00000000B,11111000B,11111000B,00000000B

TABRUNA:
DB	00000000B,00000000B
DB	10000000B,00000000B	
DB	11000000B,00000000B
DB	11100000B,00000000B
DB	11110000B,00000000B
DB	11111000B,00000000B
DB	11111100B,00000000B
DB	11111110B,00000000B
DB	11111111B,00000000B
DB	11111111B,10000000B
DB	11111111B,11000000B
DB	11111111B,11100000B
DB	11111111B,11110000B
DB	11111111B,11111000B
DB	11111111B,11111100B
DB	11111111B,11111110B
DB	11111111B,11111111B
DB	11111111B,11111111B

TABRUNB:
DB	00001111B,00000000B
DB	00011111B,00000000B
DB	00111111B,00000000B
DB	01111111B,00000000B
DB	11111111B,00000000B
DB	11111111B,00000001B
DB	11111111B,00000011B
DB	11111111B,00000111B
DB	11111111B,00001111B
DB	11111111B,00011111B
DB	11111111B,00111111B
DB	11111111B,01111111B
DB	11111111B,11111111B
DB	11111111B,11111111B
;==========================================================
TABV00:
DB    010,010,010,010,010,010,010,010,010,010,010,010,010,010,010,010
DB    000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
TABV0:
DB    015,015,015,015,015,015,015,015,015,015,015,015,015,015,015,015
DB    000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
TABV1:
DB    030,030,040,040,060,060,070,070,070,070,060,060,040,040,030,030
DB    002,002,006,006,003,003,005,005,004,004,003,003,002,002,001,001
TABV2:
DB    050,070,090,050,090,050,090,090,050,090,050,090,090,050,090,050
DB    000,001,002,002,005,005,005,006,006,006,003,003,002,002,001,001
TABV3: 
DB    040,060,070,080,080,100,090,100,100,100,100,080,080,080,060,040
DB    002,006,008,010,010,011,011,008,008,006,006,006,006,004,002,002
TABV4:
DB    040,050,050,060,070,090,090,090,090,100,080,070,070,050,050,030
DB    004,004,010,005,011,011,006,006,006,005,006,004,004,003,001,000
TABV5:
DB    030,030,040,040,050,060,060,060,050,050,060,050,050,040,030,030
DB    004,004,006,008,010,012,006,005,005,010,010,007,005,003,002,000
TABV6:
DB    020,040,050,060,060,070,070,040,060,060,070,050,050,070,050,030
DB    005,006,009,009,010,010,011,011,012,012,013,009,006,004,004,001
TABV7:
DB    040,060,030,060,020,050,050,090,090,060,100,070,090,060,040,020
DB    003,003,004,004,013,013,012,012,005,005,005,011,011,002,002,000
TABV8:
DB    050,060,070,070,080,080,090,090,100,100,080,070,100,080,050,040
DB    001,001,006,006,003,003,006,006,002,002,006,006,002,002,002,000
TABV9:
DB    030,060,080,100,100,120,120,060,120,120,080,090,100,090,050,030
DB    000,003,006,008,008,010,005,005,003,003,008,008,004,004,002,000
TABV10:
DB    050,050,060,080,080,090,100,120,090,100,130,070,090,070,050,030
DB    003,003,007,007,009,009,009,002,002,002,002,006,004,002,002,000
TABV11:
DB    060,060,090,090,120,120,070,110,110,060,070,070,100,100,050,030
DB    004,004,005,005,003,003,006,002,002,012,012,012,003,002,002,000
TABV12:
DB    050,050,100,120,120,070,080,100,080,080,100,060,060,100,050,040
DB    000,006,006,008,008,010,005,005,003,003,006,006,004,004,002,000
;----------------------------------------------------------
	END

⌨️ 快捷键说明

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