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

📄 sht10.asm

📁 一个温湿度控制的全部源程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;2008年9月12日, 焦玉新
;*******************************************
;;通用函数:
;;dv31:    r3r4r5/r7==r4r5
;;divd:	   r2r3r4r5/r6r7==r2r3
;;muld:    r2r3*r6r7==r2r3r4r5
;;bcd:	   r1r2r3==r1r2r3r4r5r6
;*******************************************
;****************************************
;*************	口线定义  ***************
;****************************************
;显示TEC6122
si_6122		bit	p2.5
lcp_6122	bit	p2.6
scp_6122	bit	p2.7
;485通讯75LBC184 
de_184		bit	p3.2
;状态指示口线
duanhe		bit	p0.5
duanfen		bit	p0.4
shiyan		bit	p0.3
gongzuo		bit	p0.2
jiedi		bit	p0.1
chuneng		bit	p0.0
;传感器输入
data1		bit	p1.4	
sck1		bit	p1.5
data2		bit	p1.6
sck2		bit	p1.7
;data1		bit	p3.4
;sck1		bit	p3.5
;data2		bit	p3.2
;sck2		bit	p3.3
;继电器输出
jiare_a		bit	p0.6
jiare_b		bit	p0.7
zhaoming	bit	p3.5
paifeng		bit	p3.7
baojing		bit	p3.6
;按键定义
keyset		bit	p1.0
keyadd		bit	p1.1
keysubb		bit	p1.2
keyzhao		bit	p1.3
;**************************************
;**************************************
;定义局部变量寄存器
zan1	data	70h
zan2	data	71h
zan3	data	72h
zan4	data	73h
zan5	data	74h
zan6	data	75h
zan7	data	76h
zan8	data	77h
;显示存储区定义
s11	data	78h	;第一行第一个数码管暂存器
s12	data	79h
s13	data	7ah
s14	data	7bh		
s21	data	7ch	;第二行第一个数码管暂存器,被LED指示灯借用
s22	data	7dh
s23	data	7eh
s24	data	7fh
;485通讯要发送的数据
t1h_485		data	50h	
t1l_485		data	51h
h1h_485		data	52h
h1l_485		data	53h
t2h_485		data	54h
t2l_485		data	55H
h2h_485		data	56h
h2l_485		data	57h
zhuangtai_485	data	58h
;		data	59h
;EEPROM要保存的数据
t1l	data	5ah	;单字节,第一路高温启动风扇温度
t1h	data	5bh	;第一路低温启动加热器温度
h1h	data	5ch	;第一路高湿启动加热器温度
t2l	data	5dh	;第二路高温启动风扇温度
t2h	data	5eh	;第二路低温启动加热器温度
h2h	data	5fh	;第二路高湿启动加热器温度
no_485	data	60h	;485通讯地址
band	data	61h	;波特率
bao	data	62h	;报警温度值的设置
;寄存器定义区
cnt_1s		data	63h	;定时1秒的定时器
cnt_keyno	data	64h	;按键按下超过2分钟的计数器
cnt_time0	data	65h	;定时器的计数器
zan9		data	66h	;暂存器
cnt_8ci		data	67h

count_10us	data	68h
count1		data	69h	;传感器1秒时间的计数器

temp_h		data	6ah	;温度临时
temp_l		data	6bh
humi_h		data	6ch	;湿度采样(外部中断测量计数器)
humi_l		data	6dh
count2		data	6eh	;计数器
;                       6fh
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;滤波用寄存器
lvbo1		data	80h	;80h~93h已用,为连续采样,取中间值的暂存器,局部变量。80h~9Fh都可使用
				;0a0h~0afh==温度T1的8次连续滤波用暂存器,全局变量,不可使用
				;0b0h~0bfh==湿度H1的8次连续滤波用暂存器,全局变量,不可使用
				;0c0h~0cfh==预留T2的8次连续滤波用暂存器
				;0d0h~0dfh==预留H2的8次连续滤波用暂存器
				;0e0h~0efh==没有使用
				;0f0h~0ffh==没有使用
