ME300实例-DS18B20温度控制实验(汇编语言源程序)

me300实例-ds18b20温度控制实验(汇编语言源程序)
程序说明:
ds18b20的管脚定义:
1、gnd
2、dq
3、vcc
dq→p3.3
k1→p1.4
k2→p1.5
k3→p1.6
k4→p1.7
jp2用跳线帽短接1和2,选用lcd。
温度显示用四位,当温度>=100度时,第四位才显示。
检测ds18b20状态:
ds18b20正常显示:
ds18b20ok
temp:25.8℃←显示实际温度
ds18b20不正常显示:
ds18b20error
temp:----℃←显示----
这时你要检查ds18b20是否连接好、接对,否则要更换一个新的ds18b20芯片。
一、查看温度报警值:
k1→进入查看温度报警值状态。
lcd1602显示:
lookalertcode
th:028℃tl:18℃
th:028高位报警值
tl:18低位报警值
k3→退出查看温度报警值状态。
二、设定温度报警值:
k2→进入设定温度报警值状态。
lcd1602显示:
resetalertcode
th:028℃tl:18℃
k1:设定值加(up)、减(down)方式选择键(默认为减少)
k2:th值设定键
k3:tl值设定键
k4:确定键(退出设定状态)
k2或k3以减(down)方式设定,当设定数值减到“0”时自动转换为加(up)方式。
k2或k3以加(up)方式设定,当设定数值th=120、tl=99时,设定数值均变为“0”。
k4→确定并退出设定温度报警值状态。
将设定的温度报警值自动存入ds18b20的eerom中,可永久保存。
每次开机时自动从ds18b20的eerom读出温度报警值。
三、报警状态的显示:
1、当实际温度大于th的设定值时,
lcd1602显示:
ds18b20ok
temp:88.8℃>h
关闭继电器,蜂鸣器响,表示超温。
2、当实际温度小于tl的设定值时,
lcd1602显示:
ds18b20ok
temp:18.8℃被减数,则
jcchuli1;借位标志位c=1,转
mova,temp_zh
subba,temp_tl;减数>被减数,则
jcchuli2;借位标志位c=1,转
movdptr,#bj5
calltemp_bj3
clrrelay;继电器吸合
ret
chuli1:
movdptr,#bj3
calltemp_bj3
setbrelay;继电器关闭
callbeep_bl
ret
chuli2:
movdptr,#bj4
calltemp_bj3
callbeep_bl
ret
;-----------------------------------------
temp_bj3:
mova,#0ceh
callwcom
movr1,#0
movr0,#2
bbjj3:mova,r1
movca,@a+dptr
callwdata
incr1
djnzr0,bbjj3
ret
bj3:
db>h
bj4:
dbbcd
divab;b=a%100
movr4,a;r7=百位数
mova,#0ah
xcha,b
divab;b=a%b
swapa
orla,b
ret
;-------------------------------------------------------------
;小数部分码表
;-------------------------------------------------------------
tempdottab:
db00h,00h,01h,01h,02h,03h,03h,04h
db05h,05h,06h,06h,07h,08h,08h,09h
;=====================================================
look_alarm:
movdptr,#m_alax2;指针指到显示信息区
mova,#2;显示在第二行
calllcd_print
mova,#0c6h
calltemp_bj1
mova,temp_th;加载th数据
movlcd_x,#3;设置位置
callshow_dig2h;显示数据
mova,#0ceh
calltemp_bj1
mova,temp_tl;加载tl数据
movlcd_x,#12;设置位置
callshow_dig2l;显示数据
ret
;--------------------------------------------
m_alax1:
dblookalertcode,0
m_alax2:
dbth:tl:,0
;--------------------------------------------
temp_bj1:
callwcom
movdptr,#bj2;指针指到显示信息区
movr1,#0
movr0,#2
bbjj2:mova,r1
movca,@a+dptr
callwdata
incr1
djnzr0,bbjj2
ret
bj2:
db00h,c
;---------------------------------------------------
show_dig2h:;在lcd的第二行显示数字
movb,#100
divab
adda,#30h
pushb
movb,lcd_x
calllcdp2
popb
mova,#0ah
xcha,b
divab
adda,#30h
inclcd_x
pushb
movb,lcd_x
calllcdp2
popb
inclcd_x
mova,b
movb,lcd_x
adda,#30h
calllcdp2
ret
show_dig2l:;在lcd的第二行显示数字
movb,#100
divab
mova,#0ah
xcha,b
divab
adda,#30h
pushb
movb,lcd_x
calllcdp2
popb
inclcd_x
mova,b
movb,lcd_x
adda,#30h
calllcdp2
ret
;-------------------------------------------------------------
;显示区bcd码温度值刷新子程序
;-------------------------------------------------------------
dispbcd:
mova,templc
anla,#0fh
mov70h,a;小数位
mova,templc
swapa
anla,#0fh
mov71h,a;个位
mova,temphc
anla,#0fh
mov72h,a;十位
mova,temphc
swapa
anla,#0fh
mov73h,a;百位
mova,temphc
anla,#0f0h
cjnea,#010h,dispbcd0
sjmpdispbcd2
dispbcd0:mova,temphc
anla,#0fh
jnzdispbcd2;十位数是0
mova,temphc
swapa
anla,#0fh
mov73h,#0ah;符号位不显示
mov72h,a;十位数显示符号
dispbcd2:ret
;==========================================================
;lcd1602显示子程序
;==========================================================
conv:
mova,73h;加载百位数据
movlcd_x,#6;设置位置
cjnea,#1,conv1
jmpconv2
conv1:mova,#
movb,lcd_x
calllcdp2
jmpconv3
conv2:callshow_dig2;显示数据
conv3:inclcd_x;
mova,72h;十位
callshow_dig2
inclcd_x
mova,71h;个位
callshow_dig2
inclcd_x
mova,#'.'
movb,lcd_x
calllcdp2
mova,70h;加载小数点位
inclcd_x;设置位置
callshow_dig2;显示数据
ret
;-------------------------------------------------------
show_dig2:;在lcd的第二行显示数字
adda,#30h
movb,lcd_x
calllcdp2
ret
;---------------------------------------------------------
lcdp2:;在lcd的第二行显示字符
pushacc;
mova,b;设置显示地址
adda,#0c0h;设置lcd的第二行地址
callwcom;写入命令
popacc;由堆栈取出a
callwdata;写入数据
ret
;---------------------------------------------------------
set_lcd:;对lcd做初始化设置及测试
clrlcd_en
callinit_lcd;初始化lcd
callstore_data;将自定义字符存入lcd的cgram
ret
init_lcd:;8位i/o控制lcd接口初始化
mova,#38h;双列显示,字形5*7点阵
callwcom
calldelay1
mova,#38h
callwcom
calldelay1
mova,#38h
callwcom
calldelay1
mova,#0ch;开显示,显示光标,光标不闪烁
callwcom
calldelay1
mova,#01h;清除lcd显示屏
callwcom
calldelay1
ret
;==================================================
clr_line1:;清除lcd的第一行字符
mova,#80h;设置lcd的第一行地址
callwcom;
movr0,#24;设置计数值
c1:mova,#'';载入空格符至lcd
callwdata;输出字符至lcd
djnzr0,c1;计数结束
ret
;==================================================
lcd_print:;在lcd的第一行或第二行显示字符
cjnea,#1,line2;判断是否为第一行
line1:mova,#80h;设置lcd的第一行地址
callwcom;写入命令
callclr_line;清除该行字符数据
mova,#80h;设置lcd的第一行地址
callwcom;写入命令
jmpfill
line2:mova,#0c0h;设置lcd的第二行地址
callwcom;写入命令
callclr_line;清除该行字符数据
mova,#0c0h;设置lcd的第二行地址
callwcom
fill:clra;填入字符
movca,@a+dptr;由消息区取出字符
cjnea,#0,lc1;判断是否为结束码
ret
lc1:callwdata;写入数据
incdptr;指针加1
jmpfill;继续填入字符
ret
;=========================================
clr_line:;清除该行lcd的字符
movr0,#24
cl1:mova,#''
callwdata
djnzr0,cl1
ret
de:movr7,#250
djnzr7,$
ret
;============================================
wcom:;以8位控制方式将命令写至lcd
movp0,a;写入命令
clrlcd_rs;rs=l,rw=l,d0-d7=指令码,e=高脉冲
clrlcd_rw
setblcd_en
acalldelay1
clrlcd_en
ret
;=============================================
wdata:;以8位控制方式将数据写至lcd
movp0,a;写入数据
setblcd_rs
clrlcd_rw
setblcd_en
callde
clrlcd_en
callde
ret
;=============================================
;printacharonline1
;a=ascdata,b=linexpos
;==============================================
lcdp1:;在lcd的第一行显示字符
pushacc;
mova,b;设置显示地址
adda,#80h;设置lcd的第一行地址
callwcom;写入命令
popacc;由堆栈取出a
callwdata;写入数据
ret
;==============================================
beep_bl:
movr6,#100
bl2:calldex1
cplbeep
djnzr6,bl2
movr5,#10
calldelay
ret
dex1:movr7,#180
de2:nop
djnzr7,de2
ret
delay:;(r5)*延时10ms
movr6,#50
dl1:movr7,#100
djnzr7,$
djnzr6,dl1
djnzr5,delay
ret
delay1:;延时5ms
movr6,#25
dl2:movr7,#100
djnzr7,$
djnzr6,dl2
ret
;================================================
end

谷歌Nexus 6P开启无限重启模式:用户简直不能忍
现有AC/DC转换器的课题是效率与尺寸
关于C程序中10个与内存有关的常见错误
E现场:唤醒创造力的Xperia 1
荣耀Earbuds 2 SE获首销全天京东销量冠军,赵明称未来重量级产品将逐一亮相
ME300实例-DS18B20温度控制实验(汇编语言源程序)
OpenHarmony开发者大会召开 携手共建使能千行百业的数字底座
AI成功的核心——唯有生态才能生生不息
微控制器内存的选择及注意事项
现代汽车计划生产磷酸铁锂电池及全球电池产业争夺战
如何选择适合你的中小户型的迷你净水器
充电接口另一种形式无线充电会有怎样的未来
黑芝麻华山二号芯片发布,成为唯一可支持L3自动驾驶的国产芯片
抖音为什么要做支付?移动支付会变天吗?
电烙铁发光提示和调温电路
联想Z5ProGT855版将推迟到2019年1月29日发售
三种具有代表性的色度信息处理方法
UWB定位技术发展前景分析
一位高级Java工程师的经验分享
WiFi电源插头,解决你的出门焦虑症!