单片机DS18B20水温控制系统设计.docx

上传人:b****2 文档编号:17355629 上传时间:2023-07-24 格式:DOCX 页数:26 大小:172.69KB
下载 相关 举报
单片机DS18B20水温控制系统设计.docx_第1页
第1页 / 共26页
单片机DS18B20水温控制系统设计.docx_第2页
第2页 / 共26页
单片机DS18B20水温控制系统设计.docx_第3页
第3页 / 共26页
单片机DS18B20水温控制系统设计.docx_第4页
第4页 / 共26页
单片机DS18B20水温控制系统设计.docx_第5页
第5页 / 共26页
单片机DS18B20水温控制系统设计.docx_第6页
第6页 / 共26页
单片机DS18B20水温控制系统设计.docx_第7页
第7页 / 共26页
单片机DS18B20水温控制系统设计.docx_第8页
第8页 / 共26页
单片机DS18B20水温控制系统设计.docx_第9页
第9页 / 共26页
单片机DS18B20水温控制系统设计.docx_第10页
第10页 / 共26页
单片机DS18B20水温控制系统设计.docx_第11页
第11页 / 共26页
单片机DS18B20水温控制系统设计.docx_第12页
第12页 / 共26页
单片机DS18B20水温控制系统设计.docx_第13页
第13页 / 共26页
单片机DS18B20水温控制系统设计.docx_第14页
第14页 / 共26页
单片机DS18B20水温控制系统设计.docx_第15页
第15页 / 共26页
单片机DS18B20水温控制系统设计.docx_第16页
第16页 / 共26页
单片机DS18B20水温控制系统设计.docx_第17页
第17页 / 共26页
单片机DS18B20水温控制系统设计.docx_第18页
第18页 / 共26页
单片机DS18B20水温控制系统设计.docx_第19页
第19页 / 共26页
单片机DS18B20水温控制系统设计.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机DS18B20水温控制系统设计.docx

《单片机DS18B20水温控制系统设计.docx》由会员分享,可在线阅读,更多相关《单片机DS18B20水温控制系统设计.docx(26页珍藏版)》请在冰点文库上搜索。

单片机DS18B20水温控制系统设计.docx

单片机DS18B20水温控制系统设计

单片机DS18B20水温控制系统设计

一.引言

在一些温控系统电路中,广泛采用的是通过热电偶、热电阻或PN结测温电路经过相应的信号调理电路,转换成A/D转换器能接收的模拟量,再经过采样/保持电路进行A/D转换,最终送入单片机及其相应的外围电路,完成监控。

但是由于传统的信号调理电路实现复杂、易受干扰、不易控制且精度不高。

本文介绍单片机结合DS18B20水温控制系统设计,因此,本系统用一种新型的可编程温度传感器(DS18B20),不需复杂的信号调理电路和A/D转换电路能直接与单片机完成数据采集和处理,实现方便、精度高,可根据不同需要用于各种场合。

目录

一.引言...

二.设计目的...

三.系统功能...

四.系统设备...

五.温度控制总体方案与原理...

1.系统模块图...

2.系统模块总关系图...

六.温度转换核心及其算法...

1.温度传感器DS18B20原理与特性...

DSl8B20的管脚及特点...

DS18B20的内部结构...

DS18B20的内存结构...

DS18B20的测温功能...

DSl820工作过程中的协议...

温度传感器与单片机通讯时序...

2.温度转换算法及分析...

七.硬件设计说明...

1.系统总体电路图...

2.各个模块电路图...

输入系统...

输出系统...

芯片系统...

八.软件设计说明...

1.总模块的流程图...

2.各个模块的流程图...

读取温度DS18B20模块的流程...

键盘扫描处理流程...

九.操作指引...

按键功能...

显示温度...

设定温度...

十.参考文献...

程序源代码...

 

 

二.设计目的

设计并制作一个水温自动控制系统,控制对象为1升净水,容器为搪瓷器皿。

水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动控制,以保持设定的温度基本不变。

利用单片机AT89S52实现水温的智能控制,使水温能够在40-90度之间实现控制温度调节。

利用仪器读出水温,并在此基础上将水温调节到我们通过键盘输入的温度(其方式是加热或降温),而且能够将温度显示在我们的七段发光二极管板上。

 