;定义STC特殊寄存器
wdt_con		data	0c1h	;(看门狗)
;STC  EEPROM特殊寄存器
isp_data	data	0c2h
isp_addrh	data	0c3h
isp_addrl	data	0c4h
isp_cmd		data	0c5h
isp_trig	data	0c6h
isp_contr	data	0c7h

;isp_data	data	0e2h
;isp_addrh	data	0e3h
;isp_addrl	data	0e4h
;isp_cmd		data	0e5h
;isp_trig	data	0e6h
;isp_contr	data	0e7h
;**************************************
;定义标志位
led_a		bit	00h	;6个LED	指示灯
led_b		bit	01h
dian13		bit	02h	;第一行第三个数码管的小数点
led_jiare_a	bit	03h
led_jiare_b	bit	04h
led_shoudong	bit	05h
dian23		bit	06h	;第二行第三个数码管的小数点
led_paifeng	bit	07h

err_sensor1	bit	08h	;传感器1异常标志位
err_sensor2	bit	09h	;传感器2异常标志位
shoudong_f	bit	0ah	;手动标志位
jiare1_f	bit	0bh	;自动启动加热1标志位
jiare2_f	bit	0ch	;自动启动加热2标志位
paifeng1_f	bit	0dh	;排风1标志位
paifeng2_f	bit	0eh
;			0fh
;			10h	

baojing_f	bit	11h	;超温报警标志位,表现---让A,B指示灯闪烁
keyno_f		bit	12h	;没按键超过2分钟的标志位
yimiao_f	bit	13h	;定时器T0 每1秒要做的事情的标志位
sanzijie_f	bit	14h	;温度超过-5度进行数据处理的标志位
first_f		bit	15h	;1秒反一次标志位

baci_f		bit	16h
t1over_f	bit	17h	;温度1正溢出标志位
fu_f		bit	18h	;温度1负溢出标志位
hover_f		bit	19h	;湿度1正溢出标志位
second_f	bit	1ah	;第二路温湿度标志位
;fast_key_f	bit	1bh	;键快速反映的标志位

keylong_f	bit	1dh	;长按键标志位
no_kongzhi_f	bit	1eh	;不参加控制的标志位
xunxian_f	bit	1fh	;巡显标志位,当循环显示时,xunxian_f=1

;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;######################################
	org	0000h
        jmp	start
	org	0003h	
	reti
	org	000bh	
	jmp	time0
	org	0013h		
	reti
	org	001bh	
	reti
	org	0023h
	jmp	message			;485通讯	
	org	0030h

start:

	mov	sp,#25h		;设堆栈
		;中断初始化
		clr	ex0
		clr	keylong_f
		clr	shoudong_f
		setb	xunxian_f	;设循环显示标志位
		clr	no_kongzhi_f
		clr	baojing_f	;超温报警标志位
		clr	paifeng1_f
		clr	paifeng2_f

		call	de1s

		call	read_rom
		
		clr	ri		;中断初始化,可以接收
		clr	ti
		mov	tmod,#21h
		mov	tl1,#0fah	;设置波特率初值
		mov	th1,#0fah	;4800b/s		
		mov	pcon,#00h	;4800
		clr	et1		;不要进入定时器1中断		
		setb	tr1
		mov	scon,#70h	;方式3,允许接收
		clr	de_184		;clr(接收)set(发送)	
		setb	es
		;TMOD已经设置好了
		mov	cnt_1s,#20 	;50ms*20=1秒
		setb	it0		;int0触发标志位,1为下降沿触发中断。

		setb	et0		
		setb	tr0			
		setb	ea		
			
		clr	yimiao_f	
		call	dog	
		setb	jiare_a
		setb	jiare_b
		setb	zhaoming		
		setb	paifeng
		setb	baojing
		
		mov	20h,#00h	;小数点和LED灯全熄灭
		mov	r1,#8		;开机显示888
		mov	r0,#s11
start0:		mov	@r0,#9
		inc	r0
		djnz	r1,start0
		call	disp		
		call	de1s	

		mov	cnt_time0,#150	;SET键盘延时2秒计数器		
		call	dog
		
;****************************************************
;********             主程序		********
;****************************************************
start1:	
		call	key		
		call	dog				
		jnb	yimiao_f,start1				
		call	yimiao
		jmp	start1
;****************************************************
key:		call	key_scan		
		mov	dptr,#key_tab1
		mov	b,a 
		rl	a
		add	a,b 
		jmp	@a+dptr
;主菜单
key_tab1:	ljmp	key_end		;没按键
		ljmp	key_set		;1--设置
		ljmp	key_xunxian	;2--依次显示A路----B路----巡显---(循环)	
		;ljmp	key_end
		ljmp	key_hand	;3--长按第二路手动加热
		ljmp	key_zhaoming	;4--启动(关闭)照明
		;ljmp	key_end

;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
key_set:	mov	cnt_time0,#200		;长按SET键	
key_set1:	jb	keyset,key_tab1		;退出
		call	de10ms
		djnz	cnt_time0,key_set1
		clr	ea		;进入按键设置程序;关所有中断
		clr	es
		clr	et0
		clr	tr0		
		
		setb	led_a		;进入加热A设置(1tl)
		clr	led_b
		clr	dian13
		setb	led_jiare_a
		clr	led_jiare_b
		clr	led_shoudong
		clr	dian23
		clr	led_paifeng

key_qie_t1l:	mov	a,t1l
		call	temp_set_disp		
		mov	s22,#13h	;t
		mov	s23,#1
		mov	s24,#15h	;l
		call	disp

qie_t1l:	jb	keyset,qie_t1l_1	;等待SET键松开
		call	de10ms
		jmp	qie_t1l
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^t1l循环
qie_t1l_1:	call	key_scan
		mov	dptr,#key_tab2
		mov	b,a 
		rl	a
		add	a,b 
		jmp	@a+dptr
;进入t1l的设置
key_tab2:	ljmp	qie_t1l_1	;没按键
		ljmp	key_qie_t1h	;1--切换
		ljmp	t1l_add		;2--	
		ljmp	t1l_subb	;3--
		ljmp	qie_t1l_1	
;按加键
t1l_add:	mov	a,t1l
		cjne	a,#100,t1l_add0	;-40<t1l<60度
t1l_add0:	jc	t1l_add1
		mov	t1l,#00h
		jmp	t1l_add2
t1l_add1:	inc	t1l
t1l_add2:	mov	a,t1l
		call	temp_set_disp
		call	disp
		mov	b,#2
		call	fast
		jnb	keylong_f,qie_t1l_1
		call	de100ms
		jmp	t1l_add		

;----------------------------------------
;;设长按键标志位子函数(长按键经典子程序)
;入口为B
;----------------------------------------
fast:		mov	r4,#50		
fast0:		call	key_scan
		jnz	fast2
fast1:		clr	keylong_f
		jmp	f_end
fast2:		cjne	a,b,fast1	;入口为B		
		jb	keylong_f,f_end		
		call	de10ms
		djnz	r4,fast0	;长按键1秒
		setb	keylong_f
f_end:		ret
;----------------------------------------

t1l_subb:	mov	a,t1l 
		cjne	a,#00,t1l_subb1
		mov	t1l,#100
		jmp	t1l_subb2
t1l_subb1:	dec	t1l
t1l_subb2:	mov	a,t1l
		call	temp_set_disp
		call	disp 
		mov	b,#3		;减键键值=3
		call	fast
		jnb	keylong_f,qie_t1l_1
		call	de100ms
		jmp	t1l_subb
	
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^		
key_qie_t1h:	mov	a,t1h
		call	temp_set_disp
		mov	s22,#13h
		mov	s23,#1
		mov	s24,#14h
		clr	led_jiare_a
		setb	led_paifeng
		call	disp

