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

📄 subroutine.asm

📁 此款LED 数码万年历采用Holtek 公司开发的HT45R02 和HT38A5 微控制器设计
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		MOV    A,R_RTCCTL
		MOV    R_RTCCTH,A
		CLR    R_RTCCTL
MLP_GETDECIMAL:		
		MOV    A,R_RTCCTL
		SUB    A,R_RESISTORCTL
		SNZ    C
		JMP    L_CHECKRTCCTH          ;;R_RTCCTL<R_RESISTORCTL
		INC    R_RTCDEC               ;;R_RTCCTL>=R_RESISTORCTL
		MOV    R_RTCCTL,A
		JMP    MLP_GETDECIMAL
L_CHECKRTCCTH:
		SZ     R_RTCCTH
		JMP    L_RTCCTHNEQU0
		JMP    L_CHECKRTCINT
L_RTCCTHNEQU0:
		MOV    R_RTCCTL,A
		INC    R_RTCDEC
		DEC    R_RTCCTH
		JMP    MLP_GETDECIMAL
;;---------------------------------------------
L_CHECKRTCINT:
L_CHECKRTCINTLESS_8:
		MOV    A,10H
		SUB    A,R_RTCINT
		SNZ    C
		JMP    L_TEMPERATURELESS_8
;		JMP    L_CHECKRTCINTBIG50
L_CHECKRTCINTBIG50:
		MOV    A,R_RTCINT
		SUB    A,01H
		SNZ    C
		JMP    L_TEMPERATUREBIG50
		SET    F_TEMPTABLE
;;----------------------------------------------
L_GETTEMPERATURE:
		INC    R_TEMPTABLEP
		MOV    A,R_TEMPTABLEP
		CALL   SBR_GETRVSTEMPERATURE
		MOV    A,R_RTCINT
		SUB    A,R_RTCCTH
		SNZ    C
		RET                            ;;R_RTCINT<R_RTCCTH
		SNZ    Z                       ;;R_RTCINT>=R_RTCCTH
		JMP    L_GETTEMPERATURE1       ;;R_RTCINT>R_RTCCTH
		MOV    A,R_RTCDEC              ;;R_RTCINT=R_RTCCTH
		SUB    A,R_RTCCTL
		SNZ    C
		RET                            ;;R_RTCDEC<R_RTCCTL
		SNZ    Z                       ;;R_RTCDEC>=R_RTCCTL
		JMP    L_GETTEMPERATURE1       ;;R_RTCDEC>R_RTCCTL
		INC    R_TEMPTABLEP            ;;R_RTCDEC=R_RTCCTL
L_GETTEMPERATURE1:
		DEC    R_TEMPTABLEP
		SZ     F_UPTEMPERATURE         ;;IF F_UPTEMPERATURE EQU 0,THEN INDICATED UPDATE TEMPERATURE
		JMP    L_GETTEMPERATUREFINISHED
		M_MOV  R_TEMPERATURE,R_TEMPTABLEP		
		SET    F_UPTEMPERATURE			
L_GETTEMPERATUREFINISHED:
		CLR    R_TEMPTABLEP
		CLR    F_CHARGINGOK
		CLR    F_TEMPTABLE
		CLR    R_RTCDEC
		CLR    R_RTCINT
		CLR    R_RTCCTL
		CLR    R_RTCCTH
		CLR    R_RESISTORCTL
		CLR    R_RESISTORCTH
		RET

L_TEMPERATUREERROR:                   ;;IF TEST TEMPERATURE ERROR, THEN R_TEMPERATURE NOT CHANGE
;;		MOV     A,0B3H                ;;BECAUSE TEMPERATURE CHANGE IS VERY SLOWLY
;;		MOV     R_TEMPERATURE,A
		JMP     L_GETTEMPERATUREFINISHED
L_TEMPERATURELESS_8:
		MOV     A,0H
		MOV     R_TEMPERATURE,A
		JMP     L_GETTEMPERATUREFINISHED
L_TEMPERATUREBIG50:
		MOV     A,3BH
		MOV     R_TEMPERATURE,A
		JMP     L_GETTEMPERATUREFINISHED
