DS18B20与LCD1602结合显示温度

DS18B20与LCD1602结合显示温度
DS18B20与LCD1602结合显示温度

DS18B20

一、DS18B20的外形及其与单片机的连接图

(a) (b)

图1

DS18B20是Dallas公司生产的1-Wire接口数字温度传感器,其外形如图1(a)所示,有三个引脚,分别为:电源地1(GND); 数字信号输入/输出端2(DQ);外接供电电源输入端3(VDD,在寄生电源接线方式时接地)。它是一种单总线数字温度传感器,所有的数据交换和控制都通过这根数据线来完成。测试温度围-55℃-125℃,温度数据位可配置为9、10、11、12位,对应的刻度值分别为0.5℃、0.25℃、0.125℃、0.0625℃,对应的最长转换时间分别为93.75ms、187.5ms、375ms、750ms。出厂默认配置为12位数据,刻度值为0.0625℃,最长转换时间为750ms。从以上数据可以看出,DS18B20数据位越低、转换时间越短、反应越快、精度越低。单总线没有时钟线,只有一根通信线,其读写数据是靠控制起始时间和采样时间来完成,所以时序要求很严格。图1(a)为DS18B20与单片机的连接电路图,它的数据线通常要求外接一个4.7KΩ-10KΩ的上拉电阻(该电阻画原理图时靠近单片机画故没有显示出来),故其闲置时状态位高电平。

提示:DS18B20外形酷似三极管,分辨引脚时,面对着扁平的那一面,左负右正,一旦接反就会立刻发热,甚至有可能烧毁。

二、DS18B20存储器结构

DS18B20的部有64位的ROM单元,和9字节的暂存器单元。

1、64位(激)光刻只读存储器

每只DS18B20都有一个唯一存储在ROM中的64位编码(跟人的号类似,一人一个号),这是出厂时被光刻好的。最前面8位是单线系列编码:28h。接着的48位是一个唯一的序列号。最后8位是以上56位的CRC编码。64-位的光刻ROM又包括5个ROM的功能命令:读ROM,匹配ROM,跳跃ROM,查找ROM和报警查找。ROM的作用是使每个DS18B20各不相同,这样就可以实现一根总线上挂接多个DS18B20以实现多点监测。

2、9字节的暂存器单元

表1

DS18B20的暂存器单元如表1所示,各部分介绍如下。

1)、温度传感器

图2

暂存器的第0(LSB)字节,第1(MSB)字节为DS18B20的温度传感器,它们负责保存对温度的测量结果,用16位二进制提供,格式如图2所示。DS18B20读取温度时共读取16位,前5个位(MSB的高5位)为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正。温度为正时读取方法为:将16进制数转换成10进制即可。温度为负时读取方法为(实际就是取补码):将16进制取反后加1,再转换成10进制。例:0550H = +85 度,FC90H = -55 度,0191H为25.0625度。LSB的低四位用于表示测量值中小数点后的数值。2)、非挥发的温度报警触发器TH和TL

位于第2和第3字节,用于写入温度报警值,实际上就是设定温度的最高和最低界限。3)、配置寄存器

配置寄存器位于存储器的第4字节,其组织如图3所示。配置寄存器的0~4位和7位被器件保留,禁止写入;在读回数据时全部为逻辑1。R1和R0用于设置DS18B20的精度,具体如表2所示。

图3

表2

4)、CRC发生器

CRC字节作为DS18B2064位ROM的一部分存储在存储器中。CRC码由ROM的前56位计算得到,被包含在ROM的重要字节当中。CRC由存储在存储器中的数据计算得到,因此当存储器中的数据发生改变时,CRC的值也随之改变。

CRC能够在总线控制器读取DS18B20时进行数据校验。为校验数据是否被正确读取,总线控制器必须用接受到的数据计算出一个CRC值,和存储在DS18B20的64位ROM中的值(读ROM时)或DS18B20部计算出的8位CRC值(读存储器时)进行比较。如果计算得到的CRC 值和读取出来的CRC值相吻合,数据被无错传输。CRC值的比较以及是否进行下一步操作完全由总线控制器决定。当在DS18B20中存储的或由其计算到CRC值和总线控制器计算的值不相符时,DS18B20部并没有一个能阻止命令序列进行的电路。

CRC的计算等式如下:

CRC = X8 + X5 + X4 + 1

单总线CRC可以由一个由移位寄存器和XOR门构成的多项式发生器来产生。这个回路包括一个移位寄存器和几个XOR门,移位寄存器的各位都被初始化为0。从ROM中的最低有效位或暂存器中的位0开始,一次一位移入寄存器。在传输了56位ROM中的数据或移入了暂存器的位7后,移位寄存器中就存储了CRC值。下一步,CRC的值必须被循环移入。此时,如果计算得到的CRC是正确的,移位寄存器将复0。

其他字节保留用,不需要看。

三、关于单总线系统

单总线系统包括一个总线控制器和一个或多个从机。DS18B20总是充当从机。当只有一只从机挂在总线上时,系统被称为“单点”系统;如果由多只从机挂在总线上,系统被称为“多点”。所有的数据和指令的传递都是从最低有效位开始通过单总线。单总线需要一个约5KΩ的外部上拉电阻;单总线的空闲状态是高电平。无论任何理由需要暂停某一执行过程时,如果还想恢复执行的话,总线必须停留在空闲状态。在恢复期间,如果单总线处于非活动(高电平)状态,位与位间的恢复时间可以无限长。如果总线停留在低电平超过480us,总线上的所有器件都将被复位。

四、操作流程

1.DS18B20复位。

2.执行ROM指令。就是访问,搜索,匹配每个DS18B20独有的64位序列号。实验板上只连有一个DS18B20,故不需识别,也就是不需读出此序列号,写代码时直接写命令0xcc跳过。

3.执行DS18B20功能指令(RAM指令,就是读写暂存器指令)。

DS18B20的功能指令很多,比较常用的有两个:

0x44:开始转换温度。转换好的温度会储存到暂存器字节0和1。

0xBE:读暂存指令。读暂存指令,会从暂存器0到9,一个一个字节读取,如果要停止的话,必须写下DS18B20复位。

ROM指令和RAM指令的具体情况见表3。

表3

五、读写DS18B20的时序

1、DS18B20的复位时序:1).单片机拉低总线480us~960us,然后释放总线(拉高电平)。2).这时DS18B20会拉低信号,大约60~240us表示应答。3).DS18B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示复位成功。4).DS18B20拉低电平60~240us之后,会释放总线。

/****************************************************************************** **

复位:主机t0时刻发送一复位脉冲(最短为480us的低电平信号),接着在t1时刻释放总线(

拉高总线电平)进入接收状态。DS18B20在检测到总线的上升沿之后等待15~60us。接着DS18B20在t2时刻发出存在脉冲(持续60~240us的低电平)

******************************************************************************* ***/

void DS18B20_Reset()

{

DQ=1;

_nop_();

DQ=0; //拉低总线

delay2us(280); //持续280*2+5=565s

DQ=1; //释放总线

while(DQ); //等待应答(电平拉低)

while(!DQ); //应答电平大约持续60~240us后重新拉高总线

}

2、读时序:1).在读取的时候单片机拉低电平大约1us;2).单片机释放总线,然后读取总线电平。3).这时候DS18B20会拉低电平(0)或拉高电平(1)。4).读取电平过后,延迟大约40~45us。

/*****************************************************************

读字节:主机总线t0时刻从高拉至低电平时,总线只须保持低电平l .7us。

之后在t1时刻将总线拉高产生读时间隙,读时间隙在t1时刻后t2时刻前有效。

t2距t0为15us,也就是说t2时刻前主机必须完成读位,并在t0后的60us-120us

释放总线.注意读的时候从最低位向最高位读。

******************************************************************/

uchar DS18B20_Read_Byte()

{

uchar i,temp=0;

for(i=0;i<8;i++)

{

temp=temp>>1;

DQ=0; //主机将总线拉至低电平,只需保持1.7us

_nop_(); //保持一个时钟周期,也即1us

DQ=1;

delay2us(1);//延时7us,一般读数在后半段读

if(DQ)

temp=temp|0x80;

delay2us(2); //这里延时45us+前面7us+1us=53us,接近60us }

return temp;

}

3、写时序:1).单片机拉低电平大约10~15us;2).单片机持续拉低电平(0)或拉高电平(1)大约20~45us的时间;3).释放总线。

/*******************************************************************

写字节:当主机总线t0时刻从高拉至低电平时就产生写时间隙。从to时刻开始15us之应将所需写的位送到总线上,在随后15-60us间DS18B20对总线采样若

低电平写入的位是0;若高电平写入的位是1,连续写2位间的间隙应大于1us。注意:无论读写都是从最低位开始。

********************************************************************/ void DS18B20_Write_Byte(uchar dat)

{

uchar i;

for(i=0;i<8;i++)

{

DQ=0; //直接拉到低电平即可产生写时间隙。

DQ=dat&0x01; //从最低位依次传输

delay2us(25); //在15us之将需写的位送到总线上。然后等待总线采样

//此处至少延时60us

DQ=1; //释放总线

_nop_();

dat =dat>>1;

}

}

4、读取温度流程

/*******************************************************************

读温度:流程:复位--写命令(跳过读序列号,单个DS18B20时用)--启动温度转换--等待转换完成(完成总线会跳回高电平)--复位--写命令(跳过ROM编码命令)-- 读取暂存寄存器字节命令---读低字节---读高字节--复位--合并高低字节--判断正负

********************************************************************/ DS18B20_Read_Temperature()

{

uchar temp_low,temp_high;

DS18B20_Reset();

DS18B20_Write_Byte(0xcc);

DS18B20_Write_Byte(0x44);

while(!DQ); //等待转换完成

DS18B20_Reset();

DS18B20_Write_Byte(0xcc);

DS18B20_Write_Byte(0xbe);

temp_low=DS18B20_Read_Byte();

temp_high=DS18B20_Read_Byte();

DS18B20_Reset();

tvalue=temp_high;

tvalue=(tvalue<<8)|temp_low;

if(tvalue<0x0fff)

tflag=0;

else

{

tvalue=~tvalue+1; //因为最高位的前五位是1,所以寄存器存的是温度的补码(补码要取反加一得到二进制数)

tflag=1;

}

tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数

return(tvalue);

}

例子:DS18B20+1602

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P2^3;//ds18b20与单片机连接口

sbit RS=P2^6;

sbit RW=P2^7;

sbit E=P2^5;

unsigned char code str1[]={"temperature: "};

unsigned char code str2[]={" "};

uchar data disdata[5];

uint tvalue;//温度值

uchar tflag;//温度正负标志

/*************************lcd1602程序**************************/

//声明调用函数

void Lcd_W_Cmd(uchar );

void Lcd_W_Dat(uchar dat);

uchar Lcd_R_Busy();

void Lcd_Init();

void delay(uchar t);

void delay_4_nop();

/**************************延时*******************************/

#define delay_4_nop() {_nop_();_nop_();_nop_();_nop_();}

void delay(uchar t)

{

uchar i, j;

for(i=0; i

for(j=0; j<50; j++);

}

void Lcd_Init()

{

uchar i;

Lcd_W_Cmd(0x3c);

Lcd_W_Cmd(0x0e);

Lcd_W_Cmd(0x01);

Lcd_W_Cmd(0x06);

Lcd_W_Cmd(0x80);

for(i=0;i

{

Lcd_W_Dat(str1[i]);

}

Lcd_W_Cmd(0xC0);

for(i=0;i

{

Lcd_W_Dat(str2[i]);

}

}

uchar Lcd_R_Busy()

{

uchar s;

RW=1;

delay_4_nop();

RS=0;

delay_4_nop();

E=1;

delay_4_nop();

s=P0;

delay_4_nop();

E=0;

return(s);

}

void Lcd_W_Cmd(uchar )

{

uchar i;

do

{

i=Lcd_R_Busy();

i=i&0x80;

delay(2);

}while(i!=0);

RW=0;

delay_4_nop();

RS=0;

delay_4_nop();

E=1;

delay_4_nop();

P0=;

delay_4_nop();

E=0;

}

void Lcd_W_Dat(uchar dat)

{

uchar i;

do

{

i=Lcd_R_Busy();

i=i&0x80;

delay(2);

}while(i!=0);

RW=0;

delay_4_nop();

RS=1;

delay_4_nop();

E=1;

delay_4_nop();

P0=dat;

delay_4_nop();

E=0;

}

/******************************ds1820程序***************************************/

void delay2us(unsigned int i)//延时1微秒

{

while(--i);

}

/****************************************************************************** **

牛人实测,本人没有做过试验。针对的是12Mhz的晶振

delay(0):延时518us 误差:518-2*256=6

delay(1):延时7us (原帖写"5us"是错的)

delay(10):延时25us 误差:25-20=5

delay(20):延时45us 误差:45-40=5

delay(100):延时205us 误差:205-200=5

delay(200):延时405us 误差:405-400=5

*******************************************************************************

*/

/****************************************************************************** **

复位:主机t0时刻发送一复位脉冲(最短为480us的低电平信号),接着在t1时刻释放总线(

拉高总线电平)进入接收状态。DS18B20在检测到总线的上升沿之后等待15~60us。接着DS18B20

在t2时刻发出存在脉冲(持续60~240us的低电平)

******************************************************************************* ***/

void DS18B20_Reset()

{

DQ=1;

_nop_();

DQ=0; //拉低总线

delay2us(280); //持续280*2+5=565s

DQ=1; //释放总线

while(DQ); //等待应答(电平拉低)

while(!DQ); //应答电平大约持续60~240us后重新拉高总线

}

/*****************************************************************

读字节:主机总线t0时刻从高拉至低电平时,总线只须保持低电平l .7us。

之后在t1时刻将总线拉高产生读时间隙,读时间隙在t1时刻后t2时刻前有效。

t2距t0为15us,也就是说t2时刻前主机必须完成读位,并在t0后的60us-120us

释放总线.注意读的时候从最低位向最高位读。

******************************************************************/

uchar DS18B20_Read_Byte()

{

uchar i,temp=0;

for(i=0;i<8;i++)

{

temp=temp>>1;

DQ=0; //主机将总线拉至低电平,只需保持1.7us

_nop_(); //保持一个时钟周期,也即1us

DQ=1;

delay2us(1);//延时7us,一般读数在后半段读

if(DQ)

temp=temp|0x80;

delay2us(2); //这里延时45us+前面7us+1us=53us,接近60us }

return temp;

}

/*******************************************************************

写字节:当主机总线t0时刻从高拉至低电平时就产生写时间隙。从to时刻开始15us之应将所需写的位送到总线上,在随后15-60us间DS18B20对总线采样若

低电平写入的位是0;若高电平写入的位是1,连续写2位间的间隙应大于1us。注意:无论读写都是从最低位开始。

********************************************************************/ void DS18B20_Write_Byte(uchar dat)

{

uchar i;

for(i=0;i<8;i++)

{

DQ=0; //直接拉到低电平即可产生写时间隙。

DQ=dat&0x01; //从最低位依次传输

delay2us(25); //在15us之将需写的位送到总线上。然后等待总线采样

//此处至少延时60us

DQ=1; //释放总线

_nop_();

dat =dat>>1;

}

}

/*******************************************************************

读温度:流程:复位--写命令(跳过读序列号,单个DS18B20时用)--启动温度转换--等待转换完成(完成总线会跳回高电平)--复位--写命令(跳过ROM编码命令)-- 读取暂存寄存器字节命令---读低字节---读高字节--复位--合并高低字节--判断正负

********************************************************************/ DS18B20_Read_Temperature()

{

uchar temp_low,temp_high;

DS18B20_Reset();

DS18B20_Write_Byte(0xcc);

DS18B20_Write_Byte(0x44);

while(!DQ); //等待转换完成

DS18B20_Reset();

DS18B20_Write_Byte(0xcc);

DS18B20_Write_Byte(0xbe);

temp_low=DS18B20_Read_Byte();

temp_high=DS18B20_Read_Byte();

DS18B20_Reset();

tvalue=temp_high;

tvalue=(tvalue<<8)|temp_low;

if(tvalue<0x0fff)

tflag=0;

else

{

tvalue=~tvalue+1;

tflag=1;

}

tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数

return(tvalue);

}

/*******************************************************************/ void Show_Temperature()//温度值显示

{

uchar flagdat;

disdata[0]=tvalue/1000+0x30;//百位数

disdata[1]=tvalue%1000/100+0x30;//十位数

disdata[2]=tvalue%100/10+0x30;//个位数

disdata[3]=tvalue%10+0x30;//小数位

if(tflag==0)

flagdat=0x20;//正温度不显示符号

else

flagdat=0x2d;//负温度显示负号:-

if(disdata[0]==0x30)

{

disdata[0]=0x20;//如果百位为0,不显示

if(disdata[1]==0x30)

{

disdata[1]=0x20;//如果百位为0,十位为0也不显示

}

}

Lcd_W_Cmd(0xc0);

Lcd_W_Dat(flagdat);//显示符号位

Lcd_W_Cmd(0xc1);

Lcd_W_Dat(disdata[0]);//显示百位

Lcd_W_Cmd(0xc2);

Lcd_W_Dat(disdata[1]);//显示十位

Lcd_W_Cmd(0xc3);

Lcd_W_Dat(disdata[2]);//显示个位

Lcd_W_Cmd(0xc4);

Lcd_W_Dat(0x2e);//显示小数点

Lcd_W_Cmd(0xc5);

Lcd_W_Dat(disdata[3]);//显示小数位

}

/********************主程序***********************************/

void main()

{

Lcd_Init();//初始化显示

while(1)

{

DS18B20_Read_Temperature();//读取温度

Show_Temperature();//显示

}

}

基于DS18B20的多点温度测量系统设计

一、绪论 1.1 课题来源 温度是一个和人们生活环境有着密切关系的物理量,也是一种在生产、科研、生活中需要测量和控制的重要物理量,是国际单位制七个基本量之一,同时它也是一种最基本的环境参数。人民的生活与环境温度息息相关,物理、化学、生物等学科都离不开温度。在工业生产和实验研究中,在电力、化工、石油、冶金、机械制造、大型仓储室、实验室、农场塑料大棚甚至人们的居室里经常需要对环境温度进行检测,并根据实际的要求对环境温度进行控制。比如,发电厂锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才能正常进行。炼油过程中,原油必须在不同的温度和压力条件下进行分流才能得到汽油、柴油、煤油等产品;没有合适的温度环境,许多电子设备不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保障。可见,研究温度的测量具有重要的理论意义和推广价值。 随着现代计算机和自动化技术的发展,作为各种信息的感知、采集、转换、传输相处理的功能器件,温度传感器的作用日益突出,成为自动检测、自动控制系统和计量测试中不可缺少的重要技术工具,其应用已遍及工农业生产和日常生活的各个领域。本设计就是为了满足人们在生活生产中对温度测量系统方面的需求。 本设计要求系统测量的温度的点数为4个,测量精度为0.5℃,测温范围为-20℃~+80℃。采用液晶显示温度值和路数,显示格式为:温度的符号位,整数部分,小数部分,最后一位显示℃。显示数据每一秒刷新一次。 1.2 课题研究的意义 21世纪科学技术的发展日新月异,科技的进步带动了测量技术的发展,现代控制设备的性能和结构发生了巨大的变化,我们已经进入了高速发展的信息时代,测量技术也成为当今科技的主流之一,被广泛地应用于生产的各个领域。对于本次设计,其目的在于: (1)掌握数字温度传感器DS18B20的原理、性能、使用特点和方法,利用C51对系统进行编程。

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

电路实物图如下图所示: C 语言程序如下所示: /******************************************************************** zicreate ----------------------------- Copyright (C) https://www.360docs.net/doc/7814793574.html, -------------------------- * 程序名; 基于DS18B20的测温系统 * 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来 * 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限 * 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s 左右自动 * 退出;按一下K3进入查看下限温度模式,显示1s 左右自动退出;按一下K4消除 * 按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能, * K1是实现减1功能,K3是用来设定上下限温度正负的。 * 编程者:Jason * 编程时间:2009/10/2 *********************************************************************/ #include //将AT89X52.h 头文件包含到主程序 #include //将intrins.h 头文件包含到主程序(调用其中的_nop_()空操作函数延时) #define uint unsigned int //变量类型宏定义,用uint 表示无符号整形(16位) #define uchar unsigned char //变量类型宏定义,用uchar 表示无符号字符型(8位) uchar max=0x00,min=0x00; //max 是上限报警温度,min 是下限报警温度 bit s=0; //s 是调整上下限温度时温度闪烁的标志位,s=0不显示200ms ,s=1显示1s 左右 bit s1=0; //s1标志位用于上下限查看时的显示 void display1(uint z); //声明display1()函数 #include"ds18b20.h" //将ds18b20.h 头文件包含到主程序 #include"keyscan.h" //将keyscan.h 头文件包含到主程序 #include"display.h" //将display.h 头文件包含到主程序

DS18B20温度检测程序

(1)先将数据线置高电平“1”。 (2)延时(该时间要求的不是很严格,但是尽可能的短一点) (3)数据线拉到低电平“0”。 (4)延时750微秒(该时间的时间范围可以从480到960微秒)。 (5)数据线拉到高电平“1”。 (6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。 (7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。 (8)将数据线再次拉高到高电平“1”后结束。

(1)数据线先置低电平“0”。 (2)延时确定的时间为15微秒。 (3)按从低位到高位的顺序发送字节(一次只发送一位)。 (4)延时时间为45微秒。 (5)将数据线拉到高电平。 (6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。(7)最后将数据线拉高。 DS18B20的写操作时序图如图

DS18B20的读操作 (1)将数据线拉高“1”。 (2)延时2微秒。 (3)将数据线拉低“0”。 (4)延时15微秒。 (5)将数据线拉高“1”。 (6)延时15微秒。 (7)读数据线的状态得到1个状态位,并进行数据处理。 (8)延时30微秒。DS18B20的读操作时序图如图所示。

DS18B20的Protues仿真图 源程序代码: #include "reg51.h" #include "intrins.h" // 此头文件中有空操作语句NOP 几个微秒的延时可以用NOP 语句,但本人没用NOP,直接用了I++来延时 #define uchar unsigned char #define uint unsigned int uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x38,0x39}; sbit ds18b20_io=P2^0; //单片机与DS18B20的连接口 sbit lcdrs=P2^6; //1602与单片机的接口 sbit lcden=P2^7;

基于单片机的DS18B20温度测量

基于DS18B20的温度测量系统 组员:计佳辰11221120 组员:徐文杰11221110 1.课题要求 测量环境中的温度,以BCD码的形式在LED上显示 2. 设计背景 随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。本设计选用A T89C51单片机作为主控制器件,DS18B20作为测温传感器,通过LM016L 实现温度显示。通过DS18B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.01℃。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。 3.设计方案 3.1总体设计思路方案与系统框图 采用数字温度芯片DS18B20测量温度,输出信号全数字化。采用了单总线的数据传输,由数字温度计DS18B20和AT89C51单片机构成的温度测量装置,DS18B20的DQ与AT89C51的P3.7口相连,与它直接输出温度的数字信号,采用AT89C51单片机控制,温度显示由四位八段LED显示屏完成,LED的D0~D7为8位双向数据端,与AT89C51的P1口相连,系统框图如下图所示。

3.2 DS18B20芯片介绍 DS18B20引脚定义: (1)DQ为数字信号输入输出端 (2)GND为电源地 (3)VDD为外接供电电源输入端温度寄存器(0和1字节) AT89C51 时钟电路复位电路 DS18B20数 字温度传感器 测温物体 图1 显示电路

DS18B20温度控制数码管显示(汇编非常详细)

; DS18B20温度控制数码管显示(汇编非常详细) * ;* 1、P1.6= → 进入设定温度报警值TL 状态: * ;* L--20 * ;* 2、P1.6 → 进入设定温度报警值TH 状态: * ;* H--28 * ;* 3、P1.6 → 返回 * ;* 4、设定过程:P1.4 →加键(UP),P1.5 →减键(DOWN),可快速调。* ;* ** TIMER_L DATA 23H TIMER_H DATA 24H TIMER_COUN DATA 25H TEMPL DATA 26H TEMPH DATA 27H TEMP_TH DATA 28H TEMP_TL DATA 29H TEMPHC DATA 2AH TEMPLC DATA 2BH TEMP_ZH DATA 2CH BEEP EQU P3.7 DATA_LINE EQU P3.3 RELAY EQU P1.3 FLAG1 EQU 20H.0 FLAG2 EQU 20H.1 ;------------------------------------------------- K1 EQU P1.4 K2 EQU P1.5 K3 EQU P1.6 K4 EQU P1.7 ;=================================================

ORG 0000H JMP MAIN ORG 000BH AJMP INT_T0 ;-------------------------------------------------- MAIN: MOV SP,#30H MOV TMOD,#01H ;T0,方式1 MOV TIMER_L,#00H ;50ms定时值 MOV TIMER_H,#4CH MOV TIMER_COUN,#00H ;中断计数 MOV IE,#82H ;EA=1,ET0=1 LCALL READ_E2 ;LCALL RE_18B20 MOV 20H,#00H SETB BEEP SETB RELAY MOV 7FH,#0AH ;熄灭符 CALL RESET ;复位与检测DS18B20 JNB FLAG1,MAIN1 ;FLAG1=0,DS18B20不存在 JMP START MAIN1: CALL RESET JB FLAG1,START LCALL BEEP_BL ;DS18B20错误,报警 JMP MAIN1 START: MOV A,#0CCH ; 跳过ROM匹配 CALL WRITE MOV A,#044H ; 发出温度转换命令 CALL WRITE CALL RESET MOV A,#0CCH ; 跳过ROM匹配 CALL WRITE MOV A,#0BEH ; 发出读温度命令 CALL WRITE CALL READ ;读温度数据 CALL CONVTEMP CALL DISPBCD CALL DISP1 CALL SCANKEY

DS18B20温度检测

目录 1引言 (1) 2系统描述 (2) 2.1系统功能 (2) 2.2系统设计指标 (2) 3系统的主要元件 (3) 3.1单片机 (3) 3.2温度传感元件 (4) 3.3LCD显示屏 (6) 4硬件电路 (7) 4.1系统整体原理图 (7) 4.2单片机晶振电路 (7) 4.3温度传感器连接电路 (8) 4.4LCD电路 (9) 4.5报警和外部中断电路 (10) 5结论 (11)

温度监测系统硬件设计 摘要:利用DS18B20为代表的新型单总线数字式温度传感器实现温度的监测,可 以简化硬件电路,也可以实现单线的多点分布式温度监测,而不会浪费单片机接口,提供了单片机接口的利用率。同时提高了系统能够的抗干扰性,使系统更灵活、方 便。本系统主要实现温度的检测、显示以及高低温的报警。也可以通过单总线挂载 多个DS18B20实现多点温度的分布式监测。 关键词: DS18B20,单总线,温度,单片机 1引言 在科技广泛发展的今天,计算机的发展已经越来越快,它的应用已经越来越广泛。而单片机的发展和应用是其中的重要一方面。单片机在工业生产(机电、化工、轻纺、自控等等)和民用家电各方面有广泛的应用。其中,单片机在工业生产中的应用尤其广泛。 单片机具有集成度高,处理能力强,可靠性高,系统结构简单,价格低廉的优点,因此被广泛应用。在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要测量参数。例如:在冶金工业、化工工业、电力工程、机械制造和食品加工等许多领域中,人们都需要对各类加热炉、热处理炉、反映炉和锅炉,尤其是热学试验(如:物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中的温度进行测量,并经常会对其进行控制。传统的方式是采用热电偶或热电阻,但是由于模拟温度传感器输出为模拟信号,必须经过A/D 转换环节获得数字信号后才能够被单片机等微处理器接收处理,使得硬件电路结构复杂,制作成本较高。 近年来,美国DALLAS公司生产的DS18B20为代表的新型单总线数字式温度传感器以其突出优点广泛使用于仓储管理、工农业生产制造、气象观测、科学研究以及日常生活中。这类温度传感器集温度测量和A\D转换于一生,直接输出数字量,传输距离远,可以很方便地实现多点测量,硬件电路结构简单,与单片机

基于DS18B20的温度测量系统设计

课程设计(论文) 题目名称基于DS18B20温度测量系统设计 课程名称单片机原理及应用 学生姓名尹彬涛 学号1341301075 系、专业电子信息工程 指导教师江世民 2015年 6 月12 日

摘要 随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于STC89C52单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器DS18B20的数据采集过程。对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与STC89C52结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。 关键词:单片机; DS18B20; 温度传感器; 数字温度计; STC89C52

目录 摘要 (1) 引言 (3) 一、方案介绍 (3) 1、显示部分 (3) 2、温度采集 (5) 3、方案流程图 (5) 二、总体方案设计 (6) 1、硬件设计 (6) 1.1 温度采集设计 (6) 1.2温度显示设计 (6) 2、软件设计 (7) 2.1 DS18B20程序设计 (7) 2.2显示部分程序设计 (8) 三、实验调试过程 (10) 1、软件调试 (10) 1.1 显示部分调试........................................ . (10) 四、心得体会 (10) 五、致谢 (11) 六、参考文献 (12) 七、附录 (12) 附录一程序代码 (12) 附录二仿真电路图 (18)

实验八 DS18B20数字温度显示实验

D S18B20数字温度显示实验 1.实验目的 掌握一线式数字温度传感器的使用,了解单总线的工作方式。 掌握数字温度传感器DS18B20的工作原理及温度测量方法。 2.实验原理及内容 DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃。 主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。本程序仅挂接一个芯片,使用默认的12位转换精度,外接供电电源,读取的温度值高位字节送WDMSB单元,低位字节送WDLSB 单元,再按照温度值字节的表示格式及其符号位,经过简单的变换即可得到实际温度值。 图118B20封装引脚 图2相关原理 接线方法: 1.利用S T C89C51实验板上的I R F1插孔和排针,将D S18B20插入I R F1插孔,用一根单条数据线把D S18B20的2脚接到C P U部份的P3.0; 2.用一条4P I N的排线,把7474的A B C D接到P0口的P0.0,P0.1,P0.2,0.3四个端口。(即插入P0口的上半部份)。 3.用一条8P I N的排线。 把数码管译码部份的输出端接到数码管部份的数据口; 4.用一条4P I N的排线,把74138的输入端接到P0口的P0.4,P0.5,P0.6,07四个端口。(即插入P0口的下半部份)。 5.用一条8P I N的排线。 把38译码部份的输出端接到数码管部份的显示位口。 在本系统中,为了简化程序, 采用了74L S47(数码管译码)74L S138(三八译码)。即P0口的P0.0,P0.1,P0.2,P0.3四个端口接到74L S47进行硬件数码管译码,然后输出到数码管部分的数据口。P0.4,P0.5,P.0.6三个端口接到74L S138进行38译码,然后输出到数码管的位控制。

ds18b20温度采集

“盛群杯”单片机大赛设计报告 温度读取部分: 采用数字温度传感器DS18B20。DS18B20为数字式温度传感器,无需其他外加电路,直接输出数字量。可直接与单片机通信,读取测温数据,电路简单。如图1.2.2 所示。 DS18B20与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面带来了令人满意的效果 2.2.1 温度采集部分设计 本系统采用半导体温度传感器作为敏感元件。传感器我们采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,直接输出数字量,可以直接和单片机进行通讯,大大简化了电路的复杂度。DS18B20应用广泛,性能可以满足题目的设计要求。DS18B20的测温电路如图2.2.1所示。

图2.2.1 DS18B20测温电路 (1)DSI8B20的测温功能的实现: 其测温电路的实现是依靠单片机软件的编程上。当DSI8B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的0,1字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.062 5℃/LSB形式表示。温度值格式如表2.2.1所示,其中“S”为标志位,对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。DSI8B20完成温度转换后,就把测得的温度值与 TH做比较,若T>TH或T RoM操作命令 -> 存储器操作命令-> 处理数据 ①初始化单总线上的所有处理均从初始化开始 ② ROM操作命令总线主机检测到DSl820的存在便可以发出ROM操作命令之一这些命令如表2.2.2所示 表2.2.2 ROM操作命令表 ③存储器操作命令如表2.2.3所示 表2.2.3 存储器操作命令表

基于单片机的DS18B20温度测量

基于DS18B20的温度测量系 统 组员:计佳辰11221120 组员:徐文杰11221110 1.课题要求 测量环境中的温度,以BCD码的形式在LED上显示 2. 设计背景 随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差,这里设计的数字温度计具有读数方便,测温围广,测温精确,数字显示,适用围宽等特点。本设计选用AT89C51单片机作为主控制器件,DS18B20作为测温传感器,通过LM016L 实现温度显示。通过DS18B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.01℃。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。 3.设计方案 3.1总体设计思路方案与系统框图 采用数字温度芯片DS18B20测量温度,输出信号全数字化。采用了单总线的数据传输,由数字温度计DS18B20和AT89C51单片机构成的温度测量装置,DS18B20的DQ与AT89C51的P3.7口相连,与它直接输出温度的数字信号,采用AT89C51单片机控制,温度显示由四位八段LED显示屏完成,LED的D0~D7为8位双向数据端,与AT89C51的P1口相连,系统框图如下图所示。

3.2 DS18B20芯片介绍 DS18B20引脚定义: (1)DQ为数字信号输入输出端 (2)GND为电源地 (3)VDD为外接供电电源输入端温度寄存器(0和1字节)AT89C51 时钟电路复位电路 DS18B20数 字温度传感器 测温物体 图1 显示电路

基于stc51单片机的LCD1602显示时间_的电子万年历(显示当前温度)

1 课设所需软件简介 1.1 Keil uVision4的简要介绍 2009年2月发布Keil μVision4,Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。 2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil uVision4,其编译器、调试工具实现与ARM器件的最完美匹配。 Keil C51开发系统基本知识Keil C51开发系统基本知识 1. 系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 2. Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

DS18B20温度显示演示程序-LCD1602显示

/*DS18B20温度显示演示程序-LCD1602显示 开机时对DS18B20进行检测,如果DS18B20检测不正常,LCD1602显示: DS18B20 ERROR PLEASE CHECK 蜂鸣器报警。 DS18B20检测正常,LCD1602显示: DS18B20 OK TEMP: 100.8℃ 如果温度值高位为0,将不显示出来。 你可以通过拔插DS18B20查看DS18B20的检测功能。*/ #include < reg51.h > #include < intrins.h > #define uchar unsigned char #define uint unsigned int sbit DQ = P3^2 ; //定义DS18B20端口DQ sbit BEEP=P1^0 ; //蜂鸣器驱动线 bit presence ; sbit LCD_RS = P1^0 ; sbit LCD_RW = P1^1; sbit LCD_EN = P1^2 ; uchar code cdis1[ ] = {" DS18B20 OK "} ; uchar code cdis2[ ] = {" TEMP: . C "} ; uchar code cdis3[ ] = {" DS18B20 BUSY "} ; uchar code cdis4[ ] = {" PLEASE WAIT "} ; unsigned char data temp_data[2] = {0x00,0x00} ; unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00} ; unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ; void beep() ; unsigned char code mytab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ; #define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ; /*******************************************************************/ void delay1(int ms)

DS18B20温度检测教学提纲

D S18B20温度检测

目录 1 引言 (1) 2 系统描述 (2) 2.1 系统功能 (2) 2.2 系统设计指标 (3) 3 系统的主要元件 (3) 3.1 单片机 (3) 3.2 温度传感元件 (5) 3.3 LCD显示屏 (7) 4 硬件电路 (8) 4.1 系统整体原理图 (8) 4.2 单片机晶振电路 (9) 4.3 温度传感器连接电路 (10) 4.4 LCD电路 (10) 4.5 报警和外部中断电路 (12) 5 结论 (12)

温度监测系统硬件设计 摘要:利用DS18B20为代表的新型单总线数字式温度传感器实现温 度的监测,可以简化硬件电路,也可以实现单线的多点分布式温度监 测,而不会浪费单片机接口,提供了单片机接口的利用率。同时提高 了系统能够的抗干扰性,使系统更灵活、方便。本系统主要实现温度 的检测、显示以及高低温的报警。也可以通过单总线挂载多个 DS18B20实现多点温度的分布式监测。 关键词: DS18B20,单总线,温度,单片机 1引言 在科技广泛发展的今天,计算机的发展已经越来越快,它的应用已经越来越广泛。而单片机的发展和应用是其中的重要一方面。单片机在工业生产(机电、化工、轻纺、自控等等)和民用家电各方面有广泛的应用。其中,单片机在工业生产中的应用尤其广泛。 单片机具有集成度高,处理能力强,可靠性高,系统结构简单,价格低廉的优点,因此被广泛应用。在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要测量参数。例如:在冶金工业、化工工业、电力工程、机械制造和食品加工等许多领域中,人们都需要对各类加热炉、热处理炉、反映炉和锅炉,尤其是热学试验(如:物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中的温度进行测量,并经常会对其进行控制。

基于DS18B20的多点温度测量系统(毕业设计)

目录 中文摘要......................................................................................................... III 英文摘要......................................................................................................... I V 1 绪论. (1) 1.1课题来源 (1) 1.2课题研究的目的意义 (1) 1.3国内外现状及水平 (2) 1.4课题研究内容 (2) 2 系统方案设计 (3) 2.1基于模拟温度传感器设计方案 (3) 2.2基于数字温度传感器设计方案 (4) 2.3方案论证 (4) 3 电路设计 (6) 3.1工作原理 (6) 3.2DS18B20与单片机接口技术 (7) 3.3键盘电路设计 (14) 3.4显示电路设计 (15) 3.5报警电路设计 (16) 3.6电源电路设计 (17) 4 程序设计 (18) 4.1系统资源分配 (18) 4.2系统流程设计 (18) 4.3程序设计 (24) 5 系统仿真 (34) 5.1PROTEUS仿真环境介绍 (34) 5.2原理图绘制 (35) 5.3程序加载 (35) 5.4系统仿真 (36) 5.5仿真结果分析 ............................................................................................... 错误!未定义书签。 6 PCB板设计 (39) 6.1PCB板设计 (39)

LCD1602和DS18B20显示温度

您研究一下以下这个程序,然后就可以加上时间功能.多做一点就能多学一点. 开机时对DS18B20进行检测,如果DS18B20检测不正常,LCD1602显示:DS18B20 ERROR PLEASE CHECK 蜂鸣器报警。 DS18B20检测正常,LCD1602显示: DS18B20 OK TEMP: 100.8℃ 如果温度值高位为0,将不显示出来。 你可以通过拔插DS18B20查看DS18B20的检测功能。 /* ME300B单片机开发系统演示程序- DS18B20温度显示*/ /* LCD1602显示*/ /* 作者:gguoqing */ /*Copyright(C)伟纳电子https://www.360docs.net/doc/7814793574.html, All Rights Reserved */ /*******************************************************************/ #include < reg51.h > #include < intrins.h > #define uchar unsigned char #define uint unsigned int sbit DQ = P3^3 ; //定义DS18B20端口DQ sbit BEEP=P3^7 ; //蜂鸣器驱动线 bit presence ; sbit LCD_RS = P2^0 ; sbit LCD_RW = P2^1 ; sbit LCD_EN = P2^2 ; uchar code cdis1[ ] = {" DS18B20 OK "} ; uchar code cdis2[ ] = {" TEMP: . C "} ; uchar code cdis3[ ] = {" DS18B20 ERR0R "} ; uchar code cdis4[ ] = {" PLEASE CHECK "} ; unsigned char data temp_data[2] = {0x00,0x00} ; unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00} ; unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,

DS18B20与数码管温度显示C程序

#include #define uchar unsigned char #define uint unsigned int sbit DQ=P1^4;//ds18b20与单片机连接口 unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//共阴数码管字码表 unsigned char code str1[]={0x0bf,0x86,0x0db,0x0cf,0x0e6,0x0ed,0x0fd,0x87,0x0ff,0x0ef,0x39};//个位带小数点字码表 unsigned char code wei[]={0x0fe,0x0fd,0x0fb,0x0f7}; uchar data disdata[5]; uint tvalue;//温度值 uchar tflag;//温度正负标志 /******************************ds1820程序***************************************/ void delay_18B20(unsigned int i)//延时1微秒 { while(i--); } void ds1820rst()/*ds1820复位*/ { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低 delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); } uchar ds1820rd()/*读数据*/ { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10);

DS18B20温度传感器设计

智能化仪器及原理应用课程设计 设计题目: DS18B20数字温度计的设计专业班级: 10自动化1 班 姓名: 组员: 指导老师: 日期:2012-11-26

目录 一、摘要 (2) 二、方案论证 (2) 三、电路设计 (2) 1、设备整机结构及硬件电路框图 (2) 2、单片机的选择 (3) 3、温度显示电路 (3) 4、温度传感器 (4) 5、软件设计 (6) 6、系统所运用的功能介绍: (8) 四、系统的调试及性能分析: (8) 附件:DS18B20温度计C程序 (9)

一、摘要 本设计的主要内容是应用单片机和温度传感器设计一个数字温度表,DS18B20是一种可组网的高精度数字温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。本设计基于数字温度传感器DS18B20,以AT89C51片机为核心设计此测试系统,具有结构简单、测温精度高、稳定可靠的优点。可实现温度的实时检测和显示,本文给出了系统的硬件电路详细设计和软件设计方法,经过调试和实验验证,实现了预期的全部功能。 二、方案论证 方案一: 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D 转换电路,感温电路比较麻烦。 方案设计框图如下: 方案二:考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。 从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。 三、电路设计 1、 设备整机结构及硬件电路框图 根据设计要求与设计思路,设计硬件电路框图如下图所示, 4位数码管显示器系统中AT89C51成对DS18B20初始化、温度采集、温度转换、温度数码显示。 本装置详细组成部分如下: a. 主控模块:AT89C51片机; b. 传感器电路:DS18B20温度传感器;

DS18B20测温流程图

主程序流程图:

DS18B20程序流程图: 程序按数据手册的时序图编写子函数模块: 1、DS18B20复位函数:resetDS18B20(void) 2、写一位的函数:WriteBit (unsigned char wb) 3、读一位的函数:unsigned char ReadBit (void) 4、读一个字节的函数:unsigned char readByteDS18B20(void) 即将位读取的时序循环8次。 5、写一个字节的函数:void writeByteDS18B20(unsigned char Data)。即将位写入的时序循环8次。 6、first和next函数流程图:

1、端口初始化子函数; 2、串口初始化; 3、串口发送一个字符函数:void USART_Putchar(unsigned char send_char) 4、串口发送数组函数:void UsartTransmit(unsigned char *data, unsigned char len) 5、串口发送字符串函数:void USART1_Putstr(char *s) 即通过字符串长度控制USART_Putchar函数的循环次数。6、串口发送字符串子程序(带有换行符): void USART1_Puts(char *s) 7、串口接收字符串函数:unsigned char getchar1(void) 8、串口接收中断子程序:void USART_RXT(void)流程图

1、 数据打包子函数:void Packet_Data(void) 2、

基于DS18B20的lcd1602的温度检测系统

1.1、来源 在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。温度无时无刻不在,同样也时时刻刻都在变化,为了让人们能更直观的看出此时此刻此地的实时温度,我就利用了单片机来完成这一功能。 1.2、意义 温度的检测与控制在现代经济与社会中有举足轻重的地位,与我们的生活息息相关,密不可分,越发占有一席之地。例如在储粮仓库、智能楼宇、空调控制及其他的工农业生产和科学研究中应用广泛。在温度的检测与控制方面,DS18B20小型温度检测系统及其数字温度传感器有许多突出的优点,其通过单总线与单片机连接,系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度检测,因此对于我们来设计并研究基于DS18B20的温度检测系统有主要的现实意义,从一方面讲这不仅对于工农业的发展,更对于国防的巩固与建设起到重要的作用;另一方面,本设计能够在一定程度上提高自己的单片机开发能力。 1.3、目的 (1)本实验要实现的是通过DS18B20温度传感器采集温度并在LCD上显示,并学会使用单片机控制DS18B20此类单总线器件,并对数字温度传感器DS18B0进行时序分析。 (2)更进一步了解LCD1602的应用。 (3)掌握单片机与PC的远程通信。 2、课题承担人员及分工说明 *********:(1)主要负责电路板的制作、焊接与调试。 (2)电路的仿真。 (3)温度主要程序的编写与调试。 **********:(1)Protel画板,材料的收集。 (2)串口的调试与程序编写。 (3)VB界面的设计和上位机程序的编写。 二、课题总体设计说明 1、说明总体开发计划和课题所达到的功能目标和技术指标 1.1、总体开发计划 1.1.1、基本功能 (1)以数字传感器DS1820作为前端采集温度,经过单片机处理后,将外部的温度显示在液晶屏上。 (2)可用通过独立式按键来设定温度的上限值和下限值,当坏境温度超过上限值或低于下限值时蜂鸣器会自动报警,并在液晶屏上提示温度大于上限值或温度小于下限值。 (3)当单片机检测到DS18B20存在时会在在LCD1602上显示“DS18B20 Succes”,反之则显示“DS18B20 is Wrong,TEMP is No on”。 1.1.2、扩展功能 以数字传感器DS1820作为前端采集温度,经过单片机处理后,再通过串口通信,把实

DS18B20温度读取及显示讲解学习

D S18B20温度读取及 显示

DS18B20温度读取及显示 #include #define uchar unsigned char #define uint unsigned int #define wela P2 #define dula P0 uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit DS=P3^7; void delay6us(uchar z){ while(z--); } void delayms(uchar z){ uchar i,j; for(i=0;i

void init(){ uchar presence=1; while(presence){ DS=0; delay6us(80);//延时480us以上 DS=1; delay6us(15); if(DS==0){ presence=0; while(DS==0); } else presence=1; } } uchar ds_read(){ uchar byt,bi; uchar i; for(i=0;i<8;i++){ DS=0; delay6us(1); DS=1; delay6us(1); bi=DS; byt=(byt>>1)|(bi<<7); delay6us(11); } return byt; } void ds_write(uchar ch){ uchar i; for(i=0;i<8;i++){ DS=0; delay6us(1); DS=ch&0x01; delay6us(11); DS=1; delay6us(1); ch>>=1; }

相关文档
最新文档