基于51单片机Ds18B20温度采集LCD显示汇编程序.docx

上传人:b****2 文档编号:1611391 上传时间:2023-05-01 格式:DOCX 页数:26 大小:20.17KB
下载 相关 举报
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第1页
第1页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第2页
第2页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第3页
第3页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第4页
第4页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第5页
第5页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第6页
第6页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第7页
第7页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第8页
第8页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第9页
第9页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第10页
第10页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第11页
第11页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第12页
第12页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第13页
第13页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第14页
第14页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第15页
第15页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第16页
第16页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第17页
第17页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第18页
第18页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第19页
第19页 / 共26页
基于51单片机Ds18B20温度采集LCD显示汇编程序.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机Ds18B20温度采集LCD显示汇编程序.docx

《基于51单片机Ds18B20温度采集LCD显示汇编程序.docx》由会员分享,可在线阅读,更多相关《基于51单片机Ds18B20温度采集LCD显示汇编程序.docx(26页珍藏版)》请在冰点文库上搜索。

基于51单片机Ds18B20温度采集LCD显示汇编程序.docx

基于51单片机Ds18B20温度采集LCD显示汇编程序

TEMP_ZHEQU24H;实测温度值存放单元

TEMPLEQU25H

TEMPHEQU26H

TEMP_THEQU27H;高温报警值存放单元

TEMP_TLEQU28H;低温报警值存放单元

TEMPHCEQU29H;正、负温度值标记

TEMPLCEQU2AH

TEMPFCEQU2BH

K1EQUP1.4;查询按键

K2EQUP1.5;设置/调整键

K3EQUP1.6;调整键

K4EQUP1.7;确定键

BEEPEQUP3.7;蜂鸣器

RELAYEQUP1.3;指示灯

LCD_XEQU2FH;LCD字符显示位置

LCD_RSEQUP2.0;LCD寄存器选择信号

LCD_RWEQUP2.1;LCD读写信号

LCD_ENEQUP2.2;LCD允许信号

FLAG1EQU20H.0;DS18B20是否存在标志

KEY_UDEQU20H.1;设定按键的增、减标志

DQEQUP3.3;DS18B20数据信号

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

MOVSP,#60H

MOVA,#00H

MOVR0,#20H;将20H~2FH单元清零

MOVR1,#10H

CLEAR:

MOV@R0,A

INCR0

DJNZR1,CLEAR

LCALLSET_LCD

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;调用显示出错信息子程序

LCALLTEMP_BJ;显示温度标记

SJMP$

START2:

LCALLRST;调用DS18B20复位子程序

JNBFLAG1,START1;DS18B20不存在

MOVA,#0CCH;跳过ROM匹配命令

LCALLWRITE

MOVA,#44H;温度转换命令

LCALLWRITE

LCALLRST

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE

MOVA,#0BEH;读温度命令

LCALLWRITE

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,$

LCALLBEEP_BL

JMPPROC_K2

PROC_K1:

JBK2,PROC_END

LCALLBEEP_BL

JNBK2,$

MOVDPTR,#RST_A1

MOVA,#1

LCALLLCD_PRINT

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

LCALLBEEP_BL

JNBK1,$

CPL20H.1;UP/DOWN标记

AS00:

JB20H.1,ASZ01;20H.1=1,增加

JMPASJ01;20H.1=0,减小

ASZ01:

JBK2,ASZ02;TH值调整(增加)

LCALLBEEP_BL

INCTEMP_TH

MOVA,TEMP_TH

CJNEA,#120,ASZ011

MOVTEMP_TH,#0

ASZ011:

LCALLLOOK_ALARM

MOVR5,#10

LCALLDELAY

JMPASZ01

ASZ02:

JBK3,ASZ03;TL值调整(增加)

LCALLBEEP_BL

INCTEMP_TL

MOVA,TEMP_TL

CJNEA,#99,ASZ021

MOVTEMP_TL,#00H

ASZ021:

LCALLLOOK_ALARM

MOVR5,#10

LCALLDELAY

JMPASZ02

ASZ03:

JBK4,AS0;确定调整

LCALLBEEP_BL

JNBK4,$

RET

ASJ01:

JBK2,ASJ02;TH值调整(减少)

LCALLBEEP_BL

DECTEMP_TH

MOVA,TEMP_TH

CJNEA,#0FFH,ASJ011

JMPASJ022

ASJ011:

LCALLLOOK_ALARM

MOVR5,#10

LCALLDELAY

JMPAS0

ASJ02:

JBK3,ASJ03;TL值调整(减少)

LCALLBEEP_BL

DECTEMP_TL

MOVA,TEMP_TL

CJNEA,#0FFH,ASJ021

JMPASJ022

ASJ021:

LCALLLOOK_ALARM;

MOVR5,#10

LCALLDELAY

JMPAS0

ASJ022:

CPL20H.1

JMPASZ01

ASJ03:

JMPASZ03

RET

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;借位标志位C=1,转

MOVDPTR,#BJ5

LCALLTEMP_BJ3

CLRRELAY;点亮指示灯

RET

CHULI1:

MOVDPTR,#BJ3

LCALLTEMP_BJ3

SETBRELAY;熄灭指示灯

LCALLBEEP_BL;蜂鸣器响

RET

CHULI2:

MOVDPTR,#BJ4

LCALLTEMP_BJ3

SETBRELAY;熄灭指示灯

LCALLBEEP_BL;蜂鸣器响

RET

;-----------------------------------------

TEMP_BJ3:

MOVA,#0CEH

LCALLWCOM

MOVR1,#0

MOVR0,#2

BBJJ3:

MOVA,R1

MOVCA,@A+DPTR

LCALLWDATA

INCR1

DJNZR0,BBJJ3

RET

BJ3:

DB">H"

BJ4:

DB"

BJ5:

DB"!

"

;

;****************************显示温度标记子程序***************************

TEMP_BJ:

MOVA,#0CBH

LCALLWCOM

MOVDPTR,#BJ1;指针指到显示消息

MOVR1,#0

MOVR0,#2

BBJJ1:

MOVA,R1

MOVCA,@A+DPTR

LCALLWDATA

INCR1

DJNZR0,BBJJ1

RET

BJ1:

DB00H,"C"

;********************************显示正确信息子程序***************************

MENU_OK:

MOVDPTR,#M_OK1;指针指到显示消息

MOVA,#1;显示在第一行

LCALLLCD_PRINT

MOVDPTR,#M_OK2;指针指到显示消息

MOVA,#2;显示在第一行

LCALLLCD_PRINT

RET

M_OK1:

DB"DS18B20OK",0

M_OK2:

DB"TEMP:

",0

;********************************显示出错信息子程序***************************

MENU_ERROR:

MOVDPTR,#M_ERROR1;指针指到显示消息

MOVA,#1;显示在第一行

LCALLLCD_PRINT

MOVDPTR,#M_ERROR2;指针指到显示消息1

MOVA,#2;显示在第一行

LCALLLCD_PRINT

RET

M_ERROR1:

DB"DS18B20ERROR",0

M_ERROR2:

DB"TEMP:

----",0

;****************************DS18B20复位子程序*****************************

RST:

SETBDQ

NOP

CLRDQ

MOVR0,#6BH;主机发出延时复位低脉冲

MOVR1,#04H

TSR1:

DJNZR0,$

MOVR0,#6BH

DJNZR1,TSR1

SETBDQ;拉高数据线

NOP

NOP

NOP

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

RET

;************************DS18B20暂存器操作子程序***************************

RE_18B20:

JBFLAG1,RE_18B20A

RET

RE_18B20A:

LCALLRST

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE

WR_SCRAPD:

MOVA,#4EH;写暂器

LCALLWRITE

MOVA,TEMP_TH;TH(报警上限)

LCALLWRITE

MOVA,TEMP_TL;TL(报警下限)

LCALLWRITE

MOVA,#7FH;12位精度

LCALLWRITE

RET

;************************复制暂存器子程序*******************************

WRITE_E2:

LCALLRST

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE

MOVA,#48H;把暂存器里的温度报警值拷贝到EEROM

LCALLWRITE

RET

;***********************重读EEROM子程序********************************

READ_E2:

LCALLRST

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE

MOVA,#0B8H;把EEROM里的温度报警值拷贝回暂存器

LCALLWRITE

RET

;************************将自定义字符写入LCD的CGRAM中*********************

STORE_DATA:

MOVA,#40H

LCALLWCOM

MOVR2,#08H

MOVDPTR,#D_DATA

MOVR3,#00H

S_DATA:

MOVA,R3

MOVCA,@A+DPTR

LCALLWDATA;写入数据

INCR3

DJNZR2,S_DATA

RET

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

DJNZR3,$;等待100微妙

SETBDQ;重新释放总线

NOP

DJNZR2,WR1;写入下一位

SETBDQ

RET

;**********************DS18B20数据读取操作子程序**************************

READ:

MOVR4,#4;将温度低位、高位、TH、TL从DS18B20中读出

