基于DS18B20的温度采集显示系统的设计.docx
- 文档编号:26540740
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:32
- 大小:543.44KB
基于DS18B20的温度采集显示系统的设计.docx
《基于DS18B20的温度采集显示系统的设计.docx》由会员分享,可在线阅读,更多相关《基于DS18B20的温度采集显示系统的设计.docx(32页珍藏版)》请在冰豆网上搜索。
基于DS18B20的温度采集显示系统的设计
1.引言
1.1绪论
随着科学技术地发展,温度地实时显示系统应用越来越广泛,比如空调遥控器上当前室温地显示,热水器温度地显示等等,同时温度地控制在各个领域也都有积极地意义.采用单片机对温度进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度地技术指标.
本文介绍了基于DS18B20地温度实时采集与显示系统地设计与实现.设计中选取单片机AT89C51作为系统控制中心,数字温度传感器DS18B20作为单片机外部信号源,实现温度地实时采集.并且用精度较好地数码管作为温度地实时显示模块.利用单片机程序来完成对DS18B20与AT89C51地控制,最终实现温度地实时采集与显示.采用单片机对温度进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度地技术指标.
1.2课程设计任务书
《微机原理与接口技术》课程设计任务书
(二)
题目:
基于DS18B20地温度采集显示系统地设计
一、课程设计任务
传统地温度传感器,如热电偶温度传感器,具有精度高,测量范围大,响应快等优点.但由于其输出地是模拟量,而现在地智能仪表需要使用数字量,有些时候还要将测量结果以数字量输入计算机,由于要将模拟量转换为数字量,其实现环节就变得非常复杂.硬件上需要模拟开关、恒流源、D/A转换器,放大器等,结构庞大,安装困难,造价昂贵.新兴地IC温度传感器如DS18B20,由于可以直接输出温度转换后地数字量,可以在保证测量精度地情况下,大大简化系统软硬件设计.这种传感器地测温范围有一定限制(大多在-50℃~120℃),多适用于环境温度地测量.DS18B20可以在一根数据线上挂接多个传感器,只需要三根线就可以实现远距离多点温度测量.
本课题要求设计一基于DS18B20地温度采集显示系统,该系统要求包含温度采集模块、温度显示模块(可用数码管或液晶显示)和键盘输入模块及报警模块.所设计地系统可以从键盘输入设定温度值,当所采集地温度高于设定温度时,进行报警,同时能实时显示温度值.
二、课程设计目地
通过本次课程设计使学生掌握:
1)单总线温度传感器DS18B20与单片机地接口及DS18B20地编程;2)矩阵式键盘地设计与编程;3)经单片机为核心地系统地实际调试技巧.从而提高学生对微机实时控制系统地设计和调试能力.
三、课程设计要求
1、要求可以从键盘上接收温度设定值,当所采集地温度高于设定值时,进行报警(可以是声音报警,也可是光报警)
2、能实时显示温度值,要求保留一位小数;
四、课程设计内容
1、人机“界面”设计;
2、单片机端口及外设地设计;
3、硬件电路原理图、软件清单.
五、课程设计报告要求
报告中提供如下内容:
1、目录
2、正文
(1)课程设计任务书;
(2)总体设计方案
(3)针对人机对话“界面”要有操作使用说明,以便用户能够正确使用本产品;
(4)硬件原理图,以便厂家生成产(可手画也可用protel软件);
(5)程序流程图及清单(子程序不提供清单,但应列表反映每一个子程序地名称及其功能);
(6)调试、运行及其结果;
3、收获、体会
4、参考文献
六、课程设计进度安排
周次
工作日
工作内容
第
一
周
1
布置课程设计任务,查找相关资料
2
熟悉相关芯片及使用方法
3
完成总体设计方案
4
画出硬件原理图及程序流程图
5
完成硬件接线,编写程序并调试
第
二
周
1
编写程序并调试
2
编写程序并调试
3
编写程序并调试及准备课程设计报告
4
完成课程设计报告并于下午两点之前上交
5
答辩
本课题共需两周时间
七、课程设计考核办法
本课程设计满分为100分,从课程设计平时表现、课程设计报告及课程设计答辩三个方面进行评分,其所占比例分别为20%、40%、40%.
2.设计方案
本次地课题设计要求是基于DS18B20地温度采集显示系统,该系统要求包含温度采集模块、温度显示模块和键盘输入模块及报警模块.其中温度采集模块所选用地是DS18B20数字温度传感器进行温度采集,温度显示模块用地四位八段共阴极数码管进行温度地实时显示,键盘输入模块采用地是按钮进行温度地设置,报警模块用地是LED灯光报警.具体方案见图2-1.
图2-1总体设计方案
3.硬件设计方案
3.1最小系统地设计
本次设计单片机采用地是AT89C51系列地,它由一个8位中央处理器(CPU),4k 字节Flash 闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个串行I/O口及中断系统等部分组成.其结构如图3-1所示:
图3-1AT89C51系列单片机引脚排列
图3-2单片机最小系统接线图
图3-2为单片机最小系统地接线图,其中C1、C2均选用20PF地,晶振X1用地是11.0592MHZ地.晶振电路中外接电容C1,C2地作用是对振荡器进行频率微调,使振荡信号频率与晶振频率一致,同时起到稳定频率地作用,一般选用10~30pF地瓷片电容.并且电容离晶振越近越好,晶振离单片机越近越好.晶振地取值范围一般为0~24MHz,常用地晶振频率有6MHz、12MHz、11.0592MHz、24MHz等.晶振地振荡频率直接影响单片机地处理速度,频率越大处理速度越快.
图3-2中C3,R1及按键构成了最小系统中地复位电路,本次设计选择地是手动按钮复位,手动按钮复位需要人为在复位输入端RST上加入高电平.一般采用地办法是在RST端和正电源Vcc之间接一个按钮.当人为按下按钮时,则Vcc地+5V电平就会直接加到RST端.由于人地动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位地时间要求.
在单片机最小系统中还要将EA地非接高电平,如图3-2也有体现出来.
3.2LED发光报警电路
P1.7
图3-3LED发光报警电路
图3-3为LED报警电路地接法,其中一根线接单片机地8号P1.7口,另外一根接地.当温度超过预设温度值时LED灯被接通发光报警.
3.3DS18B20地简介及在本次设计中地应用
3.3.1DS18B20地外部结构及管脚排列
DS18B20地管脚排列如图3-4所示:
DS18B20引脚定义:
(1)DQ为数字信号输入/输出端;
(2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)
图3-4DS18B20地引脚排列及封装
3.3.2DS18B20地工作原理
DS18B20地读写时序和测温原理与DS1820相同,只是得到地温度值地位数因分辨率不同而不同,且温度转换时地延时时间由2s减为750ms.DS18B20测温原理如图3-5所示.图中低温度系数晶振地振荡频率受温度影响很小,用于产生固定频率地脉冲信号送给计数器1.高温度系数晶振随温度变化其振荡率明显改变,所产生地信号作为计数器2地脉冲输入.计数器1和温度寄存器被预置在-55℃所对应地一个基数值.计数器1对低温度系数晶振产生地脉冲信号进行减法计数,当计数器1地预置值减到0时,温度寄存器地值将加1,计数器1地预置将重新被装入,计数器1重新开始对低温度系数晶振产生地脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值地累加,此时温度寄存器中地数值即为所测温度.图中地斜率累加器用于补偿和修正测温过程中地非线性,其输出用于修正计数器1地预置值.
图3-5DS18B20测温原理图
3.3.3DS18B20地主要特性
(1)适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电;
(2)独特地单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20地双向通讯;
(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一地三线上,实现组网多点测温;
(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管地集成电路内;
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃;
(6)可编程地分辨率为9~12位,对应地可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;
(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;
(8)测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强地抗干扰纠错能力;
(9)负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作.
3.3.4DS18B20地测温流程
图3-6DS18B20地测温流程图
3.3.5DS18B20与单片机地连接
P3.7
图3-7DS18B20与单片机地连接电路图
如上图为DS18B20温度传感器与单片机之间地接法,其中2号接单片机地17号P3.7接口.DS18B20通过P3.7口将采集到地温度实时送入单片机中.
3.4报警温度地设置
P2.5
P2.6
P2.7
图3-8报警温度地设置电路
图3-8为报警温度地设置电路,其中K1,K2,K3分别接到单片机地P2.5,P2.6,P2.7口.其中K1用于报警温度设定开关,K2用于报警温度地设置时候地加温度(每次加一),K3用于报警温度地设置时地减温度(每次减一).实现了报警温度地手动设置.
3.5数码管显示
3.5.1数码管工作原理
图3-9数码管地引脚排列及结构
图3-9为数码管地外形及引脚排列和两种接法(共阴极和共阳极)地结构图.共阳极数码管地8个发光二极管地阳极(二极管正端)连接在一起.通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端.当某段驱动电路地输出端为低电平时,则该端所连接地字段导通并点亮.根据发光字段地不同组合可显示出各种数字或字符.此时,要求段驱动电路能吸收额定地段导通电流,还需根据外接电源及额定段导通电流来确定相应地限流电阻.
共阴极数码管地8个发光二极管地阴极(二极管负端)连接在一起.通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端.当某段驱动电路地输出端为高电平时,则该端所连接地字段导通并点亮,根据发光字段地不同组合可显示出各种数字或字符.此时,要求段驱动电路能提供额定地段导通电流,还需根据外接电源及额定段导通电流来确定相应地限流电阻.
要使数码管显示出相应地数字或字符,必须使段数据口输出相应地字形编码.字型码各位定义为:
数据线D0与a字段对应,D1与b字段对应……,依此类推.如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮.如要显示“0”,共阳极数码管地字型编码应为:
11000000B(即C0H);共阴极数码管地字型编码应为:
00111111B(即3FH).依此类推,可求得数码管字形编码如表3-5所示.
表3-5数码管字符表
显示数字
共阴顺序小数点暗
共阴逆序小数点暗
共阳顺序小数点亮
共阳顺序小数点暗
Dpgfedcba
16进制
abcdefgDp
16进制
0
00111111
3FH
11111100
FCH
40H
C0H
1
00000110
06H
01100000
60H
79H
F9H
2
01011011
5BH
11011010
DAH
24H
A4H
3
01001111
4FH
11110010
F2H
30H
B0H
4
01100110
66H
01100110
66H
19H
99H
5
01101101
6DH
10110110
B6H
12H
92H
6
01111101
7DH
10111110
BEH
02H
82H
7
00000111
07H
11100000
E0H
78H
F8H
8
01111111
7FH
11111110
FEH
00H
80H
9
01101111
6FH
11110110
F6H
10H
90H
显示地具体实施是通过编程将需要显示地字型码存放在程序存储器地固定区域中,构成显示字型码表.当要显示某字符时,通过查表指令获取该字符所对应地字型码.
3.5.2数码管显示电路
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
P2.0
P2.1P2.2
P2.3
图3-10四位八段数码管动态显示电路
图3-10为本次设计所用到地四位八段数码管动态显示,其中段选接到单片机地P0口,位选接到单片机地P2口地低四位.其中P0口也接地有上拉电阻,图中未标示出来,会在下面地总体电路中标示出来.采用地是动态显示方式.
3.6硬件电路总体设计
图3-11为本次设计地硬件总体设计图,其中利用K1,K2,K3处进行报警温度地设置,然后有DS18B20进行实时温度采集,并在数码管上同步显示,若采集到地温度达到或者超过预设地报警温度,则LED灯会发光报警,若低于该报警温度,则不会报警.
图3-11硬件电路总体设计图
4.软件设计方案
4.1主程序介绍
4.1.1主程序流程图
本次设计首先对程序进行初始化,然后打开报警温度设定开关,对报警温度进行设定,确认设定值后,DS18B20温度传感器进行温度采集并送入单片机中,单片机将传感器所检测到地温度同步显示在数码管上,并且与设置地报警温度进行比较,若达到或者超过报警温度时,LED灯发光报警,如果没有达到,则继续进行温度采集.
图4-1主程序流程图
4.1.2主流程地C语言程序
main()
{
ALERT=0。
LED=0。
flag=0。
sheding=30。
disdata=0xff。
//初始化端口
discan=0xff。
for(h=0。
h<4。
h++)//开机显示“8888”scan()。
{display[h]=8。
}
ow_reset()。
//开机先转换一次
write_byte(0xcc)。
//skipROM
write_byte(0x44)。
//发转换命令
for(h=0。
h<500。
h++)//开机显示“8888”两秒
{scan()。
}
display[0]=0。
display[1]=0。
display[2]=0。
display[3]=0。
flag2=0。
while
(1)
{
if(flag==0&&flag2>1)//温度显示界面
{
LED1=0。
if(display[1]+display[2]*10>=sheding)//比较
{
ALERT=1。
//报警
}
else
{
ALERT=0。
}
}
if(flag==0&&flag2>1)
{
read_temp()。
//读出温度数据
work_temp()。
//处理温度数据
ge=display[3]。
shi=display[2]。
}
if(K1==0)
{
flag2++。
//flag2=0时为初始界面flag2=1时为设定
if(flag2>1)
flag2=2。
if(flag==0)//flag=0时温度显示flag=1设定显示
flag=1。
elseif(flag==1)
flag=0。
LED=~LED。
key_delay(20)。
if(flag==1)
{
sheding=30。
ge=0。
shi=3。
//display[0]=ge。
//个位设定好地温度用于显示
//display[2]=shi。
//十位
}
}
if(flag==1)
{
LED1=1。
if(K2==0)//++
{
ge++。
if(ge>9)
{
ge=0。
shi++。
if(shi>9)
shi=0。
}
sheding=ge+shi*10。
key_delay(20)。
}
if(K3==0)//--
{
ge--。
if(ge<0)
{
ge=9。
shi--。
if(shi<0)
shi=9。
}
sheding=ge+shi*10。
key_delay(20)。
}
display[1]=ge。
//个位设定好地温度用于显示
display[2]=shi。
//十位
}
for(h=0。
h<500。
h++)//显示温度两秒
{
scan()。
}
}
}
4.2部分子程序
4.2.1DS18B20复位子程序
流程图如图4-2所示:
图4-2DS18B20复位子程序
DS18B20复位子地C语言程序如下:
ow_reset(void)
{
charpresence=1。
while(presence)
{
while(presence)
{
DQ=1。
_nop_()。
_nop_()。
DQ=0。
delay(50)。
//延时550毫秒
DQ=1。
delay(6)。
presence=DQ。
}
delay(45)。
presence=~DQ。
}
DQ=1。
}
4.2.2写DS18B20命令子程序
流程图如图4-3所示:
图4-3写DS18B20命令子程序
写DS18B20命令地C语言程序如下:
voidwrite_byte(ucharval)//向1-WIRE总线上写一字节
{
uchari。
for(i=8。
i>0。
i--)
{
DQ=1。
_nop_()。
_nop_()。
DQ=0。
_nop_()。
_nop_()。
_nop_()。
_nop_()。
_nop_()。
DQ=val&0x01。
//最低位移出
delay(6)。
val=val/2。
//右移1位
}
DQ=1。
delay
(1)。
}
4.2.3读温度子程序
读出温度子程序地主要功能是读出RAM中地9字节,在读出时需进行CRC校验,验有错时,不进行温度数据地改写.其程序流程图如图4-4所示
DS18B20地各个命令对时序地要求特别严格,所以必须按照所要求地时序才能达到预期地目地,同时,要注意读进来地是高位在后低位在前,共有12位数,小数4位,整数7位,还有一位符号位.
图4-4读温度子程序
读温度地C语言程序如下:
read_temp()
{
ow_reset()。
write_byte(0xcc)。
write_byte(0xbe)。
temp_data[0]=read_byte()。
temp_data[1]=read_byte()。
ow_reset()。
write_byte(0xcc)。
write_byte(0x44)。
}
4.2.4计算温度子程序
流程图如图4-5所示:
图4-5计算温度子程序
计算温度地C语言程序如下:
work_temp()
{
ucharn=0。
if(temp_data[1]>127)
{
temp_data[1]=(255-temp_data[1])。
temp_data[0]=(255-temp_data[0])。
n=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。
if(!
display[3]){display[3]=0x0a。
if(!
display[2]){display[2]=0x0a。
}}//最高位为0时不显示
if(n){display[3]=0x0b。
}//负温度是最高为显示“-”
}
4.2.5显示扫描过程子程序
流程图如图4-6所示:
图4-6显示扫描过程子程序
显示扫描地C语言程序如下:
scan()
{
chark。
for(k=0。
k<4。
k++)//4位LED扫描控制
{
disdata=dis_7[display[k]]。
if(k==1){DIN=0。
}//当K=1时,P0^7为低电平显示小数点
discan=scan_con[k]。
//列扫描
delay(30)。
discan=0xFF。
}
}
5.基于DS18B20地温度采集显示系统地调试
运行后,按下K1键,开始进入报警温度设置过程,按下K2则温度增加一度,按下K3则温度减少一度,刚开始调试时,由于接地LED报警灯是高电平点亮,程序一运行时,AT89C51给各个引脚都是高电平,所以LED灯一运行就会发光,违背了超过报警温度才发光地要求,所以在子程序中加上了一条开始时将LED所连引脚置0地程序.之后运行过程中又发现按下报警温度地设置键K1,K2,K3都不是很灵敏,有时按下地时间太短甚至会没有反应,经过与小组成员讨论,发现是由于按键没有进行消抖,在显示扫描子程序中加入了延时函数进行按键地消抖,这一问题也得到了解决.
图5-1温度实时显示且未超过报警温度25摄氏度时LED没有发光报警
图5-2温度实时显示且超过实时报警温度25摄氏度LED发光报警
图5-3实时显示负温度
6.收获和体会
在这一次地课程设计过程,我收获了很多,无论是在理论知识方面,还是理论联系实际地操作方面.因为已经一个学期没有学习单片机这门课程,很多知识不太清楚,加上以前地基础知识也不是很牢固,对于Proteus和Keil软件地使用也生疏了,所以刚开始拿到课题时感到很有难度,不禁对此次地课程设计感到非常紧张.刚开始做这一课题地时候感到难度很大,许多知识
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DS18B20 温度 采集 显示 系统 设计