qie_t1h:	jb	keyset,qie_t1h_1
		call	de10ms
		jmp	qie_t1h
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^t1h循环
qie_t1h_1:	call	key_scan
		mov	dptr,#key_tab3
		mov	b,a 
		rl	a
		add	a,b 
		jmp	@a+dptr

key_tab3:	ljmp	qie_t1h_1	;没按键
		ljmp	key_qie_h1h	;1--切换
		ljmp	t1h_add		;2--	
		ljmp	t1h_subb	;3--
		ljmp	qie_t1h_1

t1h_add:	mov	a,t1h
		cjne	a,#160,t1h_add0	;-40<t1l<60度
t1h_add0:	jc	t1h_add1
		mov	t1h,#60
		jmp	t1h_add2
t1h_add1:	inc	t1h
t1h_add2:	mov	a,t1h
		call	temp_set_disp
		call	disp
		mov	b,#2
		call	fast
		jnb	keylong_f,qie_t1h_1
		call	de100ms
		jmp	t1h_add

t1h_subb:	mov	a,t1h
		cjne	a,#60,t1h_subb1
		mov	t1h,#160
		jmp	t1h_subb2
t1h_subb1:	dec	t1h
t1h_subb2:	mov	a,t1h
		call	temp_set_disp
		call	disp 
		mov	b,#3		;减键键值=3
		call	fast
		jnb	keylong_f,qie_t1h_1
		call	de100ms
		jmp	t1h_subb
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
key_qie_h1h:	mov	a,h1h
		call	t_disp3		;借用温度显示

		mov	s22,#14h	;h1h
		mov	s23,#1
		mov	s24,#14h
		setb	led_jiare_a
		clr	led_paifeng
		call	disp
qie_h1h:	jb	keyset,qie_h1h_1
		call	de10ms
		jmp	qie_h1h

qie_h1h_1:	call	key_scan
		mov	dptr,#key_tab4
		mov	b,a 
		rl	a
		add	a,b 
		jmp	@a+dptr

key_tab4:	ljmp	qie_h1h_1	;没按键
		ljmp	key_qie_t2l	;1--切换		
		ljmp	h1h_add		;2--	
		ljmp	h1h_subb	;3--
		ljmp	qie_h1h_1

h1h_add:	mov	a,h1h
		cjne	a,#100,h1h_add0	;20<t1l<100
h1h_add0:	jc	h1h_add1
		mov	h1h,#20
		jmp	h1h_add2
h1h_add1:	inc	h1h
h1h_add2:	mov	a,h1h
		call	t_disp3		;湿度显示
		call	disp
		mov	b,#2
		call	fast
		jnb	keylong_f,qie_h1h_1
		call	de100ms
		jmp	h1h_add

h1h_subb:	mov	a,h1h 
		cjne	a,#20,h1h_subb1
		mov	h1h,#100
		jmp	h1h_subb2
h1h_subb1:	dec	h1h
h1h_subb2:	mov	a,h1h
		call	t_disp3
		call	disp 
		mov	b,#3		;减键键值=3
		call	fast
		jnb	keylong_f,qie_h1h_1
		call	de100ms
		jmp	h1h_subb
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
key_qie_t2l:	mov	a,t2l		;t2l的设置
		call	temp_set_disp
		mov	s22,#13h	
		mov	s23,#2
		mov	s24,#15h
		clr	led_a
		setb	led_b
		clr	led_jiare_a
		setb	led_jiare_b
		call	disp

qie_t2l:	jb	keyset,qie_t2l_1
		call	de10ms
		jmp	qie_t2l
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^t1h循环
qie_t2l_1:	call	key_scan
		mov	dptr,#key_tab5
		mov	b,a 
		rl	a
		add	a,b 
		jmp	@a+dptr

key_tab5:	ljmp	qie_t2l_1	;没按键
		ljmp	key_qie_t2h	;1--切换
		ljmp	t2l_add		;2--	
		ljmp	t2l_subb	;3--
		ljmp	qie_t2l_1

t2l_add:	mov	a,t2l
		cjne	a,#100,t2l_add0	;-40<t1l<60度
