基于STC89C52和DS18B20的温度检测装置设计.docx
- 文档编号:4229703
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:40
- 大小:768.91KB
基于STC89C52和DS18B20的温度检测装置设计.docx
《基于STC89C52和DS18B20的温度检测装置设计.docx》由会员分享,可在线阅读,更多相关《基于STC89C52和DS18B20的温度检测装置设计.docx(40页珍藏版)》请在冰豆网上搜索。
基于STC89C52和DS18B20的温度检测装置设计
《单片机应用系统设计》课程设计任务书
一、课题名称
《基于STC89C52和DS18B20的温度检测装置》
二、设计任务
1、.功能要求
基本任务:
(1)采用STC89C52单片机(可选用其他89C51系列的单片机)和DS18B20温度传感器,1602字符液晶设计;
(2)根据数据手册编程读取DS18B20,用1602字符液晶显示温度
(3)通过4个键实现温度上限和下限设置。
发挥任务:
实现一个时钟,显示时,分秒,并可以设置时间。
2.、设计要求
(1)熟悉STC89C52单片机及其开发环境;熟悉汇编语言或C51程序设计;
(2)掌握STC89C52单片机最小系统、按键电路、字符液晶显示电路的设计;掌握DS18B20编程方法,学会看数据手册;掌握1602字符液晶编程方法;掌握单片机时钟中断的编程方法;熟悉项目设计流程;
(3)熟悉硬件软件调试的方法;
(4)设计报告中详细写出硬件电路设计方案、画出软件流程图并总结调试中遇到的问题及解决方法。
三、设计报告撰写规范
单片微机应用系统设计总结报告正文,主要含以下内容(硬件、软件各部分内容也可组合起来进行撰写说明):
1.系统总体设计方案(画出系统原理框图、方案的论证与比较等内容);
2.硬件系统分析与设计(各模块或单元电路的设计、工作原理阐述、参数计算、元器件选择、完整的系统电路图、系统所需的元器件清单。
等内容);
3.软件系统分析与设计(各功能模块的程序设计流程图与说明、软件系统设计、软件抗干扰措施、完整的程序等内容);
4.系统仿真调试与参数测量(使用仪器仪表、故障排除、电路硬件和软件调试的方法和技巧、指标测试的参数和波形、测量误差分析);
5.总结(本课题核心内容及使用价值、电路设计、软件设计的特点和选择方案的优缺点、改进方向和意见等);
6.按统一格式列出主要参考文献。
《基于STC89C52和DS18B20的温度检测装置》
课程设计总结报告
一、系统总体方案
1.系统原理框图
2.方案工作过程的论述
本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器DS18B20,单片机STC89C52,LED1602字符液晶一个,电容电阻若干。
传感器采用美国DALLAS半导体公司生产的智能温度传感器DS18B20,支持“一线总线”接口,测量温度范围-55°C~+125°C。
在-10~+85°C范围内,精度为±0.5°C。
最高分辩率可达0.0625。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
主控制器即单片机部分,用于存储程序和控制电路;LED显示部分是用1602字符液晶显示温度;传感器部分,即温度传感器,用来采集温度,进行温度转换;复位部分,即复位电路。
测量的总过程是,传感器采集到外部环境的温度,并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示。
本设计能完成的温度测量范围是-55°C~+128°C,精度为0.1°C,支持温度正负提示,软件预设上限温度30°C,下限温度20°C,并支持硬件手动配置温度上下限,通过4个键实现温度上限和下限设置,超过此上下限即实现报警功能。
附加功能:
实现一个时钟,显示时、分、秒,并可以设置时间。
3.整体设计电路图
4.单片机的造型
二、单片机概述
根据老师提供的元器件清单,选择采用STC89C52单片机进行使用。
STC89C52介绍:
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
主要特点:
1.8K字节程序存储空间;2.512字节数据存储空间;3.内带2K字节EEPROM存储空间;4.可直接使用串口下载;
主要参数:
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.[2]2.工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)3.工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4.用户应用程序空间为8K字节5.片上集成512字节RAM6.通用I/O口(32个),复位后为:
P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片8.具有EEPROM功能9.共3个16位定时器/计数器。
即定时器T0、T1、T210.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒11.通用异步串行口(UART),还可用定时器软件实现多个UART12.工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)13.PDIP封装
P1口各个引脚的第二功能介绍:
P3口的第二功能介绍:
单片机的最小系统中还包含了复位电路和晶振电路。
晶振电路:
复位电路:
设计过程的注意点:
1.考虑对速度的要求。
单片机的运行速度首先看时钟频率,指令集,几个时钟为一个机器周期。
在选用单片机时,要根据需要选择速度,不要片面追求高速,单片机的稳定性、抗干扰性的参数基本上跟速度成反比,另外速度越快功效也越大。
2.考虑定时器/计数器的功能。
大部分单片机提供了2—3个定时器/计数器,有些定时/计数器还具有输入捕获、输出比较和PWM(脉冲宽度调制)功能,利用这些模块不仅可以简化软件设计,而且能少占用CPU的资源。
现在还有不少单片机提供了看门狗定时器(WDT),当单片机“死机”后可以自动复位。
选用时可根据自己的需要和编程要求进行选择。
3.考虑I/O口的驱动能力。
I/O口的数量和功能是选用单片机时首先要考虑的问题之一,根据实际需要确定数量,I/O多余不仅芯片的体积增大,也增加了成本。
驱动电流大的单片机可以简化外围电路。
51系列的单片机下拉(输出低电平)时驱动电流大,但上拉(输出高电平)时驱动电流很小。
4.考虑工作电压与功耗的要求。
单片机的工作电压最低可以达到1.8V,最高为6V,常见的是3V和5V。
单片机的功耗参数主要是指正常模式、空闲模式、掉电模式下的工作电流,用电池供电的系统要选用电流小的产品,同时要考虑是否要用到单片机的掉电模式,如果要用的话必须选择有相应功能的单片机。
5.单片机的串行接口。
单片机常见的串行接口有:
标准UART接口、TWI通讯接口、增强型UART接口、I2C总线接口、CAN总线接口、SPI接口、USB接口等。
大部分单片机都提供了UART接口,也有部分单片机没有串行接口。
三、温度检测电路
根据所提供的材料以及对电路的分析,决定采用DS18B20作为温度检测部分
特点:
DS18B20是DALLAS公司最新推出的单线数字温度传感器,新的“一线器件”体积更小、适用电压更宽、更经济。
Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20、DS1822“一线总线”数字化温度传感器,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS1822的精度较差为±2°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DS18B20、DS1822的特性DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20的性能是新一代产品中最好的!
1).只要求一个端口即可实现通信;
2).在DS18B20中的每个器件上都有独一无二的序列号;
3).实际应用中不需要外部任何元器件即可实现测温;
4).测量温度范围在-55。
C到+125。
C之间;
5).数字温度计的分辨率用户可以从9位到12位选择;
6).内部有温度上、下限告警设置;
温度测量电路的框图及其原理:
低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器冲输入。
计数器1和温度寄存器被预置在5℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
温度采集读写时序图:
DS18B20电路图:
读出温度子程序 读出温度子程序的主要功能是读出RAM中的9字节。
在读出时须进行CRC校验,校验有错时不进行温度数据的改写。
流程图如下:
温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令。
当采用12位分辨率时,转换时间约为750ms。
在本程序设计中,采用1s显示程序延时法等待转换的完成。
流程图如下:
DS18B20温度采集、转换程序:
#include
#include"intrins.h"
#include"DS18B20.H"
#defineucharunsignedchar
#defineuintunsignedint
sbitDS=P1^0;//定义接口
uinttemp;//温度变量
ucharflag1;//接收标志位
externdelay_nms(uintnms);
//***********************************
//功能:
串行口初始化,波特率9600,方式1
voidInit_Com(void)
{
TMOD=0x20;//设定T1定时器的工作方式2
PCON=0x00;//波特率不加倍
TH1=0xFd;//T1定时器装初值
TL1=0xFd;
TR1=1;//启动T1定时器
REN=1;//允许接受串行口
SM0=0;//设定串口工作方式1即8位异步通讯
SM1=1;
tmpchange();//读一次温度,防止运行程序时读出85摄氏度
delay_nms(400);//85度不显示(用延时跳过)
}
//***********************************
//DS18B20复位,初始化函数
voiddsreset(void)
{
uinti;
DS=0;//数据线拉到低电平0
i=103;//延时850us(该时间范围可以在480~960us)
while(i>0)
i--;
DS=1;//数据线拉到高电平1
i=4;//延时等待(如果初始化成功则在15—60ms内产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在)
while(i>0)
i--;
}
//***********************************
//读1位数据函数
bittmpreadbit(void)
{
uinti;
bitdat;//设置一位数据
DS=0;
i++;//i++起延时作用
DS=1;
i++;i++;
dat=DS;
i=8;while(i>0)i--;
return(dat);
}
//***********************************
//读1字节函数
uchartmpread(void)
{
uchari,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
//***********************************
//向DS18B20写一个字节数据函数
voidtmpwritebyte(uchardat)
{
uinti;
ucharj;
bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)//写1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0;//写0
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
voidtmpchange(void)//DS18B20开始获取数据并转换
{
dsreset();
delay_nms
(1);
tmpwritebyte(0xcc);//写跳过读ROM指令
tmpwritebyte(0x44);//写温度转换指令
}
voidtmp()//读取寄存器中存储的温度数据
{
floattt;
uchara,b;
dsreset();
delay_nms
(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();//读低8位
b=tmpread();//读高8位
temp=b;
temp<<=8;//两个字节组合为1个字
temp=temp|a;
tt=temp*0.0625;//温度在寄存器中是12位,分辨率是0.0625
temp=tt*10+0.5;//乘以10表示小数点后只取1位,加0.5是四折五入
}
四.显示电路
一般显示电路概述、用到的电路图、硬件电路注意的问题、程序流程、编程注意点…
根据所提供的材料以及对电路的分析,决定采用LCD1602作为显示部分
实物图如下:
LCD1602的介绍:
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
根据电路的要求,分析之后各个引脚的所接位置:
第1脚:
VSS为电源地
第2脚:
VCC接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,使用时可以通过一个103电位器调整对比度。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
在电路中接P2^6。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
根据电路程序的分析,直接接地。
第6脚:
E(或EN)端为使能(enable)端,高电平
(1)时读取信息,负跳变时执行指令。
此处接到P2^5。
第7~14脚:
D0~D7为8位双向数据端。
从P0^0到P0^7接口。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
相应所得到的电路图:
在显示电路焊接过程中,硬件需要注意的问题:
在硬件焊接一开始,首先要考虑好元器件的安放位置,使得整体的布局尽可能的达到美观,由于lcd1602有16个引脚,必须要了解各个引脚的具体功能,记住各个引脚所接的对应单片机的位置。
尤其是4,5,6这三个位置的引脚,对于lcd1602具有较为重要的作用,因而必须仔细焊接,避免焊接错误,或者是看错。
另外,在焊接的时候也要注意小心焊接,避免烧坏显示,导致显示出现问题。
程序流程图:
编写程序:
#include"reg52.h"
#include"intrins.h"
#include"1602.h"
#defineucharunsignedchar
#defineuintunsignedint
//*****************************************************
//液晶位定义
sbitLCD_EN=P2^6;
sbitRS=P2^7;
//*****************************************************
//一毫秒延时函数
voiddelay_nms(uintnms)
{
uinti,j;
for(i=nms;i>0;i--)
{
for(j=90;j>0;j--)
{
_nop_();
_nop_();
_nop_();
}
}
}
//****************************************************
//函数功能:
向1602写入指令(选择位置)
voidwrite_com(ucharcom)
{
RS=0;//选择写命令模式(RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
)
P0=com;//将要写的命令字送到数据总线上
LCD_EN=0;//E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令
delay_nms
(1);//稍作延时以待数据稳定
LCD_EN=1;//使能端给一个高脉冲
delay_nms
(1);//稍作延时
LCD_EN=0;//将使能端置0以完成高脉冲
}
//****************************************************
//函数功能:
向1602写入数据
voidwrite_date(uchardate)
{
RS=1;//选择写命令模式(高电平时选择数据寄存器)
LCD_EN=0;
P0=date;
delay_nms
(1);
LCD_EN=1;
delay_nms
(1);
LCD_EN=0;
}
//****************************************************
//定行定列显示数组
voidwrite_stringtable(ucharh,ucharl,uchar*s)
{
if(h==0)//确定第几行
{
h=0x80;//第一行的第一个地址
}
else
{
h=0xc0;//第二行的第一个地址
}
h=h+l;//行(列)加?
?
?
write_com(h);//写一个字符地址
while(*s)//显示字符串
{
write_date(*s);
s++;
}
}
//****************************************************
//1602初始化
voidLCD_Initial()
{
write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
delay_nms
(1);
write_com(0x0c);//设置开显示,不显示光标
delay_nms
(1);
write_com(0x06);//写一个字符地址指针自动加1
delay_nms
(1);
write_com(0x01);//显示清0,数据指针清0
delay_nms
(1);
}
5、键盘电路
键盘扫描概述:
首先,确定键盘编码方案:
采用编码键盘或非编码键盘。
随后,确定键盘工作方式:
采用中断或查询方式输入键操作信息。
然后,设计硬件电路。
非编码键盘系统中,键闭合和键释放的信息的获取,键抖动的消除,键值查找及一些保护措施的实施等任务,均由软件来完成。
1.监测有无键按下;键的闭合与否,反映在电压上就是呈现出高电平或低电平,所以通过电平的高低状态的检测,便可确认按键按下与否。
2.判断是哪个键按下。
一.编程扫描方式:
当单片机空闲时,才调用键盘扫描子程序,反复的扫描键盘,等待用户从键盘上输入命令或数据,来响应键盘的输入请求。
二.定时扫描工作方式:
单片机对键盘的扫描也可用定时扫描方式,即每隔一定的时间对键盘扫描一次。
三.中断工作方式:
只有在键盘有键按下时,才执行键盘扫描程序并执行该按键功能程序,如果无键按下,单片机将不理睬键盘
3.完成键处理任务。
(二)从电路或软件的角度应解决的问题
1.消除抖动影响。
键盘按键所用开关为机械弹性开关,利用了机械触点的合、断作用。
由于机械触点的的弹性作用,一个按键开关在闭合和断开的瞬间均有一连串的抖动、
抖动时间的长短由按键的机械特性决定,一般为5~10ms,这是一个很重要的参数。
抖动过程引起电平信号的波动,有可能令CPU误解为多次按键操作,从而引起误处理。
为了确保CPU对一次按键动作只确认一次按键,必须消除抖动的影响。
按键的消抖,通常有软件,硬件两种消除方法。
这种方法只适用于键的数目较少的情况。
软件消抖:
如果按键较多,硬件消抖将无法胜任,常采用软件消抖。
通常采用软件延时的方法:
在第一次检测到有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STC89C52 DS18B20 温度 检测 装置 设计