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

📄 uvi_4245 nov 08 08.dt

📁 一个测试紫外钱的程序源码
💻 DT
📖 第 1 页 / 共 5 页
字号:
		JBC			STATUS,C
		INC			VSH
		
		DJZ			VBL
		LJMP		UV_TEST51C
		
		CLR			UVI
		
UV_TEST51D:
		MOV			A,@0X64			;UVI=VS/100
		SUB			VSL,A
		JBC			STATUS,C
		LJMP		UV_TEST51E
		
		MOV			A,@0X01
		SUB			VSH,A
		JBS			STATUS,C
		LJMP		UV_TEST51F
		
UV_TEST51E:
		INC			UVI
		MOV			A,@0XF0		;240
		SUB			A,UVI
		JBS			STATUS,C
		LJMP		UV_TEST51D
		
UV_TEST51F:
		NOP
		NOP
		
		
UV_TEST52:
		MOV			A,UVI
		SUB			A,UVIBUF
		JBC			STATUS,C		
		LJMP			UV_TEST52A		;UVI<=UVIBUF
		
		MOV			A,UVIBUF		;UVI>UVIBUF
		SUB			A,UVI
		
UV_TEST52A:
		MOV			TEMP1,A			;TEMP1=|UVI-UVIBUF|
		MOV			A,@0X02
		SUB			TEMP1,A
		JBS			STATUS,C
		LJMP			UV_TEST52B		;TEMP1<2
		
		MOV			A,UVI			;TEMP1>=2 UVIBUF=UVI
		MOV			UVIBUF,A
		LJMP		UV_TEST52C
		
UV_TEST52B:
		MOV			A,UVIBUF
		MOV			UVI,A			;TEMP1<2 UVI=UVIBUF 两次测试差小于0.2,UVI不变
		
UV_TEST52C:
		MOV			A,@0X03
		SUB			A,UVI
		JBS			STATUS,C
		CLR			UVI			;UVI<0.3 UVI=0
		
		MOV			A,UVIMAX
		SUB			A,UVI
		JBS			STATUS,C
		LJMP		UV_TEST52D
		
		MOV			A,UVI			;UVI>=UVIMAX	UVIMAX=UVI
		MOV			UVIMAX,A
		
UV_TEST52D:
		MOV			A,UVI
		MOV			TEMP1,A		;最终UVI值
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&30S检测 UV按下 退出显示

UV_TEST61:
		BANK		0
		CLR			FLAG
		MOV			A,@0X0A
		MOV			DIS4,A		;NULL
		MOV			A,@0X00
		MOV			DIS1,A
		MOV			DIS2,A
		MOV			DIS3,A
		
		
		MOV			A,@0XC9		;201
		SUB			A,UVI
		JBC			STATUS,C
		LJMP		UV_TEST61E	;UVI>20显示HI
		
		
UV_TEST61A:
		BS			FLAG,FDOTDIS		;小数点
		
		MOV			A,@0X64				;百位
		SUB			A,TEMP1
		JBS			STATUS,C
		LJMP		UV_TEST61B
		
		MOV			TEMP1,A
		INC			DIS1
		LJMP			UV_TEST61A
		
UV_TEST61B:
		MOV			A,@0X0A			;十位
		SUB			A,TEMP1
		JBS			STATUS,C
		LJMP			UV_TEST61C
		
		MOV			TEMP1,A
		INC			DIS2			
		LJMP			UV_TEST61B
		
UV_TEST61C:
		MOV			A,TEMP1				;个位
		MOV			DIS3,A
		
UV_TEST61D:		;判断DIS1是否为0,若为0则不显示DIS1
		MOV			A,@0X01
		SUB			A,DIS1
		JBC			STATUS,C
		LJMP			UV_TEST61F
		
		MOV			A,@0X0A
		MOV			DIS1,A		;NULL
		LJMP			UV_TEST61F
		
UV_TEST61E:			;显示HI
		BANK		0
		MOV			A,@0X0A
		MOV			DIS4,A
		MOV			DIS1,A
		BC			FLAG,FDOTDIS
		
		MOV			A,@0X0B
		MOV			DIS2,A
		MOV			A,@0X0C
		MOV			DIS3,A
		
UV_TEST61F:
		BANK		0
		LCALL		SEG_COM
		LCALL		COM_RAM
		
		
UV_TEST62:		;判断30s,UV按键
		BANK		0
		JBC			PRST,FAN
		LJMP		UV_TEST62B		;UV长按未释放
		
UV_TEST62A:	
		JBC			PORTB,UV		
		LJMP		UV_TEST62C		;30s计时
		LJMP		UV_TEST7		;UV 重新按下 退出

UV_TEST62B:
		JBC			PORTB,UV
		BC			PRST,FAN		;uv长按释放
		
UV_TEST62C:
		NOP
		NOP

UV_TEST62F:
		BANK		0
		JBS			PRST,F50MS
		LJMP		UV_TEST62F			;50MS未到
		
		BC			PRST,F50MS
		DJZ			T10SEC		;0.5S
		LJMP		UV_TEST62		;0.5S不到 检测按键
		
		DJZ			T_COUNT
		LJMP		UV_TEST1		;30S循环
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&退出显示最大UVI值

UV_TEST7:
		BANK		0
		MOV			A,@0X05
		MOV			T_COUNT,A			;5S
		
UV_TEST7A:
		BANK		0
		MOV			A,@0X14
		MOV			T10SEC,A		;20*50MS=1S
		
UV_TEST7B:
		BANK		0
		JBC			PRST,FSEC
		LJMP			UV_TEST7C
		
		CLR			FLAG
		MOV			A,@0X0A
		MOV			DIS1,A
		MOV			DIS2,A
		MOV			DIS3,A
		MOV			DIS4,A
		LJMP			UV_TEST7I
		
UV_TEST7C:
		CLR			FLAG
		MOV			A,@0X0A
		MOV			DIS4,A
		MOV			A,@0X00
		MOV			DIS3,A
		MOV			DIS2,A
		MOV			DIS1,A
		
		MOV			A,UVIMAX
		MOV			UVI,A
		MOV			TEMP1,A
		
		MOV			A,@0XC9		;201
		SUB			A,UVI
		JBC			STATUS,C
		LJMP			UV_TEST7H	;>20 显示HI

UV_TEST7D:
		BS			FLAG,FDOTDIS
		MOV			A,@0X64
		SUB			A,TEMP1
		JBS			STATUS,C
		LJMP			UV_TEST7E
		
		MOV			TEMP1,A
		INC			DIS1
		LJMP			UV_TEST7D
		
UV_TEST7E:
		MOV			A,@0X0A
		SUB			A,TEMP1
		JBS			STATUS,C
		LJMP			UV_TEST7F
		
		MOV			TEMP1,A
		INC			DIS2
		LJMP			UV_TEST7E
		
UV_TEST7F:
		MOV			A,TEMP1
		MOV			DIS3,A
		
UV_TEST7G:
		MOV			A,@0X01
		SUB			A,DIS1
		JBC			STATUS,C
		LJMP			UV_TEST7I
		
		MOV			A,@0X0A
		MOV			DIS1,A
		LJMP			UV_TEST7I
	
UV_TEST7H:
		BC			FLAG,FDOTDIS
		MOV			A,@0X0A
		MOV			DIS1,A
		MOV			DIS4,A
		MOV			A,@0X0B			;HI
		MOV			DIS2,A
		MOV			A,@0X0C
		MOV			DIS3,A
		
UV_TEST7I:
		BANK		0
		LCALL		SEG_COM
		LCALL		COM_RAM

UV_TEST7J:
		BANK		0
		JBS			PRST,F50MS
		LJMP		UV_TEST7J
		
		BC			PRST,F50MS
		DJZ			T10SEC		;1SEC
		LJMP		UV_TEST7B
		
		DJZ			T_COUNT
		LJMP		UV_TEST7A
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UV_TEST8:
		BANK		0
		MOV			A,@0X81
		MOV			IMR,A
		MOV			A,@0XE2
		MOV			PORT8,A
		BC			FLAG,FDOTDIS
   		BS			FLAG1,D_MODE_FLAG
   		
   		CLR			TEMP2
		MOV			A,UVIMAX
		MOV			TEMP1,A
   		
