📄 sht10.asm
字号:
;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 + -