数字温度计Word格式.docx

上传人:b****4 文档编号:8189453 上传时间:2023-05-10 格式:DOCX 页数:31 大小:359.26KB
下载 相关 举报
数字温度计Word格式.docx_第1页
第1页 / 共31页
数字温度计Word格式.docx_第2页
第2页 / 共31页
数字温度计Word格式.docx_第3页
第3页 / 共31页
数字温度计Word格式.docx_第4页
第4页 / 共31页
数字温度计Word格式.docx_第5页
第5页 / 共31页
数字温度计Word格式.docx_第6页
第6页 / 共31页
数字温度计Word格式.docx_第7页
第7页 / 共31页
数字温度计Word格式.docx_第8页
第8页 / 共31页
数字温度计Word格式.docx_第9页
第9页 / 共31页
数字温度计Word格式.docx_第10页
第10页 / 共31页
数字温度计Word格式.docx_第11页
第11页 / 共31页
数字温度计Word格式.docx_第12页
第12页 / 共31页
数字温度计Word格式.docx_第13页
第13页 / 共31页
数字温度计Word格式.docx_第14页
第14页 / 共31页
数字温度计Word格式.docx_第15页
第15页 / 共31页
数字温度计Word格式.docx_第16页
第16页 / 共31页
数字温度计Word格式.docx_第17页
第17页 / 共31页
数字温度计Word格式.docx_第18页
第18页 / 共31页
数字温度计Word格式.docx_第19页
第19页 / 共31页
数字温度计Word格式.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字温度计Word格式.docx

《数字温度计Word格式.docx》由会员分享,可在线阅读,更多相关《数字温度计Word格式.docx(31页珍藏版)》请在冰点文库上搜索。

数字温度计Word格式.docx

这样可以在一秒之内测量一次被测温度,其程序流程见图4.1所示。

图4.1主程序流程图图4.2读温度流程图

(2)读出温度子程序

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。

其程序流程图如图4.2所示。

(3)温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。

温度转换命令子程序流程图如上图,图4.3所示。

图4.3温度转换流程图

(4)计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图4.4所示。

图4.4计算温度流程图

(5)显示数据刷新子程序

显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。

程序流程图如图4.5所示。

图4.5 显示数据刷新流程图

4.3源程序清单

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;

调用显示出错信息子程序

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

CPL20H.1;

UP/DOWN标记

AS00:

JB20H.1,ASZ01;

20H.1=1,增加

JMPASJ01;

20H.1=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:

CPL20H.1

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;

乘0.0625

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:

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

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

当前位置:首页 > PPT模板 > 自然景观

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

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