t2l_add0:	jc	t2l_add1
		mov	t2l,#00h
		jmp	t2l_add2
t2l_add1:	inc	t2l
t2l_add2:	mov	a,t2l
		call	temp_set_disp
		call	disp
		mov	b,#2
		call	fast
		jnb	keylong_f,qie_t2l_1
		call	de100ms
		jmp	t2l_add

t2l_subb:	mov	a,t2l 
		cjne	a,#00,t2l_subb1
		mov	t2l,#100
		jmp	t2l_subb2
t2l_subb1:	dec	t2l
t2l_subb2:	mov	a,t2l
		call	temp_set_disp
		call	disp 
		mov	b,#3		;减键键值=3
		call	fast
		jnb	keylong_f,qie_t2l_1
		call	de100ms
		jmp	t2l_subb	
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^		
key_qie_t2h:	mov	a,t2h
		call	temp_set_disp
		mov	s22,#13h
		mov	s23,#2
		mov	s24,#14h
		clr	led_jiare_b
		setb	led_paifeng
		call	disp

qie_t2h:	jb	keyset,qie_t2h_1
		call	de10ms
		jmp	qie_t2h
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^t1h循环
qie_t2h_1:	call	key_scan
		mov	dptr,#key_tab6
		mov	b,a 
		rl	a
		add	a,b 
		jmp	@a+dptr

key_tab6:	ljmp	qie_t2h_1	;没按键
		ljmp	key_qie_h2h	;1--切换
		ljmp	t2h_add		;2--	
		ljmp	t2h_subb	;3--
		ljmp	qie_t2h_1

t2h_add:	mov	a,t2h
		cjne	a,#160,t2h_add0	;-40<t1l<60度
t2h_add0:	jc	t2h_add1
		mov	t2h,#60
		jmp	t2h_add2
t2h_add1:	inc	t2h
t2h_add2:	mov	a,t2h
		call	temp_set_disp
		call	disp
		mov	b,#2
		call	fast
		jnb	keylong_f,qie_t2h_1
		call	de100ms
		jmp	t2h_add

t2h_subb:	mov	a,t2h 
		cjne	a,#60,t2h_subb1
		mov	t2h,#160
		jmp	t2h_subb2
t2h_subb1:	dec	t2h
t2h_subb2:	mov	a,t2h
		call	temp_set_disp
		call	disp 
		mov	b,#3		;减键键值=3
		call	fast
		jnb	keylong_f,qie_t2h_1
		call	de100ms
		jmp	t2h_subb
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
key_qie_h2h:	mov	a,h2h
		call	t_disp3		;借用温度显示

		mov	s22,#14h
		mov	s23,#2
		mov	s24,#14h
		setb	led_jiare_b
		clr	led_paifeng
		call	disp
qie_h2h:	jb	keyset,qie_h2h_1
		call	de10ms
		jmp	qie_h2h

qie_h2h_1:	call	key_scan
		mov	dptr,#key_tab7
		mov	b,a 
		rl	a
		add	a,b 
		jmp	@a+dptr

key_tab7:	ljmp	qie_h2h_1	;没按键
		ljmp	key_qie_bao	;1--切换
		ljmp	h2h_add		;2--	
		ljmp	h2h_subb	;3--
		ljmp	qie_h2h_1

h2h_add:	mov	a,h2h
		cjne	a,#100,h2h_add0	;20<t1l<100
h2h_add0:	jc	h2h_add1
		mov	h2h,#20
		jmp	h2h_add2
h2h_add1:	inc	h2h
h2h_add2:	mov	a,h2h
		call	t_disp3		;湿度显示
		call	disp
		mov	b,#2
		call	fast
		jnb	keylong_f,qie_h2h_1
		call	de100ms
		jmp	h2h_add

h2h_subb:	mov	a,h2h 
		cjne	a,#20,h2h_subb1
		mov	h2h,#100
		jmp	h2h_subb2
h2h_subb1:	dec	h2h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -