基于STC89C52和DS18B20的温度检测装置设计.docx

上传人:b****3 文档编号:4229703 上传时间:2022-11-28 格式:DOCX 页数:40 大小:768.91KB
下载 相关 举报
基于STC89C52和DS18B20的温度检测装置设计.docx_第1页
第1页 / 共40页
基于STC89C52和DS18B20的温度检测装置设计.docx_第2页
第2页 / 共40页
基于STC89C52和DS18B20的温度检测装置设计.docx_第3页
第3页 / 共40页
基于STC89C52和DS18B20的温度检测装置设计.docx_第4页
第4页 / 共40页
基于STC89C52和DS18B20的温度检测装置设计.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

基于STC89C52和DS18B20的温度检测装置设计.docx

《基于STC89C52和DS18B20的温度检测装置设计.docx》由会员分享,可在线阅读,更多相关《基于STC89C52和DS18B20的温度检测装置设计.docx(40页珍藏版)》请在冰豆网上搜索。

基于STC89C52和DS18B20的温度检测装置设计.docx

基于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对一次按键动作只确认一次按键,必须消除抖动的影响。

按键的消抖,通常有软件,硬件两种消除方法。

     这种方法只适用于键的数目较少的情况。

  软件消抖:

如果按键较多,硬件消抖将无法胜任,常采用软件消抖。

通常采用软件延时的方法:

在第一次检测到有

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1