📄 jiashiqi.asm
字号:
;output:TempReg+3
; TempReg+7~4/RtRFC2~1~0=TempReg+3
;**********************************************
TempReg7To4_SubRtRFC:
lds TempReg+3,00h
lds TempReg+2,00h
lds TempReg+1,00h
SubAgain:
lda RtRFC0
sub TempReg+4
lda RtRFC1
sbc TempReg+5
lda RtRFC2
sbc TempReg+6
lda RtRFC3
sbc TempReg+7
sbci TempReg+8,00
jnc SubRts
addi* TempReg+3,01h
adci* TempReg+2,00h
adci* TempReg+1,00h
lda RtRFC0
sub* TempReg+4
lda RtRFC1
sbc* TempReg+5
lda RtRFC2
sbc* TempReg+6
lda RtRFC3
sbc* TempReg+7
sbci* TempReg+8,00
jmp SubAgain
SubRts:
rts
;**************************************************************************
;name:GetTemperatureFromTab:
;input:Result3,Result2,Result1,Result0
;output:TemperatureC1,TemperatureC0,(hex code Table Index)
;
;**************************************************************************
GetTemperatureFromTab:
lda read_th
jb0 temperature_GetTemperatureFromTab
;********************************************
;********************************************
humidity_GetTemperatureFromTab:
;--------------------------------------------确定温度
lds humidity_disp_l,0dh
lds humidity_disp_h,01h ;29湿度起
lda TemperatureC0
sta TempReg+8
lda TemperatureC1
sta TempReg+9
or TempReg+8 ;温度为0则显示Lo
or TempReg+9
jz humidity_value_too_low
lds Result0,0fh ;温度超过40显示H1
lds Result1,0fh
call CompareResultWithTempReg_2bit
jz humidity_value_OutOfRange ;温度超过40?
;---------------------------------------------------------1degree
lds TemperatureTableAddrL,04
lds TemperatureTableAddrH,05
lds TemperatureTableAddrF,00
mvu TemperatureTableAddrF
mvh TemperatureTableAddrH
mvl TemperatureTableAddrL ;表格
lds Result0,2 ;先读取1degree表首
lds Result1,0
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取3degree表首
lds Result0,4
lds Result1,0
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取5degree表首
lds Result0,6
lds Result1,0
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取7degree表首
lds Result0,8
lds Result1,0
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取9degree表首
lds Result0,10
lds Result1,0
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取11degree表首
lds Result0,12
lds Result1,0
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取13degree表首
lds Result0,14
lds Result1,0
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取15degree表首
lds Result0,0
lds Result1,1
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取17degree表首
lds Result0,2
lds Result1,1
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取19degree表首
lds Result0,4
lds Result1,1
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取21degree表首
lds Result0,6
lds Result1,1
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取23degree表首
lds Result0,8
lds Result1,1
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取25degree表首
lds Result0,10
lds Result1,1
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取27degree表首
lds Result0,12
lds Result1,1
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取29degree表首
lds Result0,14
lds Result1,1
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取31degree表首
lds Result0,0
lds Result1,2
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取33degree表首
lds Result0,2
lds Result1,2
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取35degree表首
lds Result0,4
lds Result1,2
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取37degree表首
lds Result0,6
lds Result1,2
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
call table_humidity ;先读取39degree表首
lds Result0,8
lds Result1,2
call CompareResultWithTempReg_2bit
jnc humidity_value
; jz humidity_value
;--------------------------------------------
temperature_zero:
temperature_40degree:
rts
;--------------------------------------------
humidity_value:
; lda Result_rh0
; sta Result0
; lda Result_rh1
; sta Result1
; lda Result_rh2
; sta Result2
; lda Result_rh3
; sta Result3
; mvu TemperatureTableAddrF
; mvh TemperatureTableAddrH
; mvl TemperatureTableAddrL ;表格
;------------------------------------------湿度太低判断
lda Result_rh4
jnz humidity_value_too_low
call GIVE_DEC_DIGITAL
jz humidity_value_too_low
;-----------------------------------------
call GetDataFromTabLeAndIncHL
call CompareResultWithTempReg
jnc humidity_value_too_low
;-----------------------------------不低于一定湿度,则
mvu TemperatureTableAddrF
mvh TemperatureTableAddrH
mvl TemperatureTableAddrL ;表格
;-----------------------------------
lds humidity_disp_H1_Lo_Co,0
humidity_value_LookUpAgain:
call GetDataFromTabLeAndIncHL
jz humidity_value_OutOfRange
call CompareResultWithTempReg
jnc humidity_value_get
call humidity_value_add
jmp humidity_value_LookUpAgain
humidity_value_too_low:
lds humidity_disp_H1_Lo_Co,1
rts
humidity_value_OutOfRange:
lds humidity_disp_H1_Lo_Co,2
rts
humidity_value_add:
lds TempReg+0,02h
add* humidity_disp_l
lds TempReg+0,00h
adc* humidity_disp_h
rts
humidity_value_get:
rts
;********************************************
;********************************************为温度求值部分1
temperature_GetTemperatureFromTab:
lda Result_rt0
sta Result0
lda Result_rt1
sta Result1
lda Result_rt2
sta Result2
lda Result_rt3
sta Result3
lda Result0
or Result1
or Result2
or Result3
jz TemperatureOutOfRange_1 ;Temperature Too Low ;Result<TempReg温度低于0度则显示00
lds TempReg+0,TemperatureTabAddressL
lds TempReg+1,TemperatureTabAddressH
LookUpBegin:
mvu TempZero
mvh TempReg+1
mvl TempReg+0
lds TemperatureC1,00h
lds TemperatureC0,00h
; call GetDataFromTabLeAndIncHL
; mwr TemperatureTableAddrL,TempReg+0
; mwr TemperatureTableAddrH,TempReg+1
; call CompareResultWithTempReg
; jnc TemperatureOutOfRange_1 ;Temperature Too Low ;Result<TempReg
LookUpAgain:
call GetDataFromTabLeAndIncHL
jz TemperatureOutOfRange_2 ;Table end Flag is found
call CompareResultWithTempReg
jnc GetResult ;Result>TempReg
call TemperatureInc1Degree
jmp LookUpAgain
TemperatureOutOfRange_1: ;温度低于0度
lds TemperatureC1,00h
lds TemperatureC0,00h
rts
TemperatureOutOfRange_2: ;温度大于40度
lds TemperatureC1,0fh
lds TemperatureC0,0fh
rts
GetResult:
rts
;--------------------------------------------为温度求值部分2
TemperatureInc1Degree:
;------------------用于查湿度表,十六进制
lds TempReg+0,01h ;Temperature Inc 1 Degree,
add* TemperatureC0 ;because Temperature table
lds TempReg+0,00h
adc* TemperatureC1
rts
;***************************************
;***************************************比较大小
CompareResultWithTempReg_2bit:
lda Result0
sub TempReg+8
lda Result1
sbc TempReg+9
rts
;***************************************比较大小
CompareResultWithTempReg:
lda Result0
sub TempReg+4
lda Result1
sbc TempReg+5
lda Result2
sbc TempReg+6
lda Result3
sbc TempReg+7
rts
;***************************************查表
;***************************************
GetDataFromTabLeAndIncHL:
ldh TempReg+7,@hl
ldl* TempReg+6,@hl
ldh TempReg+5,@hl
ldl* TempReg+4,@hl
or TempReg+5 ;check table end flag
or TempReg+6
or TempReg+7
rts
;**************************************切换表格
;**************************************
table_humidity:
mrw TempReg+5,TemperatureTableAddrL
mrw TempReg+6,TemperatureTableAddrH
mrw TempReg+7,TemperatureTableAddrF
addi* TempReg+5,08h
adci* TempReg+6,03h
adci* TempReg+7,00h
mwr TemperatureTableAddrL,TempReg+5
mwr TemperatureTableAddrH,TempReg+6
mwr TemperatureTableAddrF,TempReg+7
mvu TemperatureTableAddrF
mvh TemperatureTableAddrH
mvl TemperatureTableAddrL ;表格
rts
;**************************************湿度表格加2
;**************************************
table_ok:
mrw TempReg+5,TemperatureTableAddrL
mrw TempReg+6,TemperatureTableAddrH
mrw TempReg+7,TemperatureTableAddrF
addi* TempReg+5,02h
adci* TempReg+6,00h
adci* TempReg+7,00h
mvu TemperatureTableAddrF
mvh TemperatureTableAddrH
mvl TemperatureTableAddrL ;表格
rts
;************************************************************************
GIVE_DEC_DIGITAL:
lda Result_rh3
sta Result3
lda Result_rh2
sta Result2
lda Result_rh1
sta Result1
lda Result_rh0
sta Result0 ;放入比较数值
or Result1 ;check table end flag
or Result2
or Result3
rts
;**************************************************************************
;**************************************************************************
;name:DispTemperatureCF
;input:TempReg+4,TempReg+3,TempReg+2,(Bcd code)
; Tempra*F2,Tempra*1, Tempra*0
;
;**************************************************************************
DispTemperatureCF:
lda disp_all_time
jnz screen_all_disp
lda power_big
jb2 DispTemperatureCF_x_next;开
jmp screen_all_clr ;关
;--------------温度和湿度显示转化部分
DispTemperatureCF_x_next:
jmp DispTemperatureCF_x
; lda read_th
jb1 DispTemperatureCF_x
;--------------
mrw TempReg+2,TemperatureC1
mrw TempReg+1,TemperatureC0
jmp DispTemperatureCF_1 ;此部为设定显示温度,保留
DispTemperatureCF_x:
lda humitity_set_time
jnz DispTemperatureCF_1_set ;是否处于设定湿度状态
lda humidity_disp_H1_Lo_Co
jz DispTemperatureCF_1_2 ;判断湿度是否超过范围
mrw TempReg+1,humidity_disp_H1_Lo_Co
subi TempReg+1,1
jz DispTemperatureCF_1_low ;湿度太低
subi TempReg+1,2
jz DispTemperatureCF_1_high ;湿度太高
rts
;=========================================;湿度太低;湿度太高
DispTemperatureCF_1_low:
lds TempReg+3,0011b
lds TempReg+4,1000b
lda TempReg+3
lcp 00h,TempReg+4
lds TempReg+3,0101b
ori* TempReg+3,1000b ;显示当前湿度标志
lds TempReg+4,1100b
lda TempReg+3
lcp 01h,TempReg+4
jmp DispTemperatureCF_3
DispTemperatureCF_1_high:
lds TempReg+3,0111b
lds TempReg+4,0110b
lda TempReg+3
lcp 00h,TempReg+4
lds TempReg+3,0000b
ori* TempReg+3,1000b ;显示当前湿度标志
lds TempReg+4,0110b
lda TempReg+3
lcp 01h,TempReg+4
jmp DispTemperatureCF_3
;=========================================
DispTemperatureCF_1_set: ;显示设定湿度
mrw TempReg+2,consumer_set_humitity_h
mrw TempReg+1,consumer_set_humitity_l
lda power_big
jb1 DispTemperatureCF_1_set_3
jmp DispTemperatureCF_1_set_1
DispTemperatureCF_1_set_3:
lds temp_2,1101b ;闪动
and* power_big
call screen_clr ;设定时闪烁
jmp DispTemperatureCF_3
DispTemperatureCF_1_set_1:
lds temp_2,0010b ;闪动
or* power_big
subi TempReg+2,5 ;如果小于85则显示正常设定数值
jnz DispTemperatureCF_1
subi TempReg+1,0ah
jnz DispTemperatureCF_1
lds TempReg+3,0011b
lds TempReg+4,1001b
ori* TempReg+3,1000b
lcp 00h,TempReg+4 ;C
lds TempReg+3,0101b
lds TempReg+4,1100b
lda TempReg+3
lcp 01h,TempReg+4 ;o
jmp DispTemperatureCF_3
;------------------------------------------;显示实际湿度
DispTemperatureCF_1_2:
mrw TempReg+2,humidity_disp_h
mrw TempReg+1,humidity_disp_l
;-----------------------------------------高位数值温度
DispTemperatureCF_1:
call reduce
lda TempReg+3
sta TempReg+2
call Disp_table_end
lda humitity_set_time ;判断是否处于设定状态
jz DispTemperatureCF_1_1
ori* TempReg+3,1000b
DispTemperatureCF_1_1:
lda TempReg+3
lcp 00h,TempReg+4
lda TempReg+1
sta TempReg+2
call Disp_table_end
lda humitity_set_time ;判断是否处于设定状态,如果不为设定状态则显示当前湿度图标
jnz DispTemperatureCF_1_3
ori* TempReg+3,1000b
DispTemperatureCF_1_3:
lda TempReg+3
lcp 01h,TempReg+4
;-----------------------------------------
DispTemperatureCF_3:
lds TempReg+3,0
lds TempReg+4,0
;------------;无定时,有定时,定时标志
lda timer_hour_h
jnz DispTemperatureCF_3_1
lda timer_hour_l
jnz DispTemperatureCF_3_1
jmp DispTemperatureCF_3_2
DispTemperatureCF_3_1:
ori* TempReg+4,0101b
;------------;显示大功率标志
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -