DS18B20温度传感器设计文档格式.docx
- 文档编号:4126206
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:18
- 大小:587.95KB
DS18B20温度传感器设计文档格式.docx
《DS18B20温度传感器设计文档格式.docx》由会员分享,可在线阅读,更多相关《DS18B20温度传感器设计文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
方案二:
考虑到用温度传感器,在单片机电路设计中,大多都是使用传感
器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20此传感
器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简
单,故采用了方案二。
三、电路设计
1、设备整机结构及硬件电路框图
根据设计要求与设计思路,设计硬件电路框图如下图所示,4位数码管显
示器系统中AT89C51成对DS18B20初始化、温度采集、温度转换、温度数码显示。
本装置详细组成部分如下:
a.主控模块:
AT89C51片机;
b.传感器电路:
DS18B20温度传感器;
c.电路:
四位数码管显示。
按照系统设计功能的要求,确定系统由3个模块组成:
主控制器、测温电路和显示电路。
数字温度计总体电路结构框图所示:
2、单片机的选择
单片机AT89C51有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
19
、XTAL1
P0.0/AD0
39
38
P0.1/AD1
—TT
18
XTAL2
P0.2/AD2
P0.3/AD3
P04/AD4
35
P05/AD5
34
P0.6/AD6
33
9
RST
P0.7/AD7
32
P20/A8
21
P21/A9
22
P2.2/A10
23
29
24
PSEN
P2.3/A11
30
25
ALE
P2.4/A12
31
26
EA
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
27
28
1
P1.0
P1.1
10
2
11
3
12
P1.2
P3.2/INT0
4
13
P1.3
P1.4
P3.3/lNT^
P3.4/T0
5
14
6
15
P1.5
P3.5/T1
7
16
P1.6
P3.6/WR-
8
17
P1.7
P3.7/RD
AT89C51
3、温度显示电路
四位共阳极数码管,能够显示小数和负温度。
零下时,第一个数码管显示负
号。
当温度超过99.9时,四个数码管全部亮。
列扫描用P2.0—P2.3来实现,列
驱用NOT电路仿真图如下:
4、温度传感器
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智
能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并
且可根据实际要求通过简单的编程实现9〜12位的数字值读数方式。
电路图如下:
'
C1'
AF8«
C51<
TEKT>
系统总电路图如下:
:
丄口一1•
J-rJrJ**--**¥
^1直
iii^i"
.ic2:
-i-at---»
---"
-"
-»
Ik.
号-s/HiRFBlrir
—申一l-T-l土丄
f¥
J
U7
Tn
hisa罟-
nJII工工MHIIMEpflEFVn囂E
EHR■□
CT'
IJ
paaWT同玛畑PS$ri
円MB
Aru
RV
J1
5、软件设计
主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等。
主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20
的测量温度值。
温度测量每1S进行一次。
主流程图如下:
读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节。
在读出时须进行CRC校验,校验有错时不进行温度数据的改写。
流程图如下:
温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令。
当采用12位分辨率时,转换时间约为750ms在本程序设计中,采用1s显示程序延时法等待转换的完成。
计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。
显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。
6系统所运用的功能介绍:
DS18B2C与单片机之间采用串行通信的方式进行数据读写
四、系统的调试及性能分析:
硬件调试比较简单,首先检查电感的焊接是否正确,然后可用万用表测试或通电检测。
软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等的编程及调试
由于DS18B2C与单片机采用串行数据传送,因此,对DS18B2C进行读/写编程时必须严格地保证读/写时序;
否则将无法读取测量结果。
本程序采用单片机汇编或C语言编写用KeilC51编译器编程调试。
软件调试到能显示温度值,并且在有温度变化时显示温度能改变,就基本完成。
性能测试可用制作的温度机和已有的成品温度计同时进行测量比较。
由于
DS18B20勺精度很高,所以误差指标可以限制在0.5C以内。
另外,-55~+125°
C的测温范围使得该温度计完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持温度计。
DS18B20温度计C程序
II使用AT89C2051单片机,用共阳四位数码管
//P0口输出段码,P2口扫描
#include<
reg51.h>
intrins.h>
II_nop_();
延时函数用
#defineDisdataP0II段码输出口
#definediscanP2II扫描口
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P1A4;
II温度输入口
sbitDIN=P0A7;
IILED小数点控制
uinth;
II*******温度小数部分用查表法**********II
uchar
ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x0
8,0x09,0x09};
II共阳四位数码管
code
dis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};
II
uchardatatemp_data[2]={0x00,0x00};
uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};
II运算暂存用
列扫描控制字读出温度暂放显示单元数据,共4个数据
一个
*********11
微秒延时函数**********I
voiddelay(uintt){for(;
t>
0;
t--);
}
显示扫描函数**********I
/***********scan()
{chark;
for(k=0;
k<
4;
k++)II四位数码管扫描控制
{
Disdata=dis_7[display[k]];
if(k==1){DIN=0;
discan=scan_con[k];
delay(5);
discan=0xff;
}ow_reset(void)
charpresence=1;
while(presence)
DQ=1;
_nop_();
DQ=0;
//
delay(50);
//550us
delay(6);
//66uspresence=DQ;
//presence=0继续下一步}
delay(45);
//延时500uspresence=~DQ;
//从总线上读取一个字节
ucharread_byte(void)
uchari;
ucharvalue=0;
for(i=8;
i>
i--)
value>
>
=1;
DQ=0;
//_nop_();
//4us
DQ=1;
if(DQ)value|=0x80;
//66us
return(value);
read_temp()
temp_data[0]=read_byte();
//temp_data[1]=read_byte();
//ow_reset();
write_byte(0xCC);
//SkipROMwrite_byte(0x44);
//发转换命令
work_temp()
ucharn=0;
if(temp_data[1]>
127)
{if(temp_data[0]!
=0x00){temp_data[1]=(255-temp_data[1]);
temp_data[0]=(256-temp_data[0]);
n=1;
}//温度求补码
else
{temp_data[1]=(256-temp_data[1]);
}//负温度求补码}
display[4]=temp_data[0]&
0x0f;
display[0]=ditab[display[4]];
display[4]=((temp_data[0]&
0xf0)>
4)|((temp_data[1]&
0x0f)<
<
4);
//display[3]=display[4]/100;
display[1]=display[4]%100;
display[2]=display[1]/10;
display[1]=display[1]%10;
最高位为0
if(!
display[3]){display[3]=0x0A;
display[2]){display[2]=0x0A;
}}//时都不显示
if(n){display[3]=0x0B;
}//
负温度时最高位显示"
-"
************
主函数**************
main()
初始化端口
Disdata=0xff;
//discan=0xff;
for(h=0;
h<
h++){display[h]=8;
}//开机显示8888ow_reset();
//开机先转换一次
//发转换命令for(h=0;
500;
h++)
开机显示"
8888"
2秒
{scan();
}//
while
(1)
read_temp();
//work_temp();
//for(h=0;
250;
h++){scan();
读出18B20温度数据处理温度数据
显示温度值1秒
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 温度传感器 设计