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

📄 ledavr-5k.src

📁 两个三位数码管显示输入与输出电压的接触式交流稳压器
💻 SRC
📖 第 1 页 / 共 4 页
字号:
VoltDn          MACRO                   ;输出电压高,伺服驱动,1->P2.1
                AND     P2,#~(_OUT_INC|_OUT_DEC)   
                OR      P2,#_OUT_DEC        
                ENDM
;-----------------------------------  
;-----------------------------------
output_regulate::

      				
        CLR   R2 
        LD    R6,OutVoltRegulate	
        LD    R7,OutVoltRegulate+1  
        SUB   R7,#OUT_220ADC%256	
        SBC   R6,#OUT_220ADC/256	
        JR    C,out_volneedH
        ;*******************
        LD    R1,Vin_valueL
        LD    R0,Vin_valueH
        CJULTRR0L   255,skip_abs
        LD    RegulateTime,#0;输出电压>=255V时,停止稳压
        AND   P2,#~(_OUT_INC|_OUT_DEC); regulate stop
        RET
        ;*******************
out_volneedH:        
        LD    R2,#1 		;输出电压低
        COM   R7
        COM   R6
        ADD   R7,#1
        ADC   R6,#0
skip_abs:

        CP    R6,#0
        JR    NZ,start_regulate
        CP    R7,AccuSW_Input
        JR    UGT,start_regulate
        AND   P2,#~(_OUT_INC|_OUT_DEC)           ; regulate stop
        RET
start_regulate:
        ;**********************
        CALL  calc_regulate_time
        LD    RegulateTime,R0
        ;**********************
        CP R2,#1
        JR EQ,set_volt_up
        VoltDn
        RET
set_volt_up:
        VoltUp
        RET   
;--------------------------------------------------------------------
; Control motor positive/reverse rotate, Output relay switching, and 
;  buzerr's output
;--------------------------------------------------------------------
Output_Module:
        CALL    SYS_INIT_OUTPUT
        ;===================
voltprot:
        CP      Volt_PStatus,#VOLT_HIGH      ;if volt. protect
        JR      NE,Temp_prot
        CP      VOLT_PRTdelay,#0
        JR      NE,Temp_prot
        JP      sysfail                        ;电压保护时,不考虑温度保护
        
Temp_prot:
        CP      Temp_Status,#TEMP_PROTECTED
        JR      NE,sys_norm
        JP      sysfail
;====================
sys_norm:
        CP      SystemStatus,#SYSTEM_INIT
        JR      EQ,sysinit        
        CP      SystemStatus,#SYSTEM_FAILED
        JR      EQ,is_volt_fresh
        ;*********************************************        
  keep_output:
        OR      P2,#_RELAY            ;Close output relay
        OR      P2,#_BUZ 
        RET
        ;***********************************************
is_volt_fresh:: ;加入高压保护(或温度保护)后重新延时输出
        CP      Volt_PStatus,#VOLT_NORMAL
        JR      NE,keep_output              ;高压延时保护保持输出
        
        LD      SystemStatus,#SYSTEM_INIT
  	LD	OutputDly_Timer,#SIX_SECOND
  	AND     UserFlag,#~DLYFlag 
        RET
        ;***********************************************


sysfail:

        AND     P2,#~_RELAY           ;Open output relay
        
        CP      Buzer_Timer,#0
        JR      NE,buzend
        LD      Buzer_Timer,#5
        XOR     P2,#_BUZ	
buzend:
        RET

sysinit:
        AND     P2,#~_RELAY           ;Open output relay
        ;LD      BuzerStop_Timer,#THIRTY_SECOND
        OR      P2,#_BUZ  ;Bip off buzer
        RET
;------------------------------------------------------------------

;------------------------------------------
;调节时间计算
;
;----------------------------------------------
calc_regulate_time::
        CLR     R0      
cal_regulate_time_conti:        
        CP      R6,#0
        JR      NE,OVER_255_timr
        
        CP      R7,#10
        JR      ULT,set_regulat_low
        CP      R7,#70
        JR      UGT,OVER_255_timr
        
        LD      R0,R7
        RCF
        RRC     R7

        ;RCF
        ;RRC     R7

        
        ADD     R0,R7
        RET
        
OVER_255_timr:
        LD      R0,#100      
        RET
set_regulat_low:
        LD      R0,#20
        RET
;====================================================================
DispStatus:	.RAM_DS	1
dispnow:	.RAM_DS 1 
DispBuf:	.RAM_DS	6
DispDig:        .RAM_DS 6
DIG_BLINK_Time	.RAM_DS	1
ON:		.equ	34
OFF:		.equ	56
BLINK:		.equ	67
SKIP:		.equ	89


DELAY_LED:	.MACRO	Status	
        .if     Status==ON	
	AND	DispBuf+4,#~80H
	.else	
	.if	Status==OFF
	OR	DispBuf+4,#80H
	.endif
	.endif
		.ENDM
	;--------------------------------------
UNUSUAL_LED:	.MACRO	Status		
        .if     Status==ON
	AND	DispBuf+3,#~80H
	.else	
	.if	Status==OFF
	OR	DispBuf+3,#80H
        
        .endif
	.endif


		.ENDM
	;-------------------------------------
WORKING_LED:	.MACRO	Status		

	.if	Status==ON
		
	AND	DispBuf+5,#~80H
	.else	
	.if	Status==OFF
	OR	DispBuf+5,#80H

	.endif
	.endif

		.ENDM 
;------------------------------------------------------------------

Display_Module::
        CP      SystemStatus,#SYSTEM_INIT
        JR      EQ,Display_delay_time
        CP      SystemStatus,#SYSTEM_NORMAL
        JR      EQ,Display_Voltage
        CP      SystemStatus,#SYSTEM_FAILED
        JP      EQ,Display_UNNORMAL
        RET
;---------------------------------	
Display_delay_time:
        WORKING_LED	ON
        UNUSUAL_LED	OFF
        CP	DIG_BLINK_Time,#0
	JR	NE,display_time
	LD	DIG_BLINK_Time,#FOUR_TEN_SECOND	
	XOR	UserFlag,#SelfBlink
	TM	UserFlag,#SelfBlink
	JR	Z,set_off_OUTLAMP
	DELAY_LED	ON
	JR	display_time
  set_off_OUTLAMP:
	DELAY_LED	OFF

  display_time:       	
  	CP	disp_fresh_time,#0
	JR	NE,exit_display_time
	LD	disp_fresh_time,#FOUR_TEN_SECOND
	
        LD      R7,OutputDly_Timer
        LD      R6,#0
   	CALL	BCD_conversion	
 	LD      DispDig+0,R3
 	LD      DispDig+1,R4
 	LD      DispDig+2,R5
 	
 	LD      DispDig+3,R3
 	LD      DispDig+4,R4
 	LD      DispDig+5,R5 
 	CALL	set_display_data
  exit_display_time: 	
 	RET	
;---------------------------------
Display_Voltage:
        CP      Volt_PStatus, #VOLT_LOW
        JP      EQ,Display_UNNORMAL

        WORKING_LED	ON
        UNUSUAL_LED	OFF
        DELAY_LED	OFF	
	
	CP	disp_fresh_time,#0
	JR	NE,exit_disData
	LD	disp_fresh_time,#SIX_TEN_SECOND
	
        LD      R7,Vin_valueL
        LD      R6,Vin_valueH 	
   	CALL	BCD_conversion	
 	LD      DispDig+0,R3
 	LD      DispDig+1,R4
 	LD      DispDig+2,R5   	
	
	LD	R7,Vout_valueL
 	LD 	R6,Vout_valueH
 	CALL	BCD_conversion
 	LD      DispDig+3,R3
 	LD      DispDig+4,R4
 	LD      DispDig+5,R5
   	
   	CALL	set_display_data
exit_disData:
	RET	        

  	
  	  	
