📄 jiashiqi.asm
字号:
DispTemperatureCF_3_2:
lda power_big
jb0 DispTemperatureCF_3_3
jmp DispTemperatureCF_3_4
DispTemperatureCF_3_3
ori* TempReg+4,0010b
;------------;缺水显示
DispTemperatureCF_3_4:
lda power_big
jb3 DispTemperatureCF_3_5
jmp DispTemperatureCF_3_6
DispTemperatureCF_3_5:
lda Schmitt_on_off
jb3 DispTemperatureCF_3_5_1
lds temp_2,1000b
or* Schmitt_on_off
ori* TempReg+3,0001b
jmp DispTemperatureCF_3_6
DispTemperatureCF_3_5_1:
lds temp_2,0111b
and* Schmitt_on_off
jmp DispTemperatureCF_3_6
;------------连续运行标志
DispTemperatureCF_3_6:
lda Schmitt_on_off
jb2 DispTemperatureCF_3_7
jmp DispTemperatureCF_3_8
DispTemperatureCF_3_7:
ori* TempReg+3,0010b
;------------湿度达到则关闭湿度加湿标志
DispTemperatureCF_3_8:
lda disp_no
jb0 DispTemperatureCF_3_9
andi* TempReg+4,1101b ;关闭大功率显示
andi* TempReg+3,0111b ;关闭小功率显示
jmp DispTemperatureCF_3_12
DispTemperatureCF_3_9: ;小功率长显示
ori* TempReg+3,1000b
DispTemperatureCF_3_10:
lda power_big
jb3 DispTemperatureCF_3_11
ori* TempReg+3,1000b
jmp DispTemperatureCF_3_12
DispTemperatureCF_3_11: ;小功率长显示
andi* TempReg+4,1101b ;关闭大功率显示
andi* TempReg+3,0111b ;关闭小功率显示
;------------
DispTemperatureCF_3_12:
ori* TempReg+3,0100b
lda TempReg+3
lcp 02h,TempReg+4
;-----------------------------------------设定时间
DispTemperatureCF_4:
mrw TempReg+2,timer_hour_h
mrw TempReg+1,timer_hour_l
lda TempReg+2
jnz DispTemperatureCF_4_1
DispTemperatureCF_4_no_1:
lda TempReg+1
jz DispTemperatureCF_4_no_2 ;为0则不显示
DispTemperatureCF_4_1:
call reduce
lda TempReg+3
jz DispTemperatureCF_4_2
lda TempReg+1
sta TempReg+2
call Disp_table_end
ori TempReg+3,1000b
lcp 03h,TempReg+4
rts
DispTemperatureCF_4_2:
lda TempReg+1
sta TempReg+2
call Disp_table_end
lda TempReg+3
lcp 03h,TempReg+4
rts
DispTemperatureCF_4_no_2:
lds TempReg+3,0
lcp 03h,TempReg+3
rts
;-----------------------------------------设定湿度时闪动,关闭显示
screen_clr:
lds TempReg+3,0
lcp 00h,TempReg+3
lds TempReg+3,0
lcp 01h,TempReg+3
rts
;-----------------------------------------关闭显示屏
screen_all_clr:
lds TempReg+4,0000b
lds TempReg+3,0000b
lcp 00h,TempReg+4
lcp 01h,TempReg+4
lcp 02h,TempReg+4
lcp 03h,TempReg+4
rts
;-----------------------------------------
screen_all_disp:
rts
;------------------------------------------
Disp_table_end:
lds TempReg+3,0011b ;TempReg+3=hgfe
lds TempReg+4,1111b ;TempReg+4=dcba
subi TempReg+2,00
jz Disp_table_end_1
lds TempReg+3,0000b
lds TempReg+4,0110b
subi TempReg+2,01
jz Disp_table_end_1
lds TempReg+3,0101b
lds TempReg+4,1011b
subi TempReg+2,02
jz Disp_table_end_1
lds TempReg+3,0100b
lds TempReg+4,1111b
subi TempReg+2,03
jz Disp_table_end_1
lds TempReg+3,0110b
lds TempReg+4,0110b
subi TempReg+2,04
jz Disp_table_end_1
lds TempReg+3,0110b
lds TempReg+4,1101b
subi TempReg+2,05
jz Disp_table_end_1
lds TempReg+3,0111b
lds TempReg+4,1101b
subi TempReg+2,06
jz Disp_table_end_1
lds TempReg+3,0000b
lds TempReg+4,0111b
subi TempReg+2,07
jz Disp_table_end_1
lds TempReg+3,0111b
lds TempReg+4,1111b
subi TempReg+2,08
jz Disp_table_end_1
lds TempReg+3,0110b
lds TempReg+4,1111b
subi TempReg+2,09
jz Disp_table_end_1
rts
lds TempReg+3,0011b
lds TempReg+4,1000b
subi TempReg+2,10 ;L
jz Disp_table_end_1
lds TempReg+3,0101b
lds TempReg+4,1100b
subi TempReg+2,11 ;o
jz Disp_table_end_1
lds TempReg+3,0111b
lds TempReg+4,0110b
subi TempReg+2,12 ;H
jz Disp_table_end_1
lds TempReg+3,0000b
lds TempReg+4,0110b
subi TempReg+2,13 ;1
jz Disp_table_end_1
rts
Disp_table_end_1
rts
;------------------------------------十六进制分解为十进制
;TempReg+2,TempReg+1 为十六进制数
;TempReg+3,TempReg+1 为十进制数
;------------------------------------
reduce:
lds TempReg+3,0
reduce_1:
subi TempReg+1,10
jnc reduce_2
subi* TempReg+1,10
inc* TempReg+3
jmp reduce_1
reduce_2:
subi TempReg+2,1
jnc reduce_3
subi* TempReg+1,10
sbci* TempReg+2,00
inc* TempReg+3
jmp reduce_1
reduce_3:
rts
;**************************************************************************
;**************************************************************************
Initialize:
InitPortSub:
lds TempReg+0,00H ;output Port Initialize
opb TempReg+0 ;output Port Initialize
spb 1111B ;output Port Initialize
spc 10000B ;Input Port Initialize
InitRAMSub_1:
lds TempReg+0,0fH ;clear RAM 80h~1ffh
lds TempReg+1,0fH
lds TempReg+2,01h
lds TempZero,00h
ClearRAMLoop:
mvu TempReg+2
mvh TempReg+1
mvl TempReg+0
mrw @HL,TempZero
subi* TempReg+0,01h
sbci* TempReg+1,00h
sbci* TempReg+2,00h
lda TempReg+2
jnz ClearRAMLoop
ClearRAMLoop_1:
andi TempReg+1,1000b
jnz ClearRAMLoop
InitRAMSub_2:
lds TempReg+0,0fH ;clear RAM 00h~6fh
lds TempReg+1,06H
lds TempReg+2,00h
ClearRAMLoop3:
mvu TempReg+2
mvh TempReg+1
mvl TempReg+0
mrw @HL,TempZero
subi* TempReg+0,01h
sbci* TempReg+1,00h
sbci* TempReg+2,00h
jc ClearRAMLoop3
rts
;**************************************************************************
;**************************************************************************
ClearBCF:
lda IntFlag
jnz _rts
rf 10B ;Clear BCF flag
_rts:
rts
;**************************************************************************
;**************************************************************************
;**************************************************************************
;**************************************************************************
;**************************************************************************
;**************************************************************************
;**************************************************************************
Reset:
;-------------------------------------------
fast
sf 10h
;-------------------------------------------
disp_all_1:
lds TempReg+3,0fh
lcp 00h,TempReg+3
lcp 01h,TempReg+3
lcp 02h,TempReg+3
lcp 03h,TempReg+3
;-------------------------------------------
lds temp_2,00h
opa temp_2
opb temp_2
opc temp_2
opd temp_2
spa 0fh;
spb 0fh;
spc 0fh;
spd 0fh;
lds temp_2,00h
opa temp_2
opb temp_2
opc temp_2
opd temp_2
sca 000000B ;prevent port A and C halt release
she 0000000B ;prevent timer1,2 int 0.5S RFC HaltRe
sie* 0000000B ;prevent all interrupts
sre 0000000B ;prevent all stop release source
rf 10010101B ;disable timer 1 reload function
;disable watchdog
;disable EL-light
;clear CF
rf2 111B ;enable LCD
;reset DED flag
;disable timer 2 reload function
call Initialize
plc 1111111B ;clear all the halt release flags
lds C_TIME1,7 ;inernal couter to control timer2 overflow times
lds C_TIME2,0
srf 1AH ;Build up the Rt NetWork and enable counter
TMSX 7FH ;
tm2x 7FH ;
lds read_th,Rr_rt ;选择RT!
sf 80h ;enable timer1 re-load
sf2 0011B ;enable timer2 re-load and set DED flag
scc 1010010b
spc 0fh ;disables all the pull-down devices on the internal IOC port
spkx 10110000b ;sets all the IOC pins as the output mode.
she 28h ;enable 0.5 S ,key,halt release
sie* 10010B ;enable timer 1,2 interrupt
;-------------------------------------------
lds disp_all_time,0fh;
lds temp_6,0001b
opd temp_6
lds buz_time,0fh
lds consumer_set_humitity_h,03h
lds consumer_set_humitity_l,02h ;预设50的湿度
lds power_big,0001b
lds Shortage_time,15 ;缺水十五分钟后,关闭风扇
spd 0fh;
spb 1110b;
MainProLoop:
slow
sf 10h
halt
fast
MSC TempReg+0 ;check 0.5 second halt release flag
jb3 HaltRelease05Second
MCX TempReg+0 ;check key
jb0 key_putdown
jmp MainProLoop
;**************************************************************************
;**************************************************************************
;**************************************************************************
HaltRelease05Second:
plc 1000B ;Clear 0.5 second halt release flag
;----------------------------------------0.5*12*10*6*10=0.5*120*60=3600s,用于小时
hour_dec_part:
lda delay_time
jb0 hour_dec_part_in
jmp hour_dec_part_out_1
hour_dec_part_in: ;*12
inc* time_hour_1
lds temp_2,12
sub time_hour_1
jz hour_dec_part_1
jmp hour_dec_part_out
hour_dec_part_1: ;*10
lds time_hour_1,0
inc* time_hour_2
lds temp_2,10
sub time_hour_2
jz hour_dec_part_2
jmp hour_dec_part_out
hour_dec_part_2: ;*6
lds time_hour_2,0
inc* time_hour_3
lds temp_2,6
sub time_hour_3
jz hour_dec_part_3
jmp hour_dec_part_out
hour_dec_part_3: ;*10
lds time_hour_3,0
inc* time_hour_4
lds temp_2,10
sub time_hour_4
jz hour_dec_part_4
jmp hour_dec_part_out
hour_dec_part_4:
lds time_hour_4,0
lds temp_2,1
sub* timer_hour_l
lds temp_2,0
sbc* timer_hour_h
hour_dec_part_out:
lda timer_hour_h
or timer_hour_l
jz off_machine
jmp hour_dec_part_out_1
hour_dec_part_out_1:
;----------------------------------用于分钟
minute_dec_part:
lda Shortage_time
jz minute_dec_part_out
inc* time_minute_1
lds temp_2,15
sub time_minute_1
jz minute_dec_part_1
jmp minute_dec_part_out
minute_dec_part_1:
lds time_minute_1,0
inc* time_minute_2
lds temp_2,8
sub time_minute_2
jz minute_dec_part_2
jmp minute_dec_part_out
minute_dec_part_2:
lds time_minute_2,0
dec* Shortage_time
minute_dec_part_out:
;----------------------------------
jmp Ph15OverFlow
; msc TempReg+0
; jb2 Ph15OverFlow
;
; inc* SecondCounter
; lds TempReg+0,0010B
; and SecondCounter
; jz MainProLoop
;
; lds SecondCounter,00h
; call EnableTimer2ToTestTemperature
; jmp MainProLoop
Ph15OverFlow:
call CalculateTemperature
; call ClearBCF
lda IntFlag ;Is data for test ready?
jb3 again_1 ;Ready
jmp MainProLoop
again_1:
call EnableTimer2ToTestTemperature
jmp MainProLoop
;**************************************************************************
key_putdown:
;---------------------------2column
spkx 41h ;checks the key depressed on k1 column
plc 20h ;Clear key halt release flag
call wait_scan_again
ipc TempReg+0
jb0 on_off_key
;---------------------------1column
spkx 40h ;checks the key depressed on k1 column
call wait_scan_again
ipc TempReg+0
jb0 up_key
jb1 down_key
jb2 mode_key
jb3 timer_key
spkx 10110000b
plc 20h
jmp MainProLoop
;---------------------------
wait_scan_again:
halt
plc 20h
rts
;---------------------------
up_key:
spkx 10110000b
plc 20h
lda power_big
jb2 up_key_in
jmp MainProLoop
up_key_in:
lds buz_time,08h
lds temp_1,1101b ;按下时不闪动
and* power_big
lda humitity_set_time
jnz up_key_2
lds humitity_set_time,0fh
jmp up_key_end
up_key_2:
lds humitity_set_time,0fh
lda consumer_set_humitity_h
sta temp_1+1
lda consumer_set_humitity_l
sta temp_1
subi temp_1+1,06h
jc up_key_end
subi temp_1+1,05h
jnc up_key_1
subi temp_1,05h
jnc up_key_1
lds consumer_set_humitity_h,05h
lds consumer_set_humitity_l,0ah ;Co
lds temp_1,0100b
or* Schmitt_on_off
jmp up_key_end
up_key_1: ;+5
addi* temp_1,5
adci* temp_1+1,0
mwr consumer_set_humitity_h,temp_1+1
mwr consumer_set_humitity_l,temp_1
up_key_end:
call DispTemperatureCF
jmp MainProLoop
;==============================
down_key:
spkx 10110000b
plc 20h
lda power_big
jb2 down_key_in
jmp MainProLoop
down_key_in:
lds buz_time,08h
lds temp_1,1101b ;按下时不闪动
and* power_big
lda humitity_set_time
jnz down_key_3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -