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

📄 s805g3.src

📁 9454数码管显示交流电压程序,可以做交流电压表用
💻 SRC
📖 第 1 页 / 共 4 页
字号:
         AND       FlagReg2, #~DISP_HIGH_245_FLAG
         OR        FlagReg2, #DISP_NORMAL_FLAG
         AND       FlagReg2, #~DISP_LOW_150_FLAG
         CP        Out_Volt_Normal_Time,    #DISPLAY_TIME
         JP        ULT,      SKIP_SET_PREVISION_OUT_VOLT_PROCESS
SKIP_OUT_VOLT_NORMAL_ZONE:
         AND       FlagReg2, #~DISP_NORMAL_FLAG
         TM        FlagReg2, #DISP_HIGH_265_FLAG
         JR        NZ,       JUMP_CLR_High_265_Time_NORMAL
         CLR       Out_Volt_High_265_Time
JUMP_CLR_High_265_Time_NORMAL:
         TM        FlagReg2, #DISP_HIGH_255_FLAG
         JR        NZ,       JUMP_CLR_High_255_Time_NORMAL
         CLR       Out_Volt_High_255_Time
JUMP_CLR_High_255_Time_NORMAL:
         TM        FlagReg2, #DISP_HIGH_245_FLAG
         JR        NZ,       JUMP_CLR_High_245_Time_NORMAL
         CLR       Out_volt_High_245_Time
JUMP_CLR_High_245_Time_NORMAL:
         TM        FlagReg2, #DISP_LOW_150_FLAG
         JR        NZ,       JUMP_CLR_Less_150_Time_NORMAL
         CLR       Out_Volt_Less_150_Time
JUMP_CLR_Less_150_Time_NORMAL:
         LD        DisplayVoltValueBackup+1,  DisplayVoltValue+1
         LD        DisplayVoltValueBackup,    DisplayVoltValue
         CLR       Cnt_2s
         CLR       Cnt_10s
         TM        FlagReg,  #OUT_VOLT_PROTECT
         JR        Z,        JUMP_SET_DELAY_6S_NORMAL
         OR        FlagReg,  #DELAY_6S
         LD        Delay_6s_Cnt,       #00
         JP        EXIT_OUT_VOLT_NORMAL
JUMP_SET_DELAY_6S_NORMAL:
	 CP 	DisplayVoltValue,#220		
	 JR  ULT ,out_less_205			;display the true value 
	 CP 	DisplayVoltValue,#220 
	 JR  UGT ,out_large_235 		;display the true value
	 
         CLR       R9
        ; LD        R8,       #220
        LD 	R8,DisplayVoltValue 
        SUB R8,#205
       LD 	R6,#REG_DISP_TAB/256 
       LD	R7,#REG_DISP_TAB%256 
       ADD R7,R8
       ADC R6,#0 
       LDC R8,@RR6
         CALL      DISP_LED_DATA
         WORK_LED  ON
         DELAY_LED ON
         ERROR_LED OFF
         BUZZER_OFF
EXIT_OUT_VOLT_NORMAL:
         RET
out_less_205:
out_large_235:
	 CLR 	   R9
	 LD 	   R8 ,DisplayVoltValue
 ;        CLR       R9
 ;        LD        R8,       #220
         CALL      DISP_LED_DATA
         WORK_LED  ON
         DELAY_LED ON
         ERROR_LED OFF
         BUZZER_OFF	
	RET 
REG_DISP_TAB:
	.DB 216,216,216 
	.DB 217,217,217
	.DB 218,218,218
	.DB 219,219,219
	.DB 220,220,220 
	.DB 220,220,220
	.DB 221,221,221 
	.DB 222,222,222
	.DB 223,223,223
	.DB 224,224,224
	.DB 225,225,225	
OUT_VOLT_LOW_150:
         CP        DisplayVoltValue+1,#OUT_VOLT_150/256
         JP        UGT,      EXIT_OUT_VOLT_LOW_150
         JR        ULT,      SKIP_OUT_VOLT_LOW_150
         CP        DisplayVoltValue,  #OUT_VOLT_150%256
         JP        UGT,      EXIT_OUT_VOLT_LOW_150
SKIP_OUT_VOLT_LOW_150:
         AND       FlagReg2, #~DISP_HIGH_265_FLAG
         AND       FlagReg2, #~DISP_HIGH_255_FLAG
         AND       FlagReg2, #~DISP_HIGH_245_FLAG
         AND       FlagReg2, #~DISP_NORMAL_FLAG
         OR        FlagReg2, #DISP_LOW_150_FLAG
         CP        Out_Volt_Less_150_Time,  #DISPLAY_TIME
         JR        ULT,      SKIP_SET_PREVISION_OUT_VOLT_PROCESS
