基于51单片机Ds18B20温度采集LCD显示汇编程序Word格式文档下载.docx
- 文档编号:19513875
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:22
- 大小:19.70KB
基于51单片机Ds18B20温度采集LCD显示汇编程序Word格式文档下载.docx
《基于51单片机Ds18B20温度采集LCD显示汇编程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机Ds18B20温度采集LCD显示汇编程序Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
LCALLRE_18B20
START:
LCALLRST;
调用18B20复位子程序
JNBFLAG1,START1;
DS1820不存在
LCALLMENU_OK;
DS1820存在,调用显示正确信息子程序
MOVTEMP_TH,#055H;
设置TH初值85度
MOVTEMP_TL,#019H;
设置TL初值25度
LCALLRE_18B20A;
调用暂存器操作子程序
LCALLWRITE_E2;
写入DS18B20
LCALLTEMP_BJ;
显示温度标记
JMPSTART2
START1:
LCALLMENU_ERROR;
调用显示出错信息子程序
SJMP$
START2:
LCALLRST;
调用DS18B20复位子程序
DS18B20不存在
MOVA,#0CCH;
跳过ROM匹配命令
LCALLWRITE
MOVA,#44H;
温度转换命令
LCALLRST
跳过ROM匹配
LCALLWRITE
MOVA,#0BEH;
读温度命令
LCALLREAD;
调用DS18B20数据读取操作子程序
LCALLCONVTEMP;
调用温度数据BCD码处理子程序
LCALLDISPBCD;
调用温度数据显示子程序
LCALLCONV;
调用LCD显示处理子程序
LCALLTEMP_COMP;
调用实测温度值与设定温度值比较子程序
LCALLPROC_KEY;
调用键扫描子程序
SJMPSTART2;
循环
;
***************************键扫描子程序*****************************
PROC_KEY:
JBK1,PROC_K1
LCALLBEEP_BL
JNBK1,$
MOVDPTR,#M_ALAX1
MOVA,#1
LCALLLCD_PRINT
LCALLLOOK_ALARM
JBK3,$
JMPPROC_K2
PROC_K1:
JBK2,PROC_END
JNBK2,$
MOVDPTR,#RST_A1
LCALLSET_ALARM
LCALLRE_18B20;
将设定的TH,TL值写入DS18B20
LCALLWRITE_E2
PROC_K2:
LCALLMENU_OK
LCALLTEMP_BJ
PROC_END:
RET
***************************设定温度报警值TH、TL***************************
SET_ALARM:
LCALLLOOK_ALARM
AS0:
JBK1,AS00
CPL;
UP/DOWN标记
AS00:
JB,ASZ01;
=1,增加
JMPASJ01;
=0,减小
ASZ01:
JBK2,ASZ02;
TH值调整(增加)
INCTEMP_TH
MOVA,TEMP_TH
CJNEA,#120,ASZ011
MOVTEMP_TH,#0
ASZ011:
MOVR5,#10
LCALLDELAY
JMPASZ01
ASZ02:
JBK3,ASZ03;
TL值调整(增加)
INCTEMP_TL
MOVA,TEMP_TL
CJNEA,#99,ASZ021
MOVTEMP_TL,#00H
ASZ021:
LCALLLOOK_ALARM
JMPASZ02
ASZ03:
JBK4,AS0;
确定调整
JNBK4,$
RET
ASJ01:
JBK2,ASJ02;
TH值调整(减少)
DECTEMP_TH
CJNEA,#0FFH,ASJ011
JMPASJ022
ASJ011:
JMPAS0
ASJ02:
JBK3,ASJ03;
TL值调整(减少)
DECTEMP_TL
CJNEA,#0FFH,ASJ021
ASJ021:
LCALLLOOK_ALARM;
ASJ022:
CPL
ASJ03:
JMPASZ03
RST_A1:
DB"
SETALERTCODE"
0
***********************实测温度值与设定温度值比较子程序**********************
TEMP_COMP:
MOVA,TEMP_TH
SUBBA,TEMP_ZH;
减数>
被减数,则
JCCHULI1;
借位标志位C=1,转
MOVA,TEMPFC
CJNEA,#0BH,COMP
SJMPCHULI2
COMP:
MOVA,TEMP_ZH
SUBBA,TEMP_TL;
JCCHULI2;
MOVDPTR,#BJ5
LCALLTEMP_BJ3
CLRRELAY;
点亮指示灯
CHULI1:
MOVDPTR,#BJ3
SETBRELAY;
熄灭指示灯
LCALLBEEP_BL;
蜂鸣器响
CHULI2:
MOVDPTR,#BJ4
-----------------------------------------
TEMP_BJ3:
MOVA,#0CEH
LCALLWCOM
MOVR1,#0
MOVR0,#2
BBJJ3:
MOVA,R1
MOVCA,@A+DPTR
LCALLWDATA
INCR1
DJNZR0,BBJJ3
BJ3:
>
H"
BJ4:
<
L"
BJ5:
!
"
****************************显示温度标记子程序***************************
TEMP_BJ:
MOVA,#0CBH
MOVDPTR,#BJ1;
指针指到显示消息
BBJJ1:
DJNZR0,BBJJ1
BJ1:
DB00H,"
C"
********************************显示正确信息子程序***************************
MENU_OK:
MOVDPTR,#M_OK1;
MOVA,#1;
显示在第一行
MOVDPTR,#M_OK2;
MOVA,#2;
M_OK1:
DS18B20OK"
0
M_OK2:
TEMP:
"
********************************显示出错信息子程序***************************
MENU_ERROR:
MOVDPTR,#M_ERROR1;
MOVDPTR,#M_ERROR2;
指针指到显示消息1
M_ERROR1:
DS18B20ERROR"
M_ERROR2:
----"
****************************DS18B20复位子程序*****************************
RST:
SETBDQ
NOP
CLRDQ
MOVR0,#6BH;
主机发出延时复位低脉冲
MOVR1,#04H
TSR1:
DJNZR0,$
MOVR0,#6BH
DJNZR1,TSR1
SETBDQ;
拉高数据线
MOVR0,#32H
TSR2:
JNBDQ,TSR3;
等待DS18B20回应
DJNZR0,TSR2
JMPTSR4;
延时
TSR3:
SETBFLAG1;
置1标志位,表示DS1820存在
JMPTSR5
TSR4:
CLRFLAG1;
清0标志位,表示DS1820不存在
JMPTSR7
TSR5:
MOVR0,#06BH
TSR6:
DJNZR0,$;
时序要求延时一段时间
TSR7:
SETBDQ
************************DS18B20暂存器操作子程序***************************
RE_18B20:
JBFLAG1,RE_18B20A
RE_18B20A:
LCALLRST
WR_SCRAPD:
MOVA,#4EH;
写暂器
MOVA,TEMP_TH;
TH(报警上限)
MOVA,TEMP_TL;
TL(报警下限)
MOVA,#7FH;
12位精度
************************复制暂存器子程序*******************************
WRITE_E2:
MOVA,#0CCH;
MOVA,#48H;
把暂存器里的温度报警值拷贝到EEROM
***********************重读EEROM子程序********************************
READ_E2:
MOVA,#0B8H;
把EEROM里的温度报警值拷贝回暂存器
************************将自定义字符写入LCD的CGRAM中*********************
STORE_DATA:
MOVA,#40H
MOVR2,#08H
MOVDPTR,#D_DATA
MOVR3,#00H
S_DATA:
MOVA,R3
LCALLWDATA;
写入数据
INCR3
DJNZR2,S_DATA
D_DATA:
DB0CH,12H,12H,0CH,00H,00H,00H,00H
***********************DS18B20数据写入操作子程序************************
WRITE:
MOVR2,#8;
一共8位数据
CLRC
WR1:
CLRDQ;
开始写入DS18B20总线要处于复位(低)状态
MOVR3,#07
DJNZR3,$;
总线复位保持16微妙以上
RRCA;
把一个字节DATA分成8个BIT环移给C
MOVDQ,C;
写入一位
MOVR3,#3CH
等待100微妙
SETBDQ;
重新释放总线
DJNZR2,WR1;
写入下一位
**********************DS18B20数据读取操作子程序**************************
READ:
MOVR4,#4;
将温度低位、高位、TH、TL从DS18B20中读出
MOVR1,#TEMPL;
存入25H、26H、27H、28H单元
RE00:
MOVR2,#8
RE01:
CLRCY
读前总线保持为低
开始读总线释放
MOVR3,#09;
延时18微妙
DJNZR3,$
MOVC,DQ;
从DS18B20总线读得一位
把读得的位值环移给A
DJNZR2,RE01;
读下一位
MOV@R1,A
DJNZR4,RE00
************************温度值BCD码处理子程序*************************
CONVTEMP:
MOVA,TEMPH;
判温度是否零下
ANLA,#08H
JZTEMPC1;
温度零上转
MOVA,TEMPL;
二进制数求补(双字节)
CPLA;
取反加1
ADDA,#01H
MOVTEMPL,A
MOVA,TEMPH
CPLA
ADDCA,#00H
MOVTEMPH,A
MOVTEMPHC,#0BH;
负温度标志
MOVTEMPFC,#0BH
SJMPTEMPC11
TEMPC1:
MOVTEMPHC,#0AH;
正温度标志
MOVTEMPFC,#0AH
TEMPC11:
MOVA,TEMPHC
SWAPA
MOVTEMPHC,A
MOVA,TEMPL
ANLA,#0FH;
乘
MOVDPTR,#TEMPDOTTAB
MOVTEMPLC,A;
TEMPLCLOW=小数部分BCD
整数部分
ANLA,#0F0H;
取出高四位
取出低四位
ANLA,#0FH
ORLA,TEMPL;
重新组合
MOVTEMP_ZH,A
LCALLHEX2BCD1
ANLA,#0F0H
ORLA,TEMPHC;
TEMPHCLOW=十位数BCD
SWAPA;
TEMPLCHI=个位数BCD
ORLA,TEMPLC
MOVTEMPLC,A
MOVA,R4
JZTEMPC12
MOVR4,A
MOVA,TEMPHC;
TEMPHCHI=百位数BCD
ORLA,R4
TEMPC12:
************************二-十进制转换子程序*****************************
HEX2BCD1:
MOVB,#064H
DIVAB
MOVR4,A
MOVA,#0AH
XCHA,B
ORLA,B
TEMPDOTTAB:
DB00H,00H,01H,01H,02H,03H,03H,04H;
小数部分码表
DB05H,05H,06H,06H,07H,08H,08H,09H
**********************查询温度报警值子程序***************************
LOOK_ALARM:
MOVDPTR,#M_ALAX2;
指针指到显示信息区
MOVA,#2;
显示在第二行
LCALLLCD_PRINT
MOVA,#0C6H
LCALLTEMP_BJ1
加载TH数据
MOVLCD_X,#3;
设置显示位置
LCALLSHOW_DIG2H;
显示数据
加载TL数据
MOVLCD_X,#12;
LCALLSHOW_DIG2L;
M_ALAX1:
LOOKALERTCODE"
M_ALAX2:
TH:
TL:
TEMP_BJ1:
MOVDPTR,#BJ2;
MOVR0,#2
BBJJ2:
DJNZR0,BBJJ2
BJ2:
**************************LCD显示子程序**********************************
SHOW_DIG2H:
MOVB,#100
DIVAB
ADDA,#30H
PUSHB
MOVB,LCD_X
LCALLLCDP2
POPB
INCLCD_X
MOVA,B
SHOW_DIG2L:
************************显示区BCD码温度值刷新子程序**********************
DISPBCD:
MOVA,TEMPLC
MOV70H,A;
小数位
MOV71H,A;
个位
MOV72H,A;
十位
MOV73H,A;
百位
DISPBCD2:
***************************LCD显示数据处理子程序*************************
CONV:
MOVA,73H;
加载百位数据
MOVLCD_X,#6;
设置位置
CJNEA,#1,CONV1
JMPCONV2
CONV1:
CJNEA,#0BH,CONV11
MOVA,#"
-"
;
号显示
JMPCONV111
CONV11:
MOVA,#"
+"
号不显示
CONV111:
JMPCONV3
CONV2:
LCALLSHOW_DIG2;
CONV3:
INCLCD_X
MOVA,72H;
LCALLSHOW_DIG2
MOVA,71H;
MOVA,#'
.'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 Ds18B20 温度 采集 LCD 显示 汇编程序