set_display_data:: 
	DI
	AND	DispBuf+0,#80H         ;刷新每位七段。	
	AND	DispBuf+1,#80H
	AND	DispBuf+2,#80H	
	AND     DispBuf+3,#80H
	AND     DispBuf+4,#80H
	AND     DispBuf+5,#80H
	
	LD	R7,DispDig+0
	CALL	BCD_TO_LED
	AND	R7,#~80H
	OR 	DispBuf+0,R7
	
	LD	R7,DispDig+1
	CALL	BCD_TO_LED
	AND	R7,#~80H		
	OR 	DispBuf+1,R7		
	
	LD	R7,DispDig+2
	CALL	BCD_TO_LED
	AND	R7,#~80H	
	OR 	DispBuf+2,R7

	LD	R7,DispDig+3
	CALL	BCD_TO_LED
	AND	R7,#~80H	
	OR 	DispBuf+3,R7
	
	LD	R7,DispDig+4
	CALL	BCD_TO_LED
	AND	R7,#~80H	
	OR 	DispBuf+4,R7
	
	LD	R7,DispDig+5
	CALL	BCD_TO_LED
	AND	R7,#~80H	
	OR 	DispBuf+5,R7
					
	EI
	RET
	
Display_UNNORMAL:

        WORKING_LED	ON
        DELAY_LED	OFF

        CP	DIG_BLINK_Time,#0
        JR      NE,exit_disp_UNNORMAL
        
        LD      DIG_BLINK_Time,#FOUR_TEN_SECOND        
	XOR	UserFlag,#SelfBlink
	TM	UserFlag,#SelfBlink 
	JR      NZ,set_disp_off    
	           
        UNUSUAL_LED	ON
        	           
        CP      Volt_PStatus, #VOLT_HIGH
        JR      EQ,disp_high
        
        CP      Volt_PStatus, #VOLT_LOW
        JR      EQ,disp_low
        LD      R6,#MSG_TEMP_HIGH/256
        LD      R7,#MSG_TEMP_HIGH%256
        JR      disp_string
  disp_low:        
        LD      R6,#MSG_VOLT_LOW/256
        LD      R7,#MSG_VOLT_LOW%256   
        JR      disp_string     
  disp_high:        	           
        LD      R6,#MSG_VOLT_HIGH/256
        LD      R7,#MSG_VOLT_HIGH%256
  disp_string:        
        CALL    load_string
  exit_disp_UNNORMAL:        
        RET       
         
        
  set_disp_off:
	UNUSUAL_LED	OFF
	AND	DispBuf+0,#80H
	AND	DispBuf+1,#80H
	AND	DispBuf+2,#80H
	AND	DispBuf+3,#80H
	AND	DispBuf+4,#80H
	AND	DispBuf+5,#80H	
	OR 	DispBuf+0,#(LED_OFF&(~80h))	
	OR  	DispBuf+1,#(LED_OFF&(~80h))
	OR 	DispBuf+2,#(LED_OFF&(~80h))
	OR 	DispBuf+3,#(LED_OFF&(~80h))	
	OR  	DispBuf+4,#(LED_OFF&(~80h))
	OR 	DispBuf+5,#(LED_OFF&(~80h))		
	RET                     
          	
	
BCD_TO_LED::
	LD	R0,#DISP_LED_TAB/256
	LD	R1,#DISP_LED_TAB%256
	ADD	R1,R7			
	ADC	R0,#0
	LDC	R7,@RR0			
	RET	
	
	

LED_SEG_0:	.EQU	0C0H	;11000000B
LED_SEG_1:	.EQU	0F9H
LED_SEG_2:	.equ	0A4H
LED_SEG_5:	.EQU	92H
SIGNED_DEC:	.EQU	17	
SIGNED_ADD:	.EQU	18   
LED_OFF:	.EQU	0FFH	
CHAR_H:		.EQU	10001001B;H
CHAR_L:		.EQU	11000111B;L
CHAR_O:		.EQU	10100011B;o
CHAR_A:		.EQU	88H
CHAR_D:		.EQU	0A1H
CHAR_U:		.EQU	11100011B;u
CHAR_T:		.EQU	10000111B;t
CHAR_R:		.EQU	10101111B;r
CHAR_C:		.EQU	0A7H
CHAR_F:		.EQU	8EH
CHAR_Y:		.EQU	10010001B;y
CHAR_E:		.EQU	86H
CHAR_P:		.EQU	10001100B
DISP_LED_TAB:	;七段LED显示码表,共阳极	;0开通.

	.DB	LED_SEG_0	;0
	.DB	LED_SEG_1	;1
	.DB	LED_SEG_2	;2
	.DB	0B0H	        ;3
	.DB	99H	        ;4
	.DB	LED_SEG_5	;5
	.DB	82H	        ;6
	.DB	0F8H	        ;7
	.DB	80H	        ;8
	.DB	90H	        ;9
	.DB	CHAR_A	        ;A
	.DB	83H	        ;B
	.DB	CHAR_C	        ;C
	.DB	CHAR_D	        ;D
	.DB	CHAR_E	        ;E
	.DB	CHAR_F	        ;F	
	.DB	LED_OFF	        ;space	;16
	.DB	0CH&0FH	        ;17
	.DB	00H&0FH	        ;18
MSG_PRECISION_L:	.DB	CHAR_P,CHAR_C,CHAR_L	
MSG_PRECISION_H:	.DB	CHAR_P,CHAR_C,CHAR_H
MSG_TEMP_HIGH:		.DB	CHAR_T,LED_OFF,CHAR_H
MSG_VOLT_HIGH:		.DB	LED_OFF,CHAR_H,LED_OFF
MSG_VOLT_LOW:		.DB	LED_OFF,CHAR_L,LED_OFF
MSG_ERROR:		.DB	CHAR_E,CHAR_R,CHAR_R
load_string::
 	AND	DispBuf+0,#80H         
	AND	DispBuf+1,#80H
	AND	DispBuf+2,#80H
	AND     DispBuf+3,#80H
	AND     DispBuf+4,#80H
	AND     DispBuf+5,#80H	
	;-------输出显示报警信息---------	
	LDCI	R0,@RR6
	AND	R0,#~80H
	OR      DispBuf+3,R0
	
	LDCI	R0,@RR6
	AND	R0,#~80H
	OR      DispBuf+4,R0
	
	LDCI	R0,@RR6
	AND	R0,#~80H
	OR      DispBuf+5,R0	
        ;-------输入电压闪烁显示-------
        LD      R7,Vin_valueL
        LD      R6,Vin_valueH 	
   	CALL	BCD_conversion	
 	LD      DispDig+0,R3
 	LD      DispDig+1,R4
 	LD      DispDig+2,R5 
	
	LD	R7,DispDig+0
	CALL	BCD_TO_LED
	AND	R7,#~80H
	OR 	DispBuf+0,R7
	
	LD	R7,DispDig+1
	CALL	BCD_TO_LED
	AND	R7,#~80H		
	OR 	DispBuf+1,R7		
	
	LD	R7,DispDig+2
	CALL	BCD_TO_LED
	AND	R7,#~80H	
	OR 	DispBuf+2,R7

	
	RET
;=============================================
display::	
	OFF_DISP
	LD	R14,dispnow
	LD	R13,#DispBuf[R14]	
	DISP_8BIT
	
	SET_LED_SDA
			
	CP	R14,#0
	JR	NE,SW_SEND_OUT_PP
        CLR_LED_SDA

SW_SEND_OUT_PP:                         ;产生时钟,输出位选数据
        MAKE_DISP_164_CLOCK
        INC     dispnow                 ;指向下一显示缓冲区
        CP      dispnow,#6
        JR      ULT,exit_disp
        CLR     dispnow
exit_disp:
        ON_DISP
        RET    
       
;========================================        

;AVR_LCD 移植

;入口

;=======================================
;
;取当前ADC最大/最小值,用于KEY 和 Temp
;出口: RR0:最大, RR2:最小值
 
;----------------------------------------------------------------
;********************************* 
OUT_220ADC:	.EQU	280;285
calc_outvolt::	;V=(2+1/2+1/4+1/8)AD/8-1.3
	;入口:RR6 ADC
; 	LD	OutVoltValue+1,R7
; 	LD	OutVoltValue,R6
;	RET
 	LD	R1,R7
 	LD	R0,R6
	
	SUB	R1,#OUT_220ADC%256
	SBC	R0,#OUT_220ADC/256
	JR	NC,calc_continu_out
	COM	R1
	COM	R0
	ADD	R1,#1
	ADC	R0,#0
	CALL	calc_IN_volt_acture;calc_volt_acture
	COM	R1
	COM	R0
	ADD	R1,#221
	ADC	R0,#0
	JR	NC,ret_zero_volt
	JR	rejtjel
calc_continu_out:
	CALL	calc_IN_volt_acture;calc_volt_acture
	ADD	R1,#220
	ADC	R0,#0	
rejtjel:

⌨️ 快捷键说明

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