三.系统功能

1.可以对温度进行自由设定,到那时必须在0-100摄氏度单位内,设定时可以适时的显示说设定的温度值,温度是可以自由设置的,传感器的检测值与设定的温度比较,可以显示在七段发光二极管上。

2.温度由1台1000w电炉来实现,如果温度不在40-90度之间,则在LED上显示“8888”,表示错误。

3.能够保持不间断显示水温,显示位数4位,分别为百位,个位,十位,和小数位。

(但由于规定不超过90度,所以百位也就没有实现,默认的百位是不显示的)

 

四.系统设备

ME300B最小系统板 

DS18B20数字温度传感器(集成了A/D转换功能) 

1000W电炉 

温度计 

继电器 

风扇 

盛水器皿 

六.温度转换核心及其算法1.温度传感器DS18B20原理与特性本系统采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,大大简化了电路的复杂度,以及算法的要求。

首先先来介绍一下DS18B20这块传感器的特性及其功能:

DSl8B20的管脚及特点DS18B20可编程温度传感器有3个管脚。

(如图:

1)GND为接地线,DQ为数据输入输出接口,通过一个较弱的上拉电阻与单片机相连。

VDD为电源接口,既可由数据线提供电源,又可由外部提供电源,范围3.O~5.5V。

本文使用外部电源供电。

主要特点有:

1.用户可自设定报警上下限温度值。

2.不需要外部组件,能测量-55~+125℃范围内的温度。

3.-10℃~+85℃范围内的测温准确度为±0.5℃。

4.通过编程可实现9~l2位的数字读数方式,可在至多750ms内将温度转换成12位的数字,测温分辨率可达0.0625℃。

5.独特的单总线接口方式,与微处理器连接时仅需要一条线即可实现与微处理器双向通讯。

DS18B20的内部结构DS18B20内部功能模块如图2所示,主要由4部分组成:

64位光刻R0M(图3)、温度传感器、非易失性的温度报警触发器TH和TL、配置寄存器。

R0M中的64位序列号是出厂前被光刻好的,他可以看作是该DSISB20的地址序列码,每个DSI8B20的64位序列号均不相同。

高低温报警触发器TH和TL,配置寄存器均由一个字节的E2PROM组成,使用一个存储器功能命令可对TH,TL或配置寄存器写入。

配置寄存器中R1,R0决定温度转换的精度位数:

R1R0=’00’,9位精度,最大转换时间为93.75ms;R1R0=‘01’,10位精度,最大转换时间为187.5ms;R1R0=‘10’,11位精度,最大转换时间为375ms;R1R0=’11’,12位精度,最大转换时间为750ms;未编程时默认为12位精度。

本系统采用的也是12位的精度。

DS18B20的内存结构DSI8B20温度传感器的内部存储器包括一个高速暂存RAM(便笺式的内部存储器)和一个非易失性的可电擦除的EEPROM,后者存放高温和低温触发器TH,TL和结构寄存器。

便笺存储器包含了9个连续字节(0~8),前两个字节是测得的温度信息(图4),字节0的内容是温度的低8位,字节1是温度的高8位,字节2是TH(温度上限报警),字节3是TL(温度下限报警),字节4是配置寄存器(图5),用于确定输出分辨率9到12位。

第5、6、7个字节是预留寄存器,用于内部计算。

字节8是冗余检验字节,校验前面所有8个字节的CRC码,可用来保证通信正确。

DS18B20的测温功能当DSI8B20接收到温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的0,1字节。

单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625℃/LSB形式表示。

温度值格式如图4所示,其中“S”为标志位,对应的温度计算:

当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。

图4下面的表是对应的一部分温度值。