MOVR1,#TEMPL;存入25H、26H、27H、28H单元

RE00:

MOVR2,#8

RE01:

CLRCY

SETBDQ

NOP

NOP

CLRDQ;读前总线保持为低

NOP

NOP

NOP

SETBDQ;开始读总线释放

MOVR3,#09;延时18微妙

DJNZR3,$

MOVC,DQ;从DS18B20总线读得一位

MOVR3,#3CH

DJNZR3,$;等待100微妙

RRCA;把读得的位值环移给A

DJNZR2,RE01;读下一位

MOV@R1,A

INCR1

DJNZR4,RE00

RET

;************************温度值BCD码处理子程序*************************

CONVTEMP:

MOVA,TEMPH;判温度是否零下

ANLA,#08H

JZTEMPC1;温度零上转

CLRC

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;乘0.0625

MOVDPTR,#TEMPDOTTAB

MOVCA,@A+DPTR

MOVTEMPLC,A;TEMPLCLOW=小数部分BCD

MOVA,TEMPL;整数部分

ANLA,#0F0H;取出高四位

SWAPA

MOVTEMPL,A

MOVA,TEMPH;取出低四位

ANLA,#0FH

SWAPA

ORLA,TEMPL;重新组合

MOVTEMP_ZH,A

LCALLHEX2BCD1

MOVTEMPL,A

ANLA,#0F0H

SWAPA

ORLA,TEMPHC;TEMPHCLOW=十位数BCD

MOVTEMPHC,A

MOVA,TEMPL

ANLA,#0FH

SWAPA;TEMPLCHI=个位数BCD

ORLA,TEMPLC

MOVTEMPLC,A

MOVA,R4

JZTEMPC12

ANLA,#0FH

SWAPA

MOVR4,A

MOVA,TEMPHC;TEMPHCHI=百位数BCD

ANLA,#0FH

ORLA,R4

MOVTEMPHC,A

TEMPC12:

RET

;************************二-十进制转换子程序*****************************

HEX2BCD1:

MOVB,#064H

DIVAB

MOVR4,A

MOVA,#0AH

XCHA,B

DIVAB

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;显示在第二行

LCALLLCD_PRINT

MOVA,#0C6H

LCALLTEMP_BJ1

MOVA,TEMP_TH;加载TH数据

MOVLCD_X,#3;设置显示位置

LCALLSHOW_DIG2H;显示数据

MOVA,#0CEH

LCALLTEMP_BJ1

MOVA,TEMP_TL;加载TL数据

MOVLCD_X,#12;设置显示位置

LCALLSHOW_DIG2L;显示数据

RET

M_ALAX1:

DB"LOOKALERTCODE",0

M_ALAX2:

DB"TH:

TL:

",0

TEMP_BJ1:

LCALLWCOM

MOVDPTR,#BJ2;指针指到显示信息区

MOVR1,#0

MOVR0,#2

BBJJ2:

MOVA,R1

MOVCA,@A+DPTR

LCALLWDATA

INCR1

DJNZR0,BBJJ2

RET

BJ2:

DB00H,"C"

;**************************LCD显示子程序**********************************

SHOW_DIG2H:

MOVB,#100

DIVAB

ADDA,#30H

PUSHB

MOVB,LCD_X

LCALLLCDP2

POPB

MOVA,#0AH

XCHA,B

DIVAB

ADDA,#30H

INCLCD_X

PUSHB

MOVB,LCD_X

LCALLLCDP2

POPB

INCLCD_X

MOVA,B

MOVB,LCD_X

ADDA,#30H

LCALLLCDP2

RET

SHOW_DIG2L:

MOVB,#100

DIVAB

MOVA,#0AH

XCHA,B

DIVAB

ADDA,#30H

PUSHB

MOVB,LCD_X

LCALLLCDP2

POPB

INCLCD_X

MOVA,B

MOVB,LCD_X

ADDA,#30H

LCALLLCDP2

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;百位

DISPBCD2:

RET

;***************************LCD显示数据处理子程序*************************

CONV:

MOVA,73H;加载百位数据

MOVLCD_X,#6;设置位置

CJNEA,#1,CONV1

JMPCONV2

CONV1:

CJNEA,#0BH,CONV11

MOVA,#"-";"-"号显示

JMPCONV111

CONV11:

MOVA,#"";"+"号不显示

CONV111:

MOVB,LCD_X

LCALLLCDP2

JMPCONV3

CONV2:

LCALLSHOW_DIG2;显示数据

CONV3:

INCLCD_X

MOVA,72H;十位

LCALLSHOW_D

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2