;;********************************************
;;HEX NUMBER CONVERT TO DECIMAL
;;THE INPUT VARIABLE LESS 100(DECIMAL)
SBR_HEXTODEC:
		CLR     R_TEMP0
		CLR     R_TEMP1
		MOV     R_TEMP0,A
		SUB     A,64H                   ;;INPUT VARIABLE BIG OR LESS 63H
		SZ      C
		JMP     L_BIG63H                ;;BIG 63H
		MOV     A,R_TEMP0
MLP_HEXTODEC:
		MOV     R_TEMP0,A
		SUB     A,0AH
		SNZ     C
		JMP     SBR_HEXTODECEXIT
		INC     R_TEMP1
		JMP     MLP_HEXTODEC
SBR_HEXTODECEXIT:
		MOV     A,R_TEMP1
		SWAP    ACC
		OR      A,R_TEMP0
		RET	
L_BIG63H:
		MOV     A,R_TEMP0
		RET
;;********************************************
;;SHOW SEVEN SEGMENT LED 
SBR_LEDSCAN:
		MOV     A,1FH
		ORM     A,PA
		MOV     A,0E0H
		ORM     A,PB
		MOV     A,0FFH
		MOV     PC,A
		MOV     PD,A
		MOV     PE,A

		MOV     A,R_LEDCOMMONNUMBER
		SUB     A,0AH
		SZ      C
		CLR     R_LEDCOMMONNUMBER
		MOV     A,R_LEDCOMMONNUMBER
		ADDM    A,PCL
		JMP     L_SCANCOMMON0
		JMP     L_SCANCOMMON1
		JMP     L_SCANCOMMON2
		JMP     L_SCANCOMMON3
		JMP     L_SCANCOMMON4
		JMP     L_SCANCOMMON5
		JMP     L_SCANCOMMON6
		JMP     L_SCANCOMMON7
		JMP     L_SCANCOMMON8
		JMP     L_SCANCOMMON9
L_SCANCOMMON0:
		SWAPA   R_LEDSYEAR             ;;SHOW THE HIGH NIBBLE OF YEAR
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDLBAK.0
		CLR     ACC.7
		MOV     PC,A

		SWAPA   R_LEDHOUR              ;;SHOW THE HIGH NIBBLE OF HOUR
		CALL    SBR_GETLEDCHARACTER
		CALL    SBR_DISABLE0
		SZ      R_SOLARTERMIDMBAK.0
		CLR     ACC.7
		MOV     PD,A

		SWAPA   R_LEDTEMPERATURE      ;;SHOW THE HIGH NIBBLE OF TEMPERATURE
		CALL    SBR_GETLEDCHARACTER
		CALL    SBR_DISABLE0
		SZ      R_SOLARTERMIDHBAK.0
		CLR     ACC.7
		MOV     PE,A
		
		MOV     A,0FEH
		ANDM    A,PA
		JMP     L_SCANCOMMONEXIT
L_SCANCOMMON1:
		MOV     A,R_LEDSYEAR          ;;SHOW THE LOW NIBBLE OF YEAR
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDLBAK.1
		CLR     ACC.7
		MOV     PC,A

		MOV     A,R_LEDHOUR          ;;SHOW THE LOW NIBBLE OF HOUR
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDMBAK.1
		CLR     ACC.7
		MOV     PD,A

		MOV     A,R_LEDTEMPERATURE   ;;SHOW THE LOW NIBBLE OF TEMPERATURE
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDHBAK.1
		CLR     ACC.7
		MOV     PE,A

		MOV     A,0FDH
		ANDM    A,PA
		JMP     L_SCANCOMMONEXIT
L_SCANCOMMON2:
		SWAPA   R_LEDSMONTH         ;;SHOW THE HIGH NIBBLE OF SOLAR MONTH
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SETMODE2
		JMP     L_ENABLE0
		CALL    SBR_DISABLE0
L_ENABLE0:
		SZ      R_SOLARTERMIDLBAK.2
		CLR     ACC.7
		MOV     PC,A

		SWAPA   R_LEDMINUTE         ;;SHOW THE HIGH NIBBLE OF MINUTE
		CALL    SBR_GETLEDCHARACTER
		CALL    SBR_DISABLE0
		SZ      R_SOLARTERMIDMBAK.2
		CLR     ACC.7
		MOV     PD,A

		SWAPA   R_LEDLMONTH         ;;SHOW THE HIGH NIBBLE OF LUNAR MONTH
		CALL    SBR_GETLEDCHARACTER
		CALL    SBR_DISABLE0
		SZ      R_SOLARTERMIDHBAK.2
		CLR     ACC.7
		MOV     PE,A

		MOV     A,0FBH
		ANDM    A,PA		
		JMP     L_SCANCOMMONEXIT
L_SCANCOMMON3:
		MOV     A,R_LEDSMONTH       ;;SHOW THE LOW NIBBLE OF SOLAR MONTH
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDLBAK.3
		CLR     ACC.7
		MOV     PC,A

		MOV     A,R_LEDMINUTE       ;;SHOW  THE LOW NIBBLE OF MINUTE
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDMBAK.3
		CLR     ACC.7
		MOV     PD,A

		MOV     A,R_LEDLMONTH       ;;SHOW THE LOW NIBBLE OF LUNAR MONTH
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDHBAK.3
		CLR     ACC.7
		MOV     PE,A
		
		MOV     A,0F7H
		ANDM    A,PA
		JMP     L_SCANCOMMONEXIT
L_SCANCOMMON4:
		SWAPA   R_LEDSDATE         ;;SHOW THE HIGH NIBBLE OF SOLAR DATE
		CALL    SBR_GETLEDCHARACTER
		CALL    SBR_DISABLE0
		SZ      R_SOLARTERMIDLBAK.4
		CLR     ACC.7
		MOV     PC,A

		SWAPA   R_LEDSECOND        ;;SHOW THE HIGH NIBBLE OF SECOND
		CALL    SBR_GETLEDCHARACTER
		CALL    SBR_DISABLE0
		SZ      R_SOLARTERMIDMBAK.4
		CLR     ACC.7
		MOV     PD,A

		SWAPA   R_LEDLDATE         ;;SHOW THE HIGH NIBBLE OF LUNAR DATE
		CALL    SBR_GETLEDCHARACTER
		CALL    SBR_DISABLE0
		SZ      R_SOLARTERMIDHBAK.4
		CLR     ACC.7
		MOV     PE,A
	
		MOV     A,0EFH
		ANDM    A,PA
		JMP     L_SCANCOMMONEXIT
L_SCANCOMMON5:
		MOV     A,R_LEDSDATE       ;;SHOW THE LOW NIBBLE OF SOLAR DATE
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDLBAK.5
		CLR     ACC.7
		MOV     PC,A

		MOV     A,R_LEDSECOND      ;;SHOW THE LOW NIBBLE OF SECOND
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDMBAK.5
		CLR     ACC.7
		MOV     PD,A

		MOV     A,R_LEDLDATE       ;;SHOW THE LOW NIBBLE OF LUNAR DATE
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDHBAK.5
		CLR     ACC.7
		MOV     PE,A

		MOV     A,0DFH
		ANDM    A,PB
		JMP     L_SCANCOMMONEXIT
L_SCANCOMMON6:
		MOV     A,R_LEDWEEK       ;;SHOW THE WEEK
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDLBAK.6
		CLR     ACC.7
		MOV     PC,A

		MOV     A,10H
		ORM     A,R_LEDFLAG       ;;TURN OFF ALARM LED
		SZ      F_ALARM1
		JMP     L_ALARMLEDON
		SZ      F_ALARM2
		JMP     L_ALARMLEDON
		JMP     L_ALARMLEDOFF
L_ALARMLEDON:
		CLR     R_LEDFLAG.4       ;;TURN ON ALARM LED
L_ALARMLEDOFF:
		MOV     A,R_LEDFLAG       ;;SHOW THE AM,PM,DOT,ALARM,INTEGER TIME AND YEAR 20
		XOR     A,00100000B
		SZ      R_SOLARTERMIDMBAK.6
		CLR     ACC.7
		MOV     PD,A

		MOV     A,R_LEDDELTADAYS  ;;SHOW THE LOW NIBBLE OF SOLARTERM DELTA DAYS
		CALL    SBR_GETLEDCHARACTER
		SZ      R_SOLARTERMIDHBAK.6
		CLR     ACC.7
		MOV     PE,A

		MOV     A,0BFH
		ANDM    A,PB
		JMP     L_SCANCOMMONEXIT
L_SCANCOMMON7:
		SWAPA   R_LEDDELTADAYS
		CALL    SBR_GETLEDCHARACTER;;SHOW THE HIGH NIBBLE OF SOLARTERM DELTA DAYS
		CALL    SBR_DISABLE0     
		SZ      R_SOLARTERMIDLBAK.7
		CLR     ACC.7
		MOV     PC,A

		SNZ     R_SOLARTERMIDMBAK.7
		JMP     L_SHOWSEG24
		MOV     A,7FH
		ANDM    A,PD
L_SHOWSEG24:    
		SNZ     R_SOLARTERMIDHBAK.7
		JMP     L_SHOWCOMMON7
		MOV     A,7FH
		ANDM    A,PE
L_SHOWCOMMON7:
		MOV     A,7FH
		ANDM    A,PB
		JMP     L_SCANCOMMONEXIT
L_SCANCOMMON8:
		CALL    SBR_GETCHARGINGTIME
		JMP     L_SCANCOMMONEXIT
L_SCANCOMMON9:
		CALL    SBR_TRANSMITCOMMAND
;		JMP     L_SCANCOMMONEXIT
L_SCANCOMMONEXIT:
		INC     R_LEDCOMMONNUMBER
		RET		
;;********************************************
SBR_KEYSCAN:
		SZ     F_DELAYT3
		RET
		SZ     R_DEBOUNCE
		DEC    R_DEBOUNCE
L_KEYSCANPROCESS:
		MOV    A,PA
		AND    A,0E0H
		MOV    R_KEYNUM,A
		XOR    A,R_PREVKEY
		SZ     Z
		JMP    L_KEYKEEP
		JMP    L_KEYCHANGE
L_KEYKEEP:
		SZ     R_DEBOUNCE
		RET
		MOV    A,R_PREVKEY       ;;DEBOUNCE END
		XOR    A,0E0H
		SZ     Z
		JMP    L_KEYREALSE
		SET    F_VALIDKEY
		SNZ    F_KEYCHANGE
		JMP    L_KEYPRESSLONG    ;;LONG KEY
		CLR    F_KEYCHANGE
;;-------------------------------------------
;;PRESS KEY(HIGH TO LOW)
		SNZ    R_KEYNUM.7
		JMP    L_PROCESSMOVE
		SNZ    R_KEYNUM.6
		JMP    L_PROCESSUP
		SNZ    R_KEYNUM.5
		JMP    L_PROCESSDOWN
		RET	
;;-------------------------------------------
;;
L_KEYREALSE:
		CLR    F_VALIDKEY
		RET
;;-------------------------------------------
;;LONG PESS KEY(ALL LOW)
L_KEYPRESSLONG:
		JMP    L_KEYREALSE
;		RET
;;-------------------------------------------
L_KEYCHANGE:
		SET    F_KEYCHANGE
		MOV    A,R_KEYNUM
		MOV    R_PREVKEY,A
		MOV    A,C_DEBOUNCE
		MOV    R_DEBOUNCE,A
		RET
;;--------------------------------------------
L_PROCESSMOVE:
		CLR   R_ADJUSTTIME
		SET   F_KEYMOVE
		SZ    R_SETMODE2
		JMP   L_PROCESSSETALARM
		SZ    R_SETMODE1
		JMP   L_PROCESSSETCALENDAR
		SET   R_SETMODE1.0
		RET
L_PROCESSSETCALENDAR:
		RL    R_SETMODE1
		SNZ   R_SETMODE1.5
		RET
		CLR   R_SETMODE1.5
		SET   R_SETMODE2.0		
		RET
L_PROCESSSETALARM:
		RL    R_SETMODE2
		SNZ   R_SETMODE2.4
		RET
		CLR   R_SETMODE2.4
		CLR   F_KEYMOVE
		SZ    F_ALARM1
		JMP   L_PROCESSALARMFIANL2
		MOV   A,18H
		MOV   R_ALARMHOUR1,A
		CLR   R_ALARMMINUTE2
L_PROCESSALARMFIANL2:
		SZ    F_ALARM2
		RET
		MOV   A,18H
		MOV   R_ALARMHOUR2,A
		CLR   R_ALARMMINUTE2				
		RET
;;--------------------------------------------
L_PROCESSUP:
		SNZ   F_KEYMOVE
		JMP   L_SETSOLARTERMLEDMODE
		SET   F_NUMBERUP
		SZ    R_SETMODE1.0
		JMP   L_PROCUPYEAR
		SZ    R_SETMODE1.1
		JMP   L_PROCUPMONTH
		SZ    R_SETMODE1.2
		JMP   L_PROCUPDATE
		SZ    R_SETMODE1.3
		JMP   L_PROCUPHOUR
		SZ    R_SETMODE1.4
		JMP   L_PROCUPMINUTE
		SZ    R_SETMODE2.0
		JMP   L_PROCUPALARMNUMBER
		SZ    R_SETMODE2.1
		JMP   L_PROCUPALARMHOUR
		SZ    R_SETMODE2.2
		JMP   L_PROCUPALARMMINUTE
		SZ    R_SETMODE2.3
		JMP   L_PROCUPALARMON_OFF
		RET
L_PROCUPYEAR:
		SET   F_UPDATEDATE
		INC   R_YEAR_SOLAR
		MOV   A,R_YEAR_SOLAR
		SUB   A,20H
		SNZ   C
		RET
		MOV   A,01H
		MOV   R_YEAR_SOLAR,A
		RET
L_PROCUPMONTH:
		SET   F_UPDATEDATE
		INC   R_MONTH_SOLAR
		MOV   A,R_MONTH_SOLAR
		SUB   A,0DH
		SNZ   C
		RET
		MOV   A,01H
		MOV   R_MONTH_SOLAR,A
		RET
L_PROCUPDATE:
		SET   F_UPDATEDATE
		INC   R_DATE_SOLAR
		MOV   A,R_MONTH_SOLAR
		MOV   TBLP,A
		MOV   A,LOW T_MONTHDAYS_WEEK
		ADDM  A,TBLP
		CALL  SBR_GETMONTHDAYS
		SUB   A,R_DATE_SOLAR
		SZ    C
		RET
		MOV   A,01H
		MOV   R_DATE_SOLAR,A
		RET
L_PROCUPHOUR:
		INC   R_HOUR
		MOV   A,18H	
		SUB   A,R_HOUR
		SZ    C
		RET
		MOV   A,01H
		MOV   R_HOUR,A
		RET		
L_PROCUPMINUTE:
		INC   R_MINUTE
		MOV   A,3BH
		SUB   A,R_MINUTE
		SZ    C
		RET
		CLR   R_MINUTE
		RET
L_PROCUPALARMNUMBER:
		INC   R_ALARMNUMBER
		MOV   A,02H
		SUB   A,R_ALARMNUMBER
		SZ    C
		RET
		MOV   A,01H
		MOV   R_ALARMNUMBER,A
		RET
L_PROCUPALARMHOUR:
		MOV   A,01H
		XOR   A,R_ALARMNUMBER
		SNZ   Z
		JMP   L_PROCUPALARMHOUR2
		JMP   L_PROCUPALARMHOUR1
L_PROCUPALARMHOUR1:
		INC   R_ALARMHOUR1
		MOV   A,18H	
		SUB   A,R_ALARMHOUR1
		SZ    C
		RET
		MOV   A,01H
		MOV   R_ALARMHOUR1,A
		RET				
L_PROCUPALARMHOUR2:
		INC   R_ALARMHOUR2
		MOV   A,18H	
		SUB   A,R_ALARMHOUR2
		SZ    C
		RET
		MOV   A,01H
		MOV   R_ALARMHOUR2,A
		RET				
L_PROCUPALARMMINUTE:

⌨️ 快捷键说明

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