DSI8B20完成温度转换后,就把测得的温度值与TH做比较,若T>TH或TRoM操作命令->存储器操作命令->处理数据1初始化单总线上的所有处理均从初始化开始2ROM操作品令总线主机检测到DSl820的存在便可以发出ROM操作命令之一这些命令如指令代码ReadROM(读ROM)[33H]MatchROM(匹配ROM)[55H]SkipROM(跳过ROM][CCH]SearchROM(搜索ROM)[F0H]Alarmsearch(告警搜索)[ECH]3存储器操作命令指令代码WriteScratchpad(写暂存存储器)[4EH]ReadScratchpad(读暂存存储器)[BEH]CopyScratchpad(复制暂存存储器)[48H]ConvertTemperature(温度变换)[44H]RecallEPROM(重新调出)[B8H]ReadPowersupply(读电源)[B4H]温度传感器与单片机通讯时序2.温度转换算法及分析由于DS18B20转换后的代码并不是实际的温度值,所以要进行计算转换。

温度高字节(MSByte)高5位是用来保存温度的正负(标志为S的bit11~bit15),高字节(MSByte)低3位和低字节来保存温度值(bit0~bit10)。

其中低字节(LSByte)的低4位来保存温度的小数位(bit0~bit3)。

由于本程序采用的是0.0625的精度,小数部分的值,可以用后四位代表的实际数值乘以0.0625,得到真正的数值,数值可能带几个小数位,所以采取小数舍入,保留一位小数即可。

也就说,本系统的温度精确到了0.1度。

算法核心:

首先程序判断温度是否是零下,如果是,则DS18B20保存的是温度的补码值,需要对其低8位(LSByte)取反加一变成原码。

处理过后把DS18B20的温度Copy到单片机的RAM中,里面已经是温度值的Hex码了,然后转换Hex码到BCD码,分别把小数位,个位,十位,百位的BCD码存入RAM中。

由于百位没有用,默认情况是置为0A,在显示屏上没有任何显示。

温度算法核心代码DATA_DEAL:

MOVA,TEMPERATURE_H;TEMPERATURE_H存放的是DS18B20转换后的高8位的值(上图的MSByte)ANLA,#80H;判温度是否零下JZTEMPC1;A为0,说明是正数,跳往TEMPC1,如果是负数,则对低8为进行补码处理CLRCMOVA,TEMPERATURE_L;为负数,对低8位(上图的LSByte)求补CPLA;取反加1ADDA,#01HMOVTEMPERATURE_L,A;取补码后存回TEMPERATURE_L,此时TEMPERATURE_L里面的值就可以表示温度了MOVA,TEMPERATURE_HCPLAADDCA,#00H;高位TEMPERATURE_H取反,加上从低位TEMPERATURE_L进来的位MOVTEMPERATURE_H,A;写回TEMPERATURE_HMOVTEMPERATURE_HC,#0BHSJMPTEMPC11TEMPC1:

MOVTEMPERATURE_HC,#0AHTEMPC11:

MOVA,TEMPERATURE_HCSWAPAMOVTEMPERATURE_HC,AMOVA,TEMPERATURE_LANLA,#0FH;取A低4位(小数位,单位是0.0625),得出来的数要乘以0.0625,通过查表来算出值MOVDPTR,#TEMPDOTTABMOVCA,@A+DPTR;查表MOVTEMPERATURE_LC,A;TEMPERATURE_LC的低四位保存小数部分BCDMOVDIS_BUF_X,A;小数位的BCD码送入显示buffer中MOVA,TEMPERATURE_L;整数部分ANLA,#0F0H;得到个位单个数值SWAPA;SWAP后就得到个位真正的个位MOVTEMPERATURE_L,AMOVA,TEMPERATURE_HANLA,#0FHSWAPAORLA,TEMPERATURE_LMOVTEMPERATURE_ZH,A;组合后的值存入TEMPERATURE_ZHLCALLHtoB;转换HEx值成为BCD码MOVTEMPERATURE_L,A;TEMPERATURE_L目前存入的是十位和个位的BCD编码ANLA,#0F0HSWAPAORLA,TEMPERATURE_HC;TEMPERATURE_HC低4位存放十位数BCDMOVTEMPERATURE_HC,AMOVA,TEMPERATURE_LANLA,#0FHSWAPA;TEMPERATURE_LC高4位存放个位数BCDORLA,TEMPERATURE_LCMOVTEMPERATURE_LC,AMOVA,R7JZTEMPC12ANLA,#0FHSWAPAMOVR7,AMOVA,TEMPERATURE_HC;TEMPERATURE_HC高4位存放百位数BCDANLA,#0FHORLA,R7MOVTEMPERATURE_HC,ATEMPC12:

RET;小数部分码表TEMPDOTTAB:

DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06H,06H,07H,08H,08H,09H,09H结果温度值的BCD码存放到TEMPERATURE_HC(百位和十位),TEMPERATURE_LC(个位和小数位)中七.硬件设计说明1.系统总体电路图2.各个模块电路图输入系统1.键盘模块我们用的下面四个独立键盘中的三个,分别是:

K2,K3,K4。

1.温度测量模块DS18B20通过P3.3口和AT89S52进行通讯。

输出系统

1. 继电器模块

下图是一个蜂鸣器和一个继电器的图,我们只用到了继电器的图,继电器和单片机的P1.3口进行通讯。

 

单片机DS18B20水温控制系统设计程序源码

 

       TEMPERATURE_LDATA31H;DS18B20低8位Buffer

       TEMPERATURE_HDATA30H;DS18B20高8位Buffer

           

       TEMPERATURE_HCDATA32H  ;计算后的百位和十位的BCD码存放BUFFER

       TEMPERATURE_LCDATA33H  ;计算后的个位和小数位的BCD码存放BUFFER

       TEMPERATURE_ZHDATA34H  ;计算后十位和个位HEX码的存放BUFFER

   

       DIS_BUF_XDATA35H;数码管小数位Buffer

       DIS_BUF_GDATA36H ;数码管个位Buffer

       DIS_BUF_SDATA37H ;数码管十位Buffer

       DIS_BUF_BDATA38H ;数码管百位Buffer

       

       KEY_BUF_GDATA39H;键盘输入后,的个位值

       KEY_BUF_SDATA49H;键盘输入后,的十位值

       KEY_BUF_BDATA41H;键盘输入后,的百位值

       

       K_UPEQUP1.5    ;上调按钮

       K_DOWNEQUP1.6  ;下调按钮

       K_ENTEREQUP1.7 ;输入数据确认按钮

  

       P_DS18B20EQUP3.3 ;读取DS18B20的输入端口

       P_SWITCHEQUP1.3  ;继电器控制端口,1-风扇,0-电炉

        

       FLAGEQU20H.0       ;标志位,确定是否存在DS18B20

       ENTER_FLAGEQU20H.1 ;键盘输入的标志位,为0说明键盘正在输入,为1说明键盘输入退出

;程序开始执行

       ORG0000H

       LJMPMAIN

       ORG0100H

MAIN:

 MOVSP,#60H          ;初始化

       MOVKEY_BUF_G,#00H  ;由于KEY_BUF是由用户输入的,所以先赋值初始化

       MOVKEY_BUF_S,#00H

       MOVKEY_BUF_B,#00H

    

NEXT:

       LCALL  READ_TEMP;调用读温度子程序

       JBFLAG,NORMAL  ;判断是否有DS18B20的存在

       CALLERR            ;不存在时显示错误信息

AJMP   NEXT

NORMAL:

LCALLDATA_DEA     ;处理从DS18B20得到的数据

       LCALLSET_DIS_BUF      ;赋值给DIS_BUF_X,G,S,B

       LCALLDISPLAY      ;调用数码管显示子程序

       LCALLSCAN_KEY     ;扫描键盘

       LCALLSWITCH           ;处理继电器

       AJMP   NEXT

;程序名称:

ERR

;功能:

程序出错处理,显示四个8,即8888

;入口参数:

;出口参数:

DIS_BUF_X,DIS_BUF_G,DIS_BUF_S,DIS_BUF_B

ERR:

   MOVDIS_BUF_X,#08H;如果没有找到DS18B20,那么就显示错误,错误显示为888

       MOVDIS_BUF_G,#08H      

       MOVDIS_BUF_S,#08H

       MOVDIS_BUF_B,#08H

       LCALLDISPLAY

       RET

;程序名称:

DATA_DEAL

;功能:

处理采集后的的数据

;入口参数:

TEMPERATURE_L

;出口参数:

DIS_BUF_G,DIS_BUF_S,DIS_BUF_B

DATA_DEAL:

       MOV A,TEMPERATURE_H  ;判温度是否零下

       ANL A,#80H

       JZ TEMPC1         ;A为0,说明是正数,跳往TEMPC1,如果是负数,则对低8为进行补码处理

       CLR C

       MOV A,TEMPERATURE_L   ;二进制数求补(双字节)

       CPL A             ;取反加1

       ADD A,#01H

       MOV TEMPERATURE_L,A   ;取补码后存回TEMPERATURE_L,此时TEMPERATURE_L里面的值就能表示温

;度了,不过还要继续处理一下。

       MOV A,TEMPERATURE_H

       CPL A

       ADDC A,#00H              ;高位TEMPERATURE_H取反,加上从低位TEMPERATURE_L进来的位

       MOV TEMPERATURE_H,A      ;写回TEMPERATURE_H

       MOV TEMPERATURE_HC,#0BH

       SJMP TEMPC11

TEMPC1:

MOV TEMPERATURE_HC,#0AH     

TEMPC11:

MOV A,TEMPERATURE_HC

       SWAP A

       MOV TEMPERATURE_HC,A

       MOV A,TEMPERATURE_L

       ANL A,#0FH             ;取A低4位(小数位,单位是0.0625),得出来的数要乘以0.0625,通过查表来算出值

       MOV DPTR,#TEMPDOTTAB

       MOVC A,@A+DPTR         ;查表

       MOV TEMPERATURE_LC,A   ;TEMPERATURE_LC LOW=小数部分BCD

       MOV DIS_BUF_X,A        ;小数位的BCD码送入显示buffer中

       MOV A,TEMPERATURE_L    ;整数部分

       ANL A,#0F0H            ;得到个位‘单个数值

       SWAP A                 ;SWAP后就得到个位真正的个位

       MOV TEMPERATURE_L,A

       MOV A,TEMPERATURE_H

       ANL A,#0FH

       SWAP A

       ORL A,TEMPERATURE_L

       MOV TEMPERATURE_ZH,A    ;组合后的值存入TEMPERATURE_ZH

       LCALL HtoB              ;转换HEx值成为BCD码

       MOV TEMPERATURE_L,A     ;TEMPERATURE_L目前存入的是十位和个位的BCD编码

       ANL A,#0F0H

       SWAP A

       ORL A,TEMPERATURE_HC    ;TEMPERATURE_HCLOW位=十位数BCD

       MOV TEMPERATURE_HC,A

       MOV A,TEMPERATURE_L

       ANL A,#0FH

       SWAP A                  ;TEMPERATURE_LCHI位=个位数BCD

       ORL A,TEMPERATURE_LC

       MOV TEMPERATURE_LC,A

       MOV A,R7

       JZ TEMPC12

       ANL A,#0FH

       SWAP A

       MOV R7,A

       MOV A,TEMPERATURE_HC     ;TEMPERATURE_HCHI=百位数BCD

       ANL A,#0FH

 

       ORL A,R7

       MOV TEMPERATURE_HC,A

TEMPC12:

RET

; 小数部分码表

TEMPDOTTAB:

 DB  00H,01H,01H,02H,03H,03H,04H,04H,05H,06H,06H,07H,08H,08H,09H,09H

;0.0625->00H

;0.0625*2=0.125->01H

;0.0625*3=0.1875->01H

;0.0625*4=0.25->02H

;0.0625*5=0.3125->03H

;以此类推..........

;程序名称:

HtoB

;功能:

十六进制转BCD

;入口参数:

A

;出口参数:

R7

HtoB:

  MOV B,#064H ;100        

       DIV AB      ;a/100        

       MOV R7,A    ;        

       MOV A,#0AH

       XCH A,B

       DIV AB               

       SWAP A

       ORL A,B

       RET

;程序名称:

INIT_TEMP

;功能:

初始化DS18B20,确定DS18B20是否是存在的

;入口参数:

;出口参数:

FLAG

INIT_TEMP:

                 

      SETB   P_DS18B20

      NOP

      CLRP_DS18B20              ;主机发出延时537微秒的复位低脉冲

      MOVR0,#6BH

      MOVR1,#04H

TSR1:

  DJNZ   R0,$

      MOV   40,

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

当前位置:首页 > 人文社科 > 法律资料

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

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