📄 跑步机.asm
字号:
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 + -