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

📄 sht10.asm

📁 一个温湿度控制的全部源程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
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 + -