D_TIME_TAB:					;UVIMAX/10	取UVI整数
		BANK		0
		MOV			A,@0X0A
		SUB			A,TEMP1
		JBS			STATUS,C
		LJMP		D_TIME_TAB1
		
		MOV			TEMP1,A
		INC			TEMP2
		LJMP		D_TIME_TAB

D_TIME_TAB1:		
		MOV			A,TEMP2
		ADD			A,TEMP2			;TEMP*2
		ADD			A,TEMP2
		ADD			A,TEMP2
		LCALL		UVI_TIME_TAB
		
		BANK		0
		MOV			D_HOUR,A		;倒计时 时(最小)
		
		MOV			A,TEMP2
		ADD			A,TEMP2
		ADD			A,TEMP2
		ADD			A,TEMP2
		ADD			A,@0x01
		LCALL		UVI_TIME_TAB
		
		BANK		0
		MOV			D_MIN,A		;分(最小)
		
		MOV			A,TEMP2
		ADD			A,TEMP2
		ADD			A,TEMP2
		ADD			A,TEMP2
		ADD			A,@0X02
		LCALL		UVI_TIME_TAB
		
		BANK		0
		MOV			D_HOUR_MAX,A		;(最大)
		
		MOV			A,TEMP2
		ADD			A,TEMP2
		ADD			A,TEMP2
		ADD			A,TEMP2
		ADD			A,@0x03
		LCALL		UVI_TIME_TAB
		
		BANK		0
		MOV			D_MIN_MAX,A		;分(最大)				

UV_RET:
		BC			PRST,FSET
		BC			FLAG2,SET_SHORT
		BC			FLAG2,SET_LONG
		BC			PRST,FUV
		BC			FLAG1,UV_SHORT
		BS			PRST,FDEM
		RET
		
		
;========================================================================TIME DOWN MODE
D_TIME_MODE:
		BANK		0
		BS			FLAG2,SET_MODE_FLAG
		BC			PRST,FDEM
		BC			PRST,FSET
		BC			PRST,FUV
		BC			FLAG1,UV_SHORT
		BC			PRST,F50MS
		BC			FLAG2,SET_SHORT
		BC			FLAG2,SET_LONG
		
		BANK		1
		MOV			A,@0X00
		MOV			EIMR,A		;允许SET,UV按键中断
		
D_TIME_DIS:	
		BANK		0
		MOV			A,@0X81
		MOV			IMR,A			;使能T1,TCC中断(0.5s,50ms)
		
		CLR			FLAG
		MOV			A,D_HOUR
		MOV			TEMP1,A
		LCALL		DISH			;时
		
		MOV			DIS1,DIS1
		JBS			STATUS,Z
		LJMP		D_TIME_DIS1A
		
		MOV			A,@0X0A
		MOV			DIS1,A

D_TIME_DIS1A:		
		MOV			A,D_MIN
		MOV			TEMP1,A
		LCALL		DISL			;分
		
		BANK		0
		CLR			FLAG
		BS			FLAG,FDDIS
		
		JBC			PRST,FSEC
		BS			FLAG,FCOLDIS		;显示两点
	
		JBS			PRST,FBAT			;显示电池符号
		LJMP		D_TIME_DIS1
		
		JBC			PRST,FSEC
		BS			FLAG,FBATDIS
		
D_TIME_DIS1:		
		LCALL		SEG_COM
		LCALL		COM_RAM

SET_SHORT_TEST:
		BANK		0
		JBC			FLAG2,SET_LONG
		LJMP		SET_LONG_RET
		
		JBC			FLAG2,SET_SHORT
		LJMP		SET_SHORT_RET
		
		JBS			PORTB,SET
		LJMP		D_TIME_DIS_LOOP
		
		MOV			SET_KEY_TIME,SET_KEY_TIME
		JBS			STATUS,Z
		LJMP		D_TIME_DIS_LOOP
		
UV_SHORT_TEST:
		JBC			PRST,FUV
		LJMP		UV_LONG_RET
		
		JBC			FLAG1,UV_SHORT
		LJMP		UV_SHORT_RET
		
		JBS			PORTB,UV
		LJMP		D_TIME_DIS_LOOP
		
		MOV			KEY_TIME,KEY_TIME
		JBS			STATUS,Z
		LJMP		D_TIME_DIS_LOOP
		
POWER_DOWN_D:
		BANK		3
		MOV			A,@0X00
		MOV			ADCR,A
		MOV			ADICH,A
		MOV			ADICL,A		;关AD
		
		BANK		4
		MOV			A,@0X04
		MOV			IOC7,A
		MOV			A,@0XA2
		MOV			IOC8,A
		MOV			A,@0X09
		MOV			IOC9,A		;P90,P93 2.5V,VS
		MOV			A,@0X00
		MOV			IOCA,A
		MOV			A,@0X0C
		MOV			IOCB,A
		MOV			A,@0X0C
		MOV			IOCC,A
		
		
		BANK		5
		MOV			A,@0X04
		MOV			P7PHCR,A		;PULL HIGH
		MOV			A,@0X0C
		MOV			PBPHCR,A
		MOV			A,@0X00
		MOV			PCPHCR,A
		
		MOV			A,@0X00
		MOV			P8PHCR,A
		MOV			A,@0X00
		MOV			P9PHCR,A
		MOV			PAPHCR,A		;设置上拉
		
		
		BANK	0
		MOV			A,@0X04
		MOV			PORT7,A
		MOV			A,@0XE2
		MOV			PORT8,A		;关闭uvi检测
		MOV			A,@0X09
		MOV			PORT9,A
		MOV			A,@0X00
		MOV			PORTA,A
		MOV			A,@0X0C
		MOV			PORTB,A
		MOV			A,@0X80
		MOV			IMR,A			;使能T1中断(0.5s)
		
		BANK		4
		MOV			A,@0XC0
		MOV			WKCR,A		;允许SET,UV唤醒
		
		BANK		0
		BS			SCCR,IDLE	;IDLE模式
		SLEP
		NOP
		NOP
		NOP
WAKE_UP1:
		BANK		0
		MOV			D_HOUR,D_HOUR
		JBS			STATUS,Z
		LJMP		D_TIME_DIS
		
		MOV			D_MIN,D_MIN
		JBS			STATUS,Z
     	LJMP		D_TIME_DIS
     	
D_TIME_MODE_RET:
		BANK		0
		BC			PRST,FUV
		BC			PRST,FSET
		BC			FLAG1,UV_SHORT
		BC			FLAG2,SET_SHORT
		BC			FLAG2,SET_LONG
		BC			PRST,FDEM
		RET
		
SET_LONG_RET:
		BANK		0
		BS			FLAG2,SET_LONG
		BC			PRST,FUV
		BC			PRST,FSET
		BC			FLAG1,UV_SHORT
		BC			FLAG2,SET_SHORT
		BC			PRST,FDEM
		RET
		
SET_SHORT_RET:
		BANK		0
		BC			PRST,FUV
		BC			PRST,FSET
		BC			FLAG1,UV_SHORT
		BC			FLAG2,SET_SHORT
		BC			FLAG2,SET_LONG
		BC			PRST,FDEM
		RET	
	
UV_LONG_RET:
		BANK		0
		BS			PRST,FUV
		BC			PRST,FSET
		BC			FLAG1,UV_SHORT
		BC			FLAG2,SET_SHORT
		BC			FLAG2,SET_LONG
		BC			PRST,FDEM
		RET
		
UV_SHORT_RET:
		BANK		0
		BS			FLAG1,UV_SHORT
		BC			PRST,FUV
		BC			PRST,FSET
		BC			FLAG2,SET_SHORT
		BC			PRST,FDEM
		BC			FLAG2,SET_LONG
		RET

D_TIME_DIS_LOOP:
		BANK		0
		JBS			PRST,F50MS
		LJMP		D_TIME_DIS_LOOP
		
		BC			PRST,F50MS
		LJMP		D_TIME_DIS
;===============================================================SET D_MODE TIME

D_TIME_SET:
		BANK     	1
	    MOV      	A,@0X00
	    MOV      	EIMR,A     ;禁止外部按键中断
    
	    BANK     	0
	    MOV      	A,@0X81
	    MOV      	IMR,A      ;允许定时器1和TCC中断
	    BS       	PRST,FAN     
	    BC       	PRST,FSET
	    BC       	PRST,FUV
	    BC       	PRST,F50MS 
	    BC			FLAG2,SET_SHORT
	    BC			FLAG2,SET_LONG 
	    CLR      	T_COUNT
	    MOV      	A,@0XC8     ;200   10SEC
	    MOV      	T10SEC,A    ;
   		BC			FLAG1,SET_KEY_LONG
   		BC			FLAG1,UP_KEY_LONG
   		BC			FLAG1,DOWN_KEY_LONG
   		
D_TIME_ADJ1:
	    BANK     	0
	    CLR      	FLAG
	    MOV      	A,T_COUNT
	    MOV      	TEMP1,A
	    
	    MOV			A,@0X00
	    XOR			A,TEMP1
	    JBC			STATUS,Z
	    LJMP		UV_MAX_DIS		;初始进来KEY键必加一
	    
	    MOV      	A,@0X01
	    XOR      	A,TEMP1
	    JBC      	STATUS,Z
	    LJMP     	UV_MAX_DIS
   		
   		MOV			A,@0X02
   		XOR			A,TEMP1
   		JBC			STATUS,Z
   		LJMP		D_MIN_DIS
   		
    	MOV      	A,@0X03
    	XOR      	A,TEMP1
    	JBC      	STATUS,Z
    	LJMP      	D_HOUR_DIS
    	
    	NOP
    	NOP
    	LJMP     	D_TIME_ADJ_RET	;返回
    	
;----------------------------------日期            
UV_MAX_DIS:
    	BANK     	0
    	CLR			FLAG
    	BS			FLAG,FDOTDIS
		MOV			A,@0X0A
		MOV			DIS4,A
		CLR			DIS1
		CLR			DIS2
		CLR			DIS3
		
		MOV			A,UVIMAX
		MOV			TEMP1,A
	
UV_MAX_DIS1:
		MOV			A,@0X64
		SUB			A,TEMP1
		JBS			STATUS,C
		LJMP		UV_MAX_DIS2
		
		MOV			TEMP1,A
		INC			DIS1
		LJMP		UV_MAX_DIS1
	
UV_MAX_DIS2:
		MOV			A,@0X0A
		SUB			A,TEMP1
		JBS			STATUS,C
		LJMP		UV_MAX_DIS3
		
		MOV			TEMP1,A
		INC			DIS2
		LJMP		UV_MAX_DIS2
	
UV_MAX_DIS3:
		MOV			A,TEMP1
		MOV			DIS3,A
	
		MOV			A,@0X01
		SUB			A,DIS1
		JBC			STATUS,C
		LJMP		UV_MAX_DIS_OUT
	
		MOV			A,@0X0A
		MOV			DIS1,A
	
UV_MAX_DIS_OUT:
		BANK		0
		LCALL		SEG_COM
		LCALL		COM_RAM
		
    	LJMP     	D_AN_JUT

;----------------------------分		   
D_MIN_DIS:
   		BANK    	0
   		CLR			FLAG
    	MOV      	A,D_HOUR   	
    	MOV      	TEMP1,A
    	LCALL    	DISH
    	
    	MOV			DIS1,DIS1			
    	JBS			STATUS,Z	
    	LJMP		D_MIN_DIS1
    	
    	MOV			A,@0X0A			;小时高位为0不显示
    	MOV			DIS1,A
  
D_MIN_DIS1:    	
    	JBC      	PRST,FSEC
    	LJMP     	D_MIN_DIS1B		;闪
D_MIN_DIS1A:
    	MOV      	A,@0X0A
    	MOV      	DIS3,A
    	MOV      	DIS4,A    ;NO DISPLAY
    	LJMP      	D_MIN_DIS2
D_MIN_DIS1B:   
    	MOV      	A,D_MIN
    	MOV      	TEMP1,A
    	LCALL    	DISL
    	BS		 	FLAG,FCOLDIS
D_MIN_DIS2:
    	LCALL  	 	SEG_COM
    	LCALL    	COM_RAM
    	LJMP     	D_AN_JUT   

;-------------------------------------------------小时     
D_HOUR_DIS:
    	BANK     	0
    	CLR			FLAG
    	MOV      	A,D_MIN
    	MOV      	TEMP1,A
    	LCALL    	DISL
    	

⌨️ 快捷键说明

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