SKIP_OUT_VOLT_LESS_150_ZONE:
         AND       FlagReg2, #~DISP_LOW_150_FLAG
         TM        FlagReg2, #DISP_HIGH_265_FLAG
         JR        NZ,       JUMP_CLR_High_265_Time_150
         CLR       Out_Volt_High_265_Time
JUMP_CLR_High_265_Time_150:
         TM        FlagReg2, #DISP_HIGH_255_FLAG
         JR        NZ,       JUMP_CLR_High_255_Time_150
         CLR       Out_Volt_High_255_Time
JUMP_CLR_High_255_Time_150:
         TM        FlagReg2, #DISP_HIGH_245_FLAG
         JR        NZ,       JUMP_CLR_High_245_Time_150
         CLR       Out_volt_High_245_Time
JUMP_CLR_High_245_Time_150:
         TM        FlagReg2, #DISP_NORMAL_FLAG
         JR        NZ,       JUMP_CLR_Normal_Time_150
         CLR       Out_Volt_Normal_Time
JUMP_CLR_Normal_Time_150:
         LD        DisplayVoltValueBackup+1,  DisplayVoltValue+1
         LD        DisplayVoltValueBackup,    DisplayVoltValue
         CLR       Cnt_2s
         CLR       Cnt_10s
         TM        FlagReg,  #OUT_VOLT_PROTECT
         JR        Z,        JUMP_SET_DELAY_6S_150
         OR        FlagReg,  #DELAY_6S
         LD        Delay_6s_Cnt,       #00
         JP        EXIT_OUT_VOLT_LOW_150
JUMP_SET_DELAY_6S_150:
         TM        FlagReg,  #FLASH_FLAG
         JR        NZ,       SKIP_DISP_L
         CALL      DISP_OFF
         WORK_LED  ON
         DELAY_LED ON
         ERROR_LED OFF
         JP        SKIP_PROCESS_BUZZER_150
SKIP_DISP_L:
         CALL      DISP_L
         WORK_LED  ON
         DELAY_LED ON
         ERROR_LED ON
SKIP_PROCESS_BUZZER_150:
         TM        FlagReg2, #BUZZER_150
         JR        NZ,       SKIP_BUZZER_150_ON
         BUZZER_OFF
         JP        SKIP_BUZZER_150
SKIP_BUZZER_150_ON:
         BUZZER_ON
SKIP_BUZZER_150:
EXIT_OUT_VOLT_LOW_150:
         RET
SKIP_SET_PREVISION_OUT_VOLT_PROCESS:             ; For prevent display not continue
         LD        DisplayVoltValue+1, DisplayVoltValueBackup+1      ; Use prevision out volt value process
         LD        DisplayVoltValue,   DisplayVoltValueBackup
         CP        Out_Volt_Normal_Time,    #DISPLAY_TIME
         JP        UGE,      SKIP_OUT_VOLT_NORMAL_ZONE
         CP        Out_volt_High_245_Time,  #DISPLAY_TIME
         JP        UGE,      SKIP_OUT_VOLT_HIGH_245_ZONE
         CP        Out_Volt_Less_150_Time,  #DISPLAY_TIME
         JP        UGE,      SKIP_OUT_VOLT_LESS_150_ZONE
         CP        Out_Volt_High_255_Time,  #DISPLAY_TIME
         JP        UGE,      SKIP_OUT_VOLT_HIGH_255_ZONE
         CP        Out_Volt_High_265_Time,    #DISPLAY_TIME
         JP        UGE,      SKIP_OUT_VOLT_HIGH_265_ZONE
         RET

DISP_H:                                ; Display H
         OR        DispBuf+2, #7FH
         OR        DispBuf+1, #7FH
         AND       DispBuf+1, #7FH  ;Not change indicator LED
         OR        DispBuf+0, #7FH
         RET

DISP_L:                                ; Display L
         OR        DispBuf+2, #7FH
         OR        DispBuf+1, #7FH
         AND       DispBuf+1, #7FH  ;Not charge indicator LED
         OR        DispBuf+0, #7FH
         RET

DISP_OFF:                              ; Turn off LED
         OR        DispBuf+2, #7FH
         OR        DispBuf+1, #7FH
         OR        DispBuf+0, #7FH
         RET

DISP_LED_DATA:     ;Process display data, Input: R9R8
         CALL      DOUBLE_BYTES_CONVERT_BCD
         LD        R10,       R4
         CALL      BCD_CONVERT_LED
         AND       DispBuf+2, #80H ;Not charge indicater LED bit
         AND       R10,       #~80H
         OR        DispBuf+2, R10
         LD        R10,       R3
         CALL      BCD_CONVERT_LED
         AND       DispBuf+1, #80H
         AND       R10,       #~80H
         OR        DispBuf+1, R10
         LD        R10,       R2
         CALL      BCD_CONVERT_LED
         AND       DispBuf+0, #80H
         AND       R10,       #~80H
         OR        DispBuf+0, R10
         RET
;------------------------------------------------
;Input: R9R8;  Output:(R5),R4,R3,R2
;------------------------------------------------
DOUBLE_BYTES_CONVERT_BCD::             ; Double bytes data convert to 4 bytes BCD code
         CLR       R5
         CLR       R4
LOOP_1000_BIT:
         LD        R3,       R9
         LD        R2,       R8
         SUB       R8,       #1000%256
         SBC       R9,       #1000/256
         JR        C,        SKIP_CONVERT_NEXT
         INC       R5
         JR        LOOP_1000_BIT
SKIP_CONVERT_NEXT:
         LD        R9,       R3
         LD        R8,       R2
LOOP_100_BIT:
         LD        R3,       R9
         LD        R2,       R8
         SUB       R8,       #100
         SBC       R9,       #0
         JR        C,        LOOP_10_BIT
         INC       R4
         JR        LOOP_100_BIT
LOOP_10_BIT:
         LD        R9,       R2
         SUB       R2,       #10
         JR        C,        SKIP_1_BIT
         INC       R3
         JR        LOOP_10_BIT
SKIP_1_BIT:
         LD        R2,       R9
         RET

BCD_CONVERT_LED::                      ; BCD code convert to display LED code
         LD        R0,       #DISP_LED_TAB/256
         LD        R1,       #DISP_LED_TAB%256
         ADD       R1,       R10
         ADC       R0,       #0
         LDC       R10,      @RR0
         RET

DISP_LED_TAB:

         .DB       88H      ; 0
         .DB       0EEH      ; 1
         .DB       92H      ; 2
         .DB       0C2H      ; 3
         .DB       0E4H       ; 4
         .DB       0C1H       ; 5
         .DB       81H       ; 6
         .DB       0EAH      ; 7
         .DB       80H       ; 8
         .DB       0C0H       ; 9
         .DB       0A4H       ; H
         .DB       09DH      ; L
         .DB       7FH       ; OFF
;================================================
;Common subroutine
;------------------------------------------------
DELAY_10MS::                           ; Delay 10ms
         CLR       Delay10msCnt
WAIT_DELAY_10MS:
         CP        Delay10msCnt,  #5
         JR        ULT,      WAIT_DELAY_10MS
         RET

;------------------------------------------------
; R1R0/R3R2-->R1R0 Remainder:R5R4
;------------------------------------------------
DOUBLE_BYTES_DIV::
         LD        R5,       R3
         OR        R5,       R2
         JR        NZ,       SKIP_DOUBLE_BYTES_DIV
         CLR       R1                  ; Return zero
         CLR       R0
         CLR       R5
         CLR       R4
         JR        EXIT_DOUBLE_BYTES_DIV
SKIP_DOUBLE_BYTES_DIV:
         LD        R6,       #16
         CLR       R5
         CLR       R4
LOOP_DIV:
         RCF
         RLC       R0
         RLC       R1
         RLC       R4
         RLC       R5
         CP        R5,       R3
         JR        ULT,      SKIP_NOT_SUB
         JR        UGT,      SKIP_GO_SUB
         CP        R4,       R2
         JR        ULT,      SKIP_NOT_SUB
SKIP_GO_SUB:
         SUB       R4,       R2
         SBC       R5,       R3
         OR        R0,       #1
SKIP_NOT_SUB:
         DEC        R6
         JR         NZ,       LOOP_DIV
EXIT_DOUBLE_BYTES_DIV:
        RET
;------------------------------------------------
; R5R4*R7R6-->R7R6R5R4
;------------------------------------------------
DOUBLE_BYTES_MUL::
	 LD        R3,       R5
	 LD        R2,       R4
	 LD        R1,       R7
	 LD        R0,       R6
	 LD        R8,       #16
	 CLR       R7
	 CLR       R6
LOOP_MUL:
         RRC       R3
         RRC       R2
         JR        NC,       SKIP_NOT_ADD
         ADD       R6,       R0
         ADC       R7,       R1
SKIP_NOT_ADD:
         RRC       R7
         RRC       R6
         RRC       R5
         RRC       R4
         DEC       R8
         JR        NZ,       LOOP_MUL
         RET
;================================================
         .END

⌨️ 快捷键说明

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