?? uvi_4245 nov 08 08.dt
字號:
LJMP UP_DO
UP_DO:
BANK 0 ;UP鍵有效
BS FLAG1,UP_KEY_LONG
MOV A,@0XC8
MOV T10SEC,A ;10SEC
MOV A,T_COUNT
MOV TEMP1,A
MOV A,@0X01
XOR A,TEMP1
JBC STATUS,Z
LJMP TIME_ADJ1
MOV A,@0X02
XOR A,TEMP1
JBC STATUS,Z
LJMP TURN_ADJ_24
MOV A,@0X03
XOR A,TEMP1
JBC STATUS,Z
LJMP MIN_ADJ
MOV A,@0X04
XOR A,TEMP1
JBC STATUS,Z
LJMP HOUR_ADJ
MOV A,@0X05
XOR A,TEMP1
JBC STATUS,Z
LJMP DAY_ADJ
MOV A,@0X06
XOR A,TEMP1
JBC STATUS,Z
LJMP MONTH_ADJ
LJMP TIME_ADJ1
;----------------------------------------
TURN_ADJ_24:
BANK 0
JBS FLAG1,FLAG_24
LJMP TURN_ADJ_24A
BC FLAG1,FLAG_24 ;12
LJMP TURN_ADJ_24B
TURN_ADJ_24A:
BS FLAG1,FLAG_24 ;24
TURN_ADJ_24B:
LJMP TIME_ADJ1
;-----------------------------------------------
MIN_ADJ: ;分計時
INC MIN
MOV A,@0X3C
SUB A,MIN
JBC STATUS,C
CLR MIN
LJMP TIME_ADJ1
;-------------------------------------------------
HOUR_ADJ: ;時計時24小時制
INC HOUR
MOV A,@0X18
SUB A,HOUR
JBC STATUS,C
CLR HOUR
MOV A,@0X0D
SUB A,HOUR
JBC STATUS,C
LJMP HOUR_ADJ1
MOV HOUR,HOUR
JBS STATUS,Z
LJMP HOUR_ADJ1A
MOV A,@0X0C ;24點時顯示12點
MOV HOUR_12,A
LJMP HOUR_ADJ2
HOUR_ADJ1A:
MOV A,HOUR ;<=12
MOV HOUR_12,A
LJMP HOUR_ADJ2
HOUR_ADJ1:
MOV A,@0X0C ;>12
SUB A,HOUR
MOV HOUR_12,A
HOUR_ADJ2:
LJMP TIME_ADJ1
;--------------------------------------------
DAY_ADJ: ;日計時
INC DAY
LCALL DAY_LOOKUP
MOV A,DAYMAX
BANK 0
SUB A,DAY
JBS STATUS,C
LJMP TIME_ADJ1
MOV A,@0X01
MOV DAY,A
LJMP TIME_ADJ1
;----------------------------------------------
MONTH_ADJ:
INC MONTH
MOV A,@0X0D
SUB A,MONTH
JBS STATUS,C
LJMP TIME_ADJ1
MOV A,@0X01
MOV MONTH,A
LJMP TIME_ADJ1
;------------------------------------------------
DOWN_KEY:
BANK 0
JBC FLAG1,DOWN_KEY_LONG
LJMP DOWN_LONG
DOWN_SHORT:
MOV A,@0X14
MOV DOWN_TIME,A
MOV A,@0X05
MOV DOWN_TIME1,A
LJMP DOWN_DO
DOWN_LONG:
BANK 0
DJZ DOWN_TIME
LJMP TIME_ADJ1
MOV A,@0X01
MOV DOWN_TIME,A
DJZ DOWN_TIME1
LJMP TIME_ADJ1
MOV A,@0X05
MOV DOWN_TIME1,A
DOWN_DO:
BANK 0 ;DOWN鍵有效
BS FLAG1,DOWN_KEY_LONG
MOV A,@0XC8
MOV T10SEC,A ;10SEC
MOV A,T_COUNT
MOV TEMP1,A
MOV A,@0X01
XOR A,TEMP1
JBC STATUS,Z
LJMP TIME_ADJ1
MOV A,@0X02
XOR A,TEMP1
JBC STATUS,Z
LJMP TURN_ADJ_24_D
MOV A,@0X03
XOR A,TEMP1
JBC STATUS,Z
LJMP MIN_ADJ_D
MOV A,@0X04
XOR A,TEMP1
JBC STATUS,Z
LJMP HOUR_ADJ_D
MOV A,@0X05
XOR A,TEMP1
JBC STATUS,Z
LJMP DAY_ADJ_D
MOV A,@0X06
XOR A,TEMP1
JBC STATUS,Z
LJMP MONTH_ADJ_D
LJMP TIME_ADJ1
;--------------------------------------------------
TURN_ADJ_24_D:
BANK 0
JBS FLAG1,FLAG_24
LJMP TURN_ADJ_24_D1
BC FLAG1,FLAG_24 ;12
LJMP TURN_ADJ_24_D2
TURN_ADJ_24_D1:
BS FLAG1,FLAG_24 ;24
TURN_ADJ_24_D2:
LJMP TIME_ADJ1
;------------------------------------------------
MIN_ADJ_D: ;分計時
MOV MIN,MIN
JBS STATUS,Z
LJMP MIN_ADJ_D1
MOV A,@0X3C ;59
MOV MIN,A
MIN_ADJ_D1:
DEC MIN
LJMP TIME_ADJ1
;-----------------------------------------------------
HOUR_ADJ_D: ;時計時24小時制
MOV HOUR,HOUR
JBS STATUS,Z
LJMP HOUR_ADJ_D1
MOV A,@0X18
MOV HOUR,A
HOUR_ADJ_D1:
DEC HOUR
MOV A,@0X0D
SUB A,HOUR
JBC STATUS,C
LJMP HOUR_ADJ_D2
MOV HOUR,HOUR ;為0則顯示12
JBS STATUS,Z
LJMP HOUR_ADJ_D1A
MOV A,@0X0C
MOV HOUR_12,A
LJMP HOUR_ADJ_D3
HOUR_ADJ_D1A:
MOV A,HOUR ;<=12
MOV HOUR_12,A
LJMP HOUR_ADJ_D3
HOUR_ADJ_D2:
MOV A,@0X0C ;>12
SUB A,HOUR
MOV HOUR_12,A
HOUR_ADJ_D3:
LJMP TIME_ADJ1
;----------------------------------------------------
DAY_ADJ_D: ;日計時
MOV A,@0X01
XOR A,DAY
JBS STATUS,Z
LJMP DAY_ADJ_D1
LCALL DAY_LOOKUP
MOV A,DAYMAX
BANK 0
MOV DAY,A
DAY_ADJ_D1:
DEC DAY
LJMP TIME_ADJ1
;---------------------------------------------
MONTH_ADJ_D:
MOV A,@0X01
XOR A,MONTH
JBS STATUS,Z
LJMP MONTH_ADJ_D1
MOV A,@0X0D
MOV MONTH,A
MONTH_ADJ_D1:
DEC MONTH
LJMP TIME_ADJ1
;------------------------------------------------
TIME_ADJ_RET:
BC PRST,FUV
BC FLAG1,UV_SHORT
BC FLAG2,SET_SHORT
BC FLAG2,SET_LONG
BC PRST,FDEM
BC PRST,FSET
RET
;============================================
;============================================
TIME_DISPLAY:
BANK 0
MOV A,MONTH
LCALL DAY_LOOKUP
MOV DAYMAX,A ;查表每月天數
HM_CON:
BANK 0
JBC FLAG1,FLAG_24
LJMP HM_CON1
MOV A,HOUR_12
LJMP HM_CON2
HM_CON1:
MOV A,HOUR
HM_CON2:
MOV TEMP1,A
LCALL DISH
BANK 0
MOV DIS1,DIS1
JBS STATUS,Z
LJMP HM_CON3
MOV A,@0X0A
MOV DIS1,A
HM_CON3:
BANK 0
MOV A,MIN
MOV TEMP1,A
LCALL DISL
DOT_CON:
BANK 0
CLR FLAG
JBC PRST,FSEC
BS FLAG,FCOLDIS
PM_FLAG:
JBC FLAG1,FLAG_24
LJMP PM_FLAG1
MOV A,@0X0C
SUB A,HOUR
JBC STATUS,C
LJMP PM_FLAG1
BS FLAG,FPMDIS
LJMP D_FLAG
PM_FLAG1:
BC FLAG,FPMDIS
D_FLAG: ;D_MODE FLAG
JBC FLAG1,D_MODE_FLAG
BS FLAG,FDDIS
BATL_DIS:
JBS PRST,FBAT
LJMP TIME_DIS
JBC PRST,FSEC
BS FLAG,FBATDIS
TIME_DIS:
LCALL SEG_COM
LCALL COM_RAM
RET
;============================================
DISH:
BANK 0
CLR DIS1
CLR DIS2
DISH1:
BANK 0
MOV A,@0X0A
SUB A,TEMP1
JBS STATUS,C
LJMP DISH2
MOV TEMP1,A
INC DIS1
LJMP DISH1
DISH2:
MOV A,TEMP1
MOV DIS2,A
RET
;======================================================
DISL:
BANK 0
CLR DIS3
CLR DIS4
DISL1:
BANK 0
MOV A,@0X0A
SUB A,TEMP1
JBS STATUS,C
LJMP DISL2
MOV TEMP1,A
INC DIS3
LJMP DISL1
DISL2:
MOV A,TEMP1
MOV DIS4,A
RET
;============================================
;自動保存A,BANK數據,需軟件清0中斷標志位OK
;============================================
T1_INT: ;0.5定時
BANK 0
JBS PRST,FSEC
LJMP T1_INT_D
BC PRST,FSEC
LJMP T1_RET
T1_INT_D:
JBS FLAG1,D_MODE_FLAG
LJMP CLR_D_TIME_COUNT
D_TIME_COUNT:
INC D_SEC
MOV A,@0X3C
SUB A,D_SEC
JBS STATUS,C
LJMP T1_INT1
CLR D_SEC
MOV D_MIN,D_MIN
JBS STATUS,Z
LJMP D_MIN_DEC
MOV A,@0X00
XOR A,D_HOUR
JBC STATUS,Z
LJMP HOUR_MIN_0
DEC D_HOUR ;HOUR!=0,MIN=0
MOV A,@0X3C
MOV D_MIN,A
LJMP D_MIN_DEC
HOUR_MIN_0:
MOV A,@0X00 ;HOUR=0,MIN=0
MOV D_MIN,A
MOV D_HOUR,A
INC SPEAK_TIME
MOV A,@0X0A
SUB A,SPEAK_TIME
JBC STATUS,C
LJMP SPEAK_OUT
BANK 4
JBS WBCR,BUZE
LJMP SPEAK_ON
BC WBCR,BUZE
LJMP T1_INT1
SPEAK_ON:
BANK 4
BS WBCR,BUZE
LJMP T1_INT1
SPEAK_OUT:
CLR SPEAK_TIME
BC FLAG1,D_MODE_FLAG
LJMP T1_INT1
D_MIN_DEC:
DEC D_MIN
LJMP T1_INT1
CLR_D_TIME_COUNT:
BANK 0
CLR D_HOUR
CLR D_MIN
CLR D_SEC
T1_INT1:
BS PRST,FSEC
INC SEC
MOV A,@0X3C ;60
SUB A,SEC
JBS STATUS,C
LJMP T1_RET
BS PRST,FTBAT ;每1MIN測試一次電源電壓
CLR SEC
INC MIN
MOV A,@0X3C ;60
SUB A,MIN
JBS STATUS,C
LJMP T1_RET
CLR MIN
INC HOUR
MOV A,@0X18 ;24
SUB A,HOUR
JBS STATUS,C
LJMP T1_RET
CLR HOUR
INC DAY
MOV A,DAYMAX ;29 31 32
SUB A,DAY
JBS STATUS,C
LJMP T1_RET
MOV A,@0X01
MOV DAY,A
INC MONTH
MOV A,@0X0D ;13
SUB A,MONTH
JBS STATUS,C
LJMP T1_RET
MOV A,@0X01
MOV MONTH,A
T1_RET:
BC ISR,7
RETI
;============================================
TCC_INT:
BANK 0
BS PRST,F50MS
MOV A,@0X35
MOV TCC,A
MOV A,@0X0D ;24/0->12PM
SUB A,HOUR
JBS STATUS,C
LJMP HOUR_12PM
MOV A,@0X0C
SUB A,HOUR
MOV HOUR_12,A
LJMP HOUR_12AM
HOUR_12PM:
MOV HOUR,HOUR
JBC STATUS,Z
LJMP HOUR_12PMA
MOV A,HOUR
MOV HOUR_12,A
LJMP HOUR_12AM
HOUR_12PMA:
MOV A,@0X0C
MOV HOUR_12,A
HOUR_12AM:
NOP
NOP
uv_key:
JBS PORTB,UV
LJMP UV_ON
mov key_time,key_time
jbc status,z
LJMP uv_off
bs flag1,uv_short ;uv 短按
mov a,@0x00
mov key_time,a
uv_off:
jbs flag1,uv_flag
LJMP uv_off1
bc flag1,uv_flag
LJMP key_out
uv_off1:
jbc flag1,uv_state
bc flag1,uv_state
LJMP key_out
uv_on:
jbc flag1,uv_flag
LJMP uv_on1
bs flag1,uv_flag
LJMP key_out
uv_on1:
jbc flag1,uv_state
LJMP uv_long
uv_do:
bs flag1,uv_state
mov a,@0x26
mov key_time,a
LJMP key_out
uv_long:
mov key_time,key_time
jbc status,z
LJMP key_out
djz key_time
LJMP key_out
bs PRST,FUV ;uv長按2s
LJMP key_out
key_out:
JBS FLAG2,SET_MODE_FLAG
LJMP TCC_RET
SET_KEY_T:
JBS PORTB,SET
LJMP SET_ON
MOV SET_KEY_TIME,SET_KEY_TIME
JBC STATUS,Z
LJMP SET_OFF
BS FLAG2,SET_SHORT ;uv 短按
MOV A,@0X00
MOV SET_KEY_TIME,A
SET_OFF:
JBS FLAG2,SET_FLAG
LJMP SET_OFF1
BC FLAG2,SET_FLAG
LJMP TCC_RET
SET_OFF1:
JBC FLAG2,SET_STATE
BC FLAG2,SET_STATE
LJMP TCC_RET
SET_ON:
JBC FLAG2,SET_FLAG
LJMP SET_ON1
BS FLAG2,SET_FLAG
LJMP TCC_RET
SET_ON1:
JBC FLAG2,SET_STATE
LJMP SET_LONG_T
SET_DO_T:
BS FLAG2,SET_STATE
MOV A,@0X26
MOV SET_KEY_TIME,A
LJMP TCC_RET
SET_LONG_T:
MOV SET_KEY_TIME,SET_KEY_TIME
JBC STATUS,Z
LJMP TCC_RET
DJZ SET_KEY_TIME
LJMP TCC_RET
BS FLAG2,SET_LONG ;uv長按2s
TCC_RET:
BC ISR,0
RETI
;============================================
EXT_INT:
BANK 0
BS PRST,FTBAT
JBS PORTB,SET
BS PRST, FSET
EXT_RET:
BANK 1
CLR EISR
RETI
;============================================
TP_INT:
BANK 0
NOP
NOP
RETI
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -