📄 sht10.asm
字号:
h2h_subb2: mov a,h2h
call t_disp3
call disp
mov b,#3 ;减键键值=3
call fast
jnb keylong_f,qie_h2h_1
call de100ms
jmp h2h_subb
;***********************************************
key_qie_bao:
mov a,bao ;报警温度值的设置
call temp_set_disp
mov s22,#0bh ;"bAo"
mov s23,#0ah
mov s24,#18h
setb led_a
setb led_b
clr led_jiare_a ;关A,B两路加热器
clr led_jiare_b
setb led_paifeng ;开排风扇
call disp
qie_bao: jb keyset,qie_bao_1
call de10ms
jmp qie_bao
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^t1h循环
qie_bao_1: call key_scan
mov dptr,#key_tab7_0
mov b,a
rl a
add a,b
jmp @a+dptr
key_tab7_0: ljmp qie_bao_1 ;没按键
ljmp key_qie_no ;1--切换
ljmp bao_add ;2--
ljmp bao_subb ;3--
ljmp qie_bao_1
bao_add: mov a,bao
cjne a,#160,bao_add0 ;-40<t1l<60度
bao_add0: jc bao_add1
mov bao,#60
jmp bao_add2
bao_add1: inc bao
bao_add2: mov a,bao
call temp_set_disp
call disp
mov b,#2
call fast
jnb keylong_f,qie_bao_1
call de100ms
jmp bao_add
bao_subb: mov a,bao
cjne a,#60,bao_subb1
mov bao,#160
jmp bao_subb2
bao_subb1: dec bao
bao_subb2: mov a,bao
call temp_set_disp
call disp
mov b,#3 ;减键键值=3
call fast
jnb keylong_f,qie_bao_1
call de100ms
jmp bao_subb
;***********************************************
;485通讯机号的设置
key_qie_no: mov a,no_485
call t_disp3 ;借用温度显示
mov 20h,#00h ;指示灯全部熄灭
mov s22,#17h ;n
mov s23,#1fh ;0.
mov s24,#10h ;消隐
call disp
qie_no: jb keyset,qie_no_1
call de10ms
jmp qie_no
qie_no_1: call key_scan
mov dptr,#key_tab8
mov b,a
rl a
add a,b
jmp @a+dptr
key_tab8: ljmp qie_no_1 ;没按键
ljmp key_qie_end ;1--切换
ljmp no_add ;2--
ljmp no_subb ;3--
ljmp qie_no_1
no_add: mov a,no_485
cjne a,#255,no_add1 ;1<t1l<255
mov no_485,#1
jmp no_add2
no_add1: inc no_485
no_add2: mov a,no_485
call t_disp3 ;湿度显示
call disp
mov b,#2
call fast
jnb keylong_f,qie_no_1
call de100ms
jmp no_add
no_subb: mov a,no_485
cjne a,#1,no_subb1
mov no_485,#255
jmp no_subb2
no_subb1: dec no_485
no_subb2: mov a,no_485
call t_disp3
call disp
mov b,#3 ;减键键值=3
call fast
jnb keylong_f,qie_no_1
call de100ms
jmp no_subb
key_qie_end: jb keyset,key_qie_end1
call de10ms
jmp key_qie_end
key_qie_end1: call write_rom ;设置键退出
setb ea
setb es
setb et0
setb tr0
clr jiare1_f ;清各种继电器的标志位
clr jiare2_f
clr paifeng1_f
clr paifeng2_f
clr baojing_f
jmp key_end
;************************************************************
;************************************************************
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
key_xunxian: jb xunxian_f,xunxian3 ;在巡显的状态下
jb second_f,start_xunxian1 ;在显示第二路的时候,开始巡显
setb second_f ;显示B路
setb led_b
clr led_a
xunxian0: call disp
xunxian1: jb keyadd,xunxian2
call de10ms
jmp xunxian1
xunxian2: jmp key_end
start_xunxian1:
setb xunxian_f
setb led_a
setb led_b
call disp
;call de1s
jmp xunxian1
xunxian3: clr xunxian_f ;显示A路
clr second_f
setb led_a
clr led_b
jmp xunxian0
key_hand: ;clr es ;因为此口与RXD,TXD复用,
jnb shoudong_f,key_hand_2
clr shoudong_f
clr led_shoudong
call kongzhi
key_hand_0: jb keysubb,key_hand_1
call de10ms
jmp key_hand_0
key_hand_1: ;setb es
jmp key_end
key_hand_2: setb shoudong_f
setb led_shoudong
setb led_jiare_a
setb led_jiare_b
clr jiare_a
clr jiare_b
call disp
jmp key_hand_0
key_zhaoming: cpl zhaoming
zhaoming1: jb keyzhao,key_end
call de10ms
jmp zhaoming1
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
key_end: ret
;*****************************
temp_set_disp: mov s11,#10h ;消隐
clr c
mov b,a
subb a,#40
jnc t_disp3 ;设置温度值>0时
clr c
mov a,#40
subb a,b
mov b,#10
div ab
jnz t_disp0
mov s12,#10h
mov s13,#12h
jmp t_disp2
t_disp0: mov s12,#12h ;显示-
t_disp1: mov s13,a
t_disp2: mov s14,b
jmp temp_disp_end
t_disp3: mov b,#100 ;正数
div ab
jz t_disp5
mov s12,a
t_disp4: mov a,b
mov b,#10
div ab
jmp t_disp1
t_disp5: mov s12,#10h
mov a,b
mov b,#10
div ab
jnz t_disp1
mov s13,#10h
mov s14,b
temp_disp_end: ret
;***********************************************
read_rom: mov r2,#9 ;连续读8个字节
mov r0,#t1l
;mov dptr,#2800h ;5410
mov dptr,#0000h ;10f08
read_rom1: call byte_read
mov @r0,a
inc r0
inc dptr
djnz r2,read_rom1
ret
;*****************************
write_rom: mov dptr,#0000h
call sector_erase
mov dptr,#0000h
mov r2,#9
mov r0,#t1l
write_rom1: mov a,@r0
call byte_program
inc r0
inc dptr
djnz r2,write_rom1
ret
;*****************************
Byte_read:
mov isp_contr,#82h ;系统工作时钟<12MHz时,
mov isp_cmd,#1 ;字节读
mov isp_addrh,dph
mov isp_addrl,dpl
;mov isp_trig,#46h
;mov isp_trig,#0b9h
mov isp_trig,#5ah
mov isp_trig,#0a5h
nop
mov a,isp_data
call Isp_disable
ret
Byte_Program:
mov isp_contr,#82h
mov isp_cmd,#2 ;字节编程
mov isp_addrh,dph
mov isp_addrl,dpl
mov isp_data,a
mov isp_trig,#5ah
mov isp_trig,#0a5h
nop
call Isp_disable
ret
Sector_erase:
mov isp_contr,#82h
mov isp_cmd,#3 ;扇区擦除
mov isp_addrh,dph
mov isp_addrl,dpl
mov isp_trig,#5ah
mov isp_trig,#0a5h
nop
call Isp_disable
ret
Isp_disable: ;关闭IAP功能
mov isp_contr,#0
mov isp_cmd,#0
mov isp_trig,#0
ret
;************************************************
;************************************************
yimiao:
clr ea
clr et0
clr tr0
call sht_th ;湿度采样值的数据处理
call sht2_th
call sht_disp
call zhuangtai
call kongzhi ;控制继电器动作
;call flash ;超温报警闪烁
mov cnt_1s,#20
mov th0,#4ch ;4ch
mov tl0,#3fh
setb it0 ;it0为外部中断触发类型(下跳沿)触发
setb et0
setb tr0
setb ea
clr yimiao_f
ret
;报警时的闪烁
flash: jnb baojing_f,flash_end
clr led_a
clr led_b
clr led_paifeng ;如果超温报警了,每秒3个指示灯快速闪烁一下
call disp
call de100ms
setb led_a
setb led_b
setb led_paifeng
call disp
flash_end: ret
;**********************************
;SHT模块显示子程序
;**********************************
sht_disp: ;mov r0,#t1h_485
;mov r2,#8
;call rs232
jb second_f,sht_disp1
mov temp_h,t1h_485
mov temp_l,t1l_485
mov humi_h,h1h_485
mov humi_l,h1l_485
setb led_a
clr led_b
jmp sht_disp2
sht_disp1:
mov temp_h,t2h_485
mov temp_l,t2l_485
mov humi_h,h2h_485
mov humi_l,h2l_485
setb led_b
clr led_a
sht_disp2: jb second_f,sht_disp3 ;错误判断
jb err_sensor1,sht_disp4
jmp xian0
sht_disp3: jb err_sensor2,sht_disp4
jmp xian0
sht_disp4: clr dian13
clr dian23
mov a,#0fh
mov s11,a
mov s12,a
mov s13,a
mov s14,a
;mov s21,a
mov s22,a
mov s23,a
mov s24,a
jmp xian7
xian0:
setb dian13
setb dian23
mov r4,temp_h
mov r5,temp_l
mov r6,#01h ;0190H=400
mov r7,#90h
call nsubb
mov zan1,r2
mov zan2,r3
jnc xian2
mov s11,#0fh ;显示-
mov r4,#01h
mov r5,#90h
mov r6,temp_h
mov r7,temp_l
call nsubb
mov zan1,r2
mov zan2,r3
mov r4,zan1
mov r5,zan2
mov r6,#0
mov r7,#100
call nsubb
jc xian1
mov r1,#00h
mov r2,zan1
mov r3,zan2
call bcd ;小于-10度的情况
mov s12,r4
mov s13,r5
mov s14,r6
jmp xian3
xian1: mov r1,#00h
mov r2,zan1
mov r3,zan2
call bcd ;大于-10,小于0度的情况
mov s11,#10h ;10H为消隐,0FH==-
mov s12,#0fh
mov s13,r5
mov s14,r6
jmp xian3
;显示正数
xian2: mov r4,zan1
mov r5,zan2
mov r6,#03h ;1000=03e8h
mov r7,#0e8h
call nsubb
jc xian4
mov r1,#00h
mov r2,zan1
mov r3,zan2
call bcd
mov s11,r3
mov s12,r4
mov s13,r5
mov s14,r6
jmp xian3
xian4: mov r1,#00h
mov r2,zan1
mov r3,zan2
call bcd
mov s11,#10h
mov s12,r4
mov a,r4
jnz xian5
mov s12,#10h
xian5:
mov s13,r5
mov s14,r6
;显示湿度
xian3: mov s21,#10h
mov r1,#00h
mov r2,humi_h
mov r3,humi_l
call bcd
mov a,r3
cjne a,#1,xian6
mov s22,#09h
mov s23,#09h
mov s24,#09h
jmp xian7
xian6: mov s22,r4
mov s23,r5
mov s24,r6
mov a,s22
jnz xian7
mov s22,#10h ;消隐
xian7: call disp
ret
;***************************************************************
sht_th: ;mov zan1,#0
call sht_re ; 软件复位
call sht_temp ; 测温度命令
sht1: call temp_chuli
mov t1h_485,temp_h
mov t1l_485,temp_l
call de10ms ;延时程序
clr sck1 ;rh
setb data1
call sht_re
nop
call sht_humi ;测湿度命令
call humi_chuli
mov h1h_485,humi_h
mov h1l_485,humi_l
call dog
sht_th_end: ret
;第二路温湿度
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sht2_th: call sht2_re ; 软件复位
call sht2_temp ;测温度命令
sht2_1: call temp_chuli
mov t2h_485,temp_h
mov t2l_485,temp_l
call de10ms ;延时程序
clr sck2 ;rh
setb data2
call sht2_re
nop
call sht2_humi ;测湿度命令
call humi_chuli
mov h2h_485,humi_h
mov h2l_485,humi_l
call dog
sht2_th_end: ret
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;******************
;软件复位
;******************
sht_re: setb data1 ;复位串口
;call de5us
clr sck1
call de10us
mov r7,#09h
sht_re1: setb sck1
call de10us
clr sck1
call de10us
djnz r7,sht_re1
setb sck1
call de10us
clr data1
call de10us
clr sck1
call de10us
setb sck1
call de10us
setb data1
call de10us
clr sck1 ;
call de10us
ret
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sht2_re: setb data2 ;复位串口
;call de5us
clr sck2
call de10us
mov r7,#09h
sht2_re1: setb sck2
call de10us
clr sck2
call de10us
djnz r7,sht2_re1
setb sck2
call de10us
clr data2
call de10us
clr sck2
call de10us
setb sck2
call de10us
setb data2
call de10us
clr sck2 ;
call de10us
ret
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sht_temp: clr sck1 ;测温度命令000 00011
;call de5us
clr data1
call de10us
mov r7,#05h ;
sht_temp1: setb sck1
call de10us
clr sck1
call de10us
djnz r7,sht_temp1
;setb data_sht10
setb sck1
call de10us
clr sck1
call de10us
setb data1 ;011------测量温度
call de10us
setb sck1
call de10us
clr sck1
call de10us
;clr data_sht10
setb sck1
call de10us
clr sck1
call de10us
clr data1 ;ACK
;call de5us
setb sck1
call de10us
clr sck1
call de10us
setb data1 ;等待传感器测量结束(结束时DATA被SHT10拉低
clr err_sensor1
mov count2,#200
sht_t0: mov count1,#200
sht_t1: jnb data1,sht_t2 ;11-210Ms
;call de10us
call fast_key
djnz count1,sht_t1
djnz count2,sht_t0
setb err_sensor1
jmp sht_end
sht_t2: call sht_read ;把两个字节测量数据送到r2,r3
sht_end: ret
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;2路
sht2_temp: clr sck2 ;测温度命令000 00011
;call de5us
clr data2
call de10us
mov r7,#05h ;
sht2_temp1: setb sck2
call de10us
clr sck2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -