基于单片机的温度采集系统的毕业设计.docx
- 文档编号:11585287
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:30
- 大小:926.22KB
基于单片机的温度采集系统的毕业设计.docx
《基于单片机的温度采集系统的毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度采集系统的毕业设计.docx(30页珍藏版)》请在冰豆网上搜索。
基于单片机的温度采集系统的毕业设计
基于单片机的温度采集系统的毕业设计
基于单片机的温度采集系统的设计
电子与信息工程学院电子信息工程专业200x级x班xxx
指导老师xxx
1绪论
随着社会的进步和工业技术的发展,人们越来越重视温度因素,许多产品对温度范围要求严格,而目前市场上普遍存在的温度检测仪器大都是单点测量,同时还有温度信息传递不及时、精度不够的缺点,不利于工业控制者根据温度变化及时做出决定。
在这样的形式下,开发一种能够同时测量多点,并且实时性高、精度高,能够综合处理多点温度信息的测量系统就很有必要。
本文主要介绍了一个基于STC89C52单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器DS18B20的数据采集过程。
对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
DS18B20与STC89C52结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
2系统总设计方案
2.1数字温度计设计方案论证
2.1.1方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。
而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。
2.1.2方案二
考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。
2.2系统总体框图
图2.3-1
2.3系统的功能
温度测量功能:
利用DS18B20数字温度传感器实现对温度进行准确的测量,使温度值显示到数码管上。
2.4本系统优点
2.4.1线路简单
DS18B20与单片机之间一根导线进行数据传输,不需要对数据进
行转换,接线简单。
2.4.2温度测量准确
DS18B20的温度分辨率为0.0625,所以对温度值可以进行准确的温度转换。
3主要硬件模块介绍
3.1STC单片机介绍
3.1.1STC单片机功能介绍
单片机是随着大规模集成电路的出现极其发展,将计算机的CPU,RAM,ROM,定时/计数器和多种I/O接口集成在一片芯片上,形成了芯片级的计算机,因此单片机早期的含义称为单片微型计算(singlechipmicrocomputer).它拥有优异的性价比、集成度高、体积小、可靠性高、控制功能强、低电压、低功耗的显著优点.主要应用于智能仪器仪表、工业检测控制、机电一体化等方面,并且取得了显著的成果.单片机应用系统可以分为:
(1)最小应用系统是指能维持单片机运行的最简单配置的系统。
这种系统成本低廉,结构简单,常构成一些简单的控制系统,如开关状态的输入/输出控制等。
片内ROM/EPROM的单片机,其最小应用系统即为配有晶振,复位电路,电源的单个单片机.片内无ROM/EPROM的单片机,其最小应用系统除了外部配置晶振,复位电路,电源外,还应外接EPROM或EEPROM作为程序存储器用.
(2)最小功耗应用系统是指为了保证正常运行,系统的功耗最小.(3)典型应用系统是指单片机要完成工业测控功能所必须的硬件结构系统。
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
STC89C52具以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
3.1.2STC89C52单片机引脚结构与功能
图3.1.2-1
VCC:
电源
GND:
地
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字。
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为STC89C52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效。
ALE/PROG:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:
外部程序存储器选通信号PSEN是外部程序存储器选通信号。
当STC89C52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
3.2系统模块
系统由单片机最小系统、显示电路、按键、18B20温度传感器、蜂鸣器报警电路组成。
3.2.1系统原理图
图3.2.1-1
3.2.2主控制器
晶振电路采用12MHZ,复位电路采用上电加按钮复位
图3.2.2-1晶振电路
图3.2.2-2复位电路
3.2.3显示电路
显示电路采用4位共阴极LED数码管,P0口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。
P2口的低四位作为数码管的位选端。
采用动态扫描的方式显示。
图3.2.3-1显示电路
3.2.4报警温度调整按键电路
本系统设计三个按键,一个用于选择设定,另外两个分别用于设置报警温度的加和减。
图3.2.4-1按键电路
3.2.5温度传感电路
图3.2.5-1温度传感电路
3.2.6报警电路
图3.2.6-1报警电路
3.3DS18B20数字温度传感器介绍
3.3.1特性介绍
•独特的单线接口仅需一个端口引脚进行通讯
•简单的多点分布应用
•无需外部器件
•可通过数据线供电
•零待机功耗
•测温范围-55℃~+125℃,以0.5℃递增。
华氏器件-67~+2570F,以0.90F递增
•温度以9或12位数字量读出
•温度数字量转换时间200ms(典型值)
•用户可定义的非易失性温度报警设置
•报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件
•应用包括温度控制、工业系统、消费品、温度计或任何热感测系统
说明:
DS1820数字温度计以9位或12位数字量的形式反映器件的温度值。
DS1820通过一个单线接口发送或接收信息,因此在中央微处理器和DS1820之间仅需一条连
接线(加上地线)。
用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。
因为每个DS1820都有一个独特的片序列号,所以多只DS1820可以同时连在一根单线总线上,
这样就可以把温度传感器放在许多不同的地方。
这一特性在HVAC环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。
3.3.2引脚介绍
3.3.3访问18B20的协议
通过单线总线端口访问DS1820的协议如下:
•初始化
•ROM操作命令
•存储器操作命令
•执行/数据
1初始化
通过单线总线的所有执行(处理)都从一个初始化序列开始。
初始化序列包括一个由总线控制器发出的复位脉冲和跟有其后由从机发出的存在脉冲。
存在脉冲让总线控制器知道DS1820在总线上且已准备好操作。
2ROM操作命令
一旦总线控制器探测到一个存在脉冲,它就可以发出5个ROM命令中的任一个。
所有ROM操作命令都8位长度。
下面是这些命令
ReadROM[33h]
这个命令允许总线控制器读到DS1820的8位系列编码、唯一的序列号和8位CRC码。
只有在总线上存在单只DS1820的时候才能使用这个命令。
如果总上有不止一个从机,当所有从机试图同时传送信号时就会发生数据冲突(漏极开路连在一起开成相与的效果)。
MatchROM[55h]
匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定的DS1820。
只有和64位ROM序列完全匹配的DS1820才能响应随后的存储器操作命令。
所有和64位ROM序列不匹配的从机都将等待复位脉冲。
这条命令在总线上有单个或多个器件时都可以使用。
SkipROM[CCh]
这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下右以节省时间。
如果总线上不止一个从机,在SkipROM命令之后跟着发一条读命令,由于多个从机同时传送信号,总线上就会发生数据冲突(漏极开路下拉效果相当于相与)。
SearchROM[F0h]
当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的64位ROM编码。
搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。
AlarmSearch[ECh]
这条命令的流程图和SearchROM相同。
然而,只有在最近一次测温后遇到符合报警条件的情况,DS1820才会响应这条命令。
报警条件定义为温度高于TH或低于TL。
只要DS1820不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。
3.3.4DS18B20命令设置
3.3.5DS18B20内部温度表现形式
1DS18B20用9位存贮温值度最高位为符号位,下图为18B20的温度存储方式。
负温度S=1正温度S=0如:
00AAH为+85℃,0032H为25FF92H为55℃
2DS18B20用12位存贮温值度最高位为符号位,下图为18B20的温度存储方式。
负温度S=1正温度S=0如:
0550H为+85℃,0191H为25.0625℃,FC90H为-55℃
3DS18B20温度转换形式(12位存储形式)
实际温度值
数字输出(二进制)
数字输出(十六进制)
+125℃
0000011111010000
07D0H
+85℃
0000010101010000
0550H
+25.0625℃
0000000110010001
0191H
+10.125℃
0000000010100010
00A2H
+0.5℃
0000000000001000
0008H
0℃
0000000000000000
0000H
-0.5℃
1111111111111000
FFF8H
-10.125℃
1111111101011110
FF5EH
-25.0625℃
1111111001101111
FE6EH
-55℃
1111110010010000
FC90H
418B20时序图及相应的软件设计
4.1复位时序
voidds_reset()
{
uinti;
ds=0;//数据时钟线拉低
i=103;//延时480us~960us
while(i>0)i--;
ds=1;//拉高数据时钟线
i=4;//延时15us~60us
while(i>0)i--;
while(ds);//检测18b20的存在
while(~ds);
i=30;
while(i>0)i--;}
4.2读/写时序
//功能:
单片机向18b20写一个字节//
voidds_write_byte(uchardate)
{
uinti,j;
bita;
for(j=8;j>0;j--)
{
a=date&0x01;//先写低位
date=date>>1;
if(a)//要写的位为1
{
ds=0;//数据时钟线拉低
i++;i++;//延时15us之内
ds=1;//ds拉低15us之内必须把要写的数据1放到数据时钟线上
i=8;//延时大于1us
while(i>0)i--;
}
else//写0
{
ds=0;//数据时钟线拉低
i=8;
while(i>0)i--;//延时大于15us,15us之后18b20对数据采集
ds=1;//数据时钟线拉高释放数据线
i++;i++;//延时
}
}
}
//功能:
单片机读一位
//========================//
bitds_read_bit()
{
uinti;
bitdat;
ds=0;//数据时钟线拉低
i++;//延时大于1us
ds=1;//释放数据线
i++;//延时小于15us
dat=ds;//读数据
i=8;//延时
while(i>0)i--;
returndat;
}
//功能:
单片机读一个字节数据
uchards_read_byte()
{
uchari,j,date;
date=0;
for(i=8;i>0;i--)
{
j=ds_read_bit();
date=(j<<7)|(date>>1);//先读低位数据
}
returndate;
}
5程序框图及C语言设计
5.1温度采集系统流程图
见图5-1
图5-1温度采集系统
5.2读取温度流程图
见图5-2
5.3温度显示流程图
见图5-3
图5-2读取温度图
图5-3温度显示
5.4温度设置流程图
见图5-4
图5-4温度设置
5.5温度采集系统C语言设计
#include
#include
#include"18b20.h"
#defineuintunsignedint
#defineucharunsignedchar
ucharT_H=40,T_L=0;
ucharflag1,flag2,flag3;
ucharflag;
floattem;//定义一个温度变量存储温度
ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//不带小数点0~9编码
ucharcodetab1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点的0~9编码
sbitwei1=P2^0;//数码管位选定义
sbitwei2=P2^1;//数码管位选定义
sbitwei3=P2^2;//数码管位选定义
sbitwei4=P2^3;//数码管位选定义
sbitkey1=P2^4;
sbitkey2=P2^5;
sbitkey3=P2^6;
sbitbeep=P1^0;
sbitds=P2^7;//18b20数据时钟线
//=======================//
//功能:
18b20复位函数
//=======================//
voidds_reset()
{
uinti;
ds=0;//数据时钟线拉低
i=103;//延时480us~960us
while(i>0)i--;
ds=1;//拉高数据时钟线
i=4;//延时15us~60us
while(i>0)i--;
while(ds);//检测18b20的存在
while(~ds);
i=30;
while(i>0)i--;
}
//=========================//
//功能:
单片机向18b20写一个字节
//========================//
voidds_write_byte(uchardate)
{
uinti,j;
bita;
for(j=8;j>0;j--)
{
a=date&0x01;//先写低位
date=date>>1;
if(a)//要写的位为1
{
ds=0;//数据时钟线拉低
i++;i++;//延时15us之内
ds=1;//ds拉低15us之内必须把要写的数据1放到数据时钟线上
i=8;//延时大于1us
while(i>0)i--;
}
else//写0
{
ds=0;//数据时钟线拉低
i=8;
while(i>0)i--;//延时大于15us,15us之后18b20对数据采集
ds=1;//数据时钟线拉高释放数据线
i++;i++;//延时
}
}
}
//========================//
//功能:
单片机读一位
//========================//
bitds_read_bit()
{
uinti;
bitdat;
ds=0;//数据时钟线拉低
i++;//延时大于1us
ds=1;//释放数据线
i++;//延时小于15us
dat=ds;//读数据
i=8;//延时
while(i>0)i--;
returndat;
}
//====================//
//功能:
单片机读一个字节数据
//====================//
uchards_read_byte()
{
uchari,j,date;
date=0;
for(i=8;i>0;i--)
{
j=ds_read_bit();
date=(j<<7)|(date>>1);//先读低位数据
}
returndate;
}
//====================//
//功能:
启动18b20转换
//=====================//
voidinit_18b20()
{
ds_reset();//18b20复位
ds_write_byte(0xcc);//跳过读ROM
ds_write_byte(0x44);//启动温度转换
}
//=======================//
//功能:
读温度
//=======================//
floatget_temp()
{
ucharn,m,m1;
uinttemp;
floatT;
ds_reset();//18b20复位
ds_write_byte(0xcc);//跳过ROM
ds_write_byte(0xbe);//读温度暂存器
m=ds_read_byte();//读低字节
n=ds_read_byte();//读高字节
m1=n&0xf8;//判断温度的符号位
if(m1==0x00)//温度为正
{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 温度 采集 系统 毕业设计