温度检测系统设计说明书.docx
- 文档编号:3435836
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:22
- 大小:216.09KB
温度检测系统设计说明书.docx
《温度检测系统设计说明书.docx》由会员分享,可在线阅读,更多相关《温度检测系统设计说明书.docx(22页珍藏版)》请在冰豆网上搜索。
温度检测系统设计说明书
单片机课程设计说明书
题目:
温度检测系统设计
系部:
专业:
班级:
学生姓名:
学号:
指导教师:
年月日
设计任务与要求
设计任务
设计一个温度检测系统。
设计要求
(1)用温度传感器18B20测环境温度,用LCD1602显示测量结果。
(2)用PROTEUS仿真。
(3)焊接电路板并调试运行。
设计方案
总体设计方案采用STC89C52RC单片机作控制器,温度传感器选用DS18B20来设计数字温度计。
主控制器由单片机STC89C52RC实现,测温电路由温度传感器DS18B20实现,显示电路由LCD1602液晶显示器直读显示。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。
该设计控制器使用单片机STC89C52RC,测温传感器使用DS18B20,实现温度显示,能准确达到以上要求。
如图一所示。
图一总体设计方案
硬件电路设计
3.1最小系统电路
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统,对于51系列单片机来说,最小系统包括:
单片机、时钟电路、复位电路。
如图二所示:
图二最小系统电路
3.1.1时钟电路
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。
时钟可以由内部方式产生或外部方式产生。
在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。
定时元件通常采用石英晶体和电容组成的并联谐振回路。
晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。
外部方式的时钟,RXD接地,TXD接外部振荡器。
对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。
片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。
如图三所示:
图三时钟电路
3.1.2复位及复位电路
复位是单片机的初始化操作。
其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。
RST引脚是复位信号的输入端。
复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。
若使用颇率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。
整个复位电路包括芯片内、外两部分。
外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。
复位操作有上电自动复位相按键手动复位两种方式。
复位电路如图四所示:
图四复位电路
3.2温度采集模块
3.2.1温度传感器的选择
DS18B20是常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理如图3所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
3.2.2DS18B20管脚功能及接线方法
管脚功能:
GND为电源地、DQ为数字信号输入/输出端、VDD为外接供电电源输入端(在寄生电源接线方式时接地)
接线方法:
面对着平的那一面,左负右正,一旦接反就会立刻发热,有可能烧毁!
同时,接反也是导致该传感器总是显示85℃的原因。
实际操作中将正负反接,传感器立即发热,液晶屏不能显示读数,正负接好后显示85℃。
另外,如果使用51单片机的话,那么中间那个引脚必须接上4.7K—10K的上拉电阻,否则,由于高电平不能正常输入/输出,要么通电后立即显示85℃,要么用几个月后温度在85℃与正常值上乱跳。
DS18B20管脚如图五所示。
图五DS18B20管脚
DS18B20与单片机的连接电路,如图六所示。
图六DS18B20与单片机的连接电路
3.3显示模块
3.3.1LCD的选择
LCD是一种工业型字符液晶,它能够显示32个字符(16列×2行),工作电压为3.3V或5V,对比度可自行调节,LCD的内部内部含有复位电路,用来提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能。
由于LCD1602功耗低、体积小、显示多样,常用在微型仪表和低功耗应用中。
市面上字符液晶绝大多数是基于HD44780液晶芯片,LCD1602控制原理也基于HD44780。
LCD1602采用标准14脚(无背光)或16脚(有背光)接口。
3.3.2LCD1602显示器的管脚功能
LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明
如下表一所示。
表一LCD1602显示器引脚说明
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
图七LCD1602管脚图
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
液晶与单片机的连接电路如图八所示。
图八液晶与单片机的连接电路
3.4硬件总体仿真图
本设计大体可分为三个部分,即CPU处理模块、温度采集模块、显示模块。
CPU处理模块采用单片机STC89C52RC,包括时钟电路、复位电路;温度采集模块采用温度传感器DS18B20进行温度采集,通过P3.6管脚发送到CPU进行处理;显示模块采用16管脚的LCD1602,数据通过单片机的P2口传输到LCD1602,最终LCD1602将温度显示出来。
如图九所示。
图九硬件总体仿真图
主要参数计算与分析
DS18B20的主要参数
(1)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
(3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
(4)工作电源:
3.0~5.5V/DC(可以数据线寄生电源)
(5)在使用中不需要任何外围元件
(6)测量结果以9~12位数字量方式串行传送
(7)不锈钢保护管直径Φ6
(8)适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温
(9)标准安装螺纹M10X1,M12X1.5,G1/2"任选
(10)PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
STC89C52RC的主要参数
(1)增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.[2]?
(2)工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
(3)工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
(4)用户应用程序空间为8K字节
(5)片上集成512字节RAM
(6)通用I/O口(32个),复位后为:
P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片
(8)具有EEPROM功能
(9)具有看门狗功能
(10)共3个16位定时器/计数器。
即定时器T0、T1、T2
(11)外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒
(12)通用异步串行口(UART),还可用定时器软件实现多个UART
(13)工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
LCD1602的主要参数
显示容量:
16×2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×4.35(W×H)mm
1软件设计
1.1主程序流程图
图十主程序流程图
1.2温度测量系统各子模块
5.2.1DS18B20读取温度部分
读温度值模块需要调用4个子程序,分别为:
DS18B20初始化子程序:
让单片机知道DS18B20在总线上且已准备好操作
DS18B20写字节子程序:
对DS18B20发出命令
DS18B20读字节子程序:
读取DS18B20存储器的数据
延时子程序:
对DS18B20操作时的时序控制
读温度值模块流程,如图十一所示:
图十一读温度值模块流程
DS18B20初始化子程序流程图,如图十二所示:
图十二DS18B20初始化子程序流程
本系统中液晶显示器初始化程序流程,如图十三所示:
图十三液晶显示器初始化程序流程
2心得体会
经过两周时间的努力,基于单片机的简易温度系统设计基本完成。
但设计中的不足之处仍然存在。
这次设计是我第一次设计电路,并用Proteus实现了仿真。
在这过程中,我对电路设计,单片机的使用等都有了新的认识。
通过这次设计学会了Proteus和KeilC51软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,积累了不少经验。
基于单片机的简易温度系统设计使用性强、结构简单、成本低、外接元件少。
在实际应用工作应能好,测量温度准确,精度高。
系统功能、指标达到了课题的预期要求、系统在硬件设计上充分考虑了可扩展性,经过一定的改造,可以增加功能。
本文设计主要实现了简易温度测量的功能,详细说明了从原理图的设计、电路图的仿真再到软件的调试。
通过本次设计,我对单片机这门课有了进一步的了解。
无论是在硬件连接方面还是在软件编程方面。
本次设计采用了STC89C52RC单片机芯片,以前在学单片机课程时只是对其理论知识有了初步的理解。
通过这次设计,对它的工作原理有了更深的理解。
在调试过程中遇到很多问题,硬件上的理论知识学得不够扎实,对电路的仿真方面也不够熟练。
总之这次电路的设计和仿真,基本上达到了设计的功能要求。
在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。
参考文献
[1]单片机原理及应用.张兰红,邹华主编.机械工业出版社,2016.
[2]数字电子技术基础(第5版).阎石编.高等教育出版社,2006.
[3]模拟电子技术基础(第五版).童诗白编.高等教育出版社,2006.
[4]电路(第5版).邱关源编.高等教育出版社,2006.
[5]电子技术课程设计指导.彭介华编.高等教育出版社,2005年出版.
[6]电子技术基础实验-电子电路实验、设计、仿真.陈大钦主编.高等教育出版社,2002年出版.
附录
实物图
元件清单
温度检测单机用元器件明细表
名称
封装
型号
参数
数量
瓷片电容
直插
30PF
2
石英晶体
直插
11.0592MHZ
1
电阻
直插
1/4W
10K
1
电解电容
直插
22UF/16V
1
CPU
双列直插
STC89C52RC
HD
1
CPU座
双列直插
DIP-40
1
电阻
直插
1/4W
4.7K
1
温度传感器
直插
DS18B20
1
电位器
直插
3296W-103
10K
1
液晶显示器
LCD1602
1
1P杜邦线彩色
母对母两头插好杜邦头
孔对孔40根一排
单根长度20cm
30针
排针
直插
脚距2.54高11
1X40单排插针
30线
最小系统板
1
洞洞板
9X7CM
单面
1
2.1C语言程序
#include"reg51.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable1[]={""};//欢迎显示
ucharcodetable2[]={""};//欢迎显示
ucharcodestr1[]={"Temperature"};
ucharcodestr2[]={""};
//************管脚定义************************
sbitlcd_rs=P3^0;//液晶数据命令选择端
sbitlcd_en=P3^1;//液晶使能
sbitDQ=P3^6;//液晶使能
//************参数定义************************
uinttvalue;//温度值
uchartflag;//温度正负标志
uchardatadisdata[5];
//************子函数定义************************
voiddelay(uintz);//delay延时子程序
voidinit_lcd();//LCD1602初始化函数
voidwrite_com(ucharcom);//LCD1602写指令函数
voidwrite_data(uchardate);//LCD1602写数据函数
voidlcd1602_display(uchar*q,uchar*p);//LCD1602显示函数
voidwelcome_1();//LCD1602显示欢迎函数1
voiddelay_DS18B20(uinti);//delay_DS18B20函数
voidInit_DS18B20_display();//DS18B20初始化显示
voidInit_DS18B20();//DS18B20初始化
ucharReadOneByte();//DS18B20读一字节
voidWriteOneByte(uchardat);//DS18B20写一字节
Read_Temperature();//DS18B20读取温度值并转换
voidDS18B20_display();//DS18B20温度显示
//************主函数************************
voidmain()
{
welcome_1();
Init_DS18B20_display();
while
(1)
{
Read_Temperature();
DS18B20_display();
}
}
//************delay延时子程序************************
voiddelay(uintz)
{
uintx,y;
for(x=0;x for(y=0;y<114;y++); } //************LCD1602初始化函数************************ voidinit_lcd() { write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口 write_com(0x08);//写一个字符后地址指针加1 write_com(0x01);//显示清零,数据指针清零 write_com(0x06);//写一个字符后地址指针加1 write_com(0x0c);//关显示,光标不显示不闪烁 } //************LCD1602写指令函数************************ voidwrite_com(ucharcom) { delay(5); lcd_rs=0;//选择写指令 lcd_en=0;//将使能端置0 P2=com;//将要写的命令送到数据总线上 delay(5);//延时5ms,待数据稳定 lcd_en=1;//由于初始化已将lcd_en置为0,使能端给一个高脉冲, delay(5);//延时5ms,待数据稳定 lcd_en=0;//将使能端置0以完成脉冲 } //************LCD1602写数据函数************************ voidwrite_data(uchardate) { delay(5); lcd_rs=1;//选择写数据 lcd_en=0;//将使能端置0 P2=date;//将要写的数据送到数据总线上 delay(5);//延时5ms,待数据稳定 lcd_en=1;//由于初始化已将lcd_en置为0,使能端给一个高脉冲, delay(5);//延时5ms,待数据稳定 lcd_en=0;//将使能端置0以完成脉冲 } //************LCD1602显示函数****************** voidlcd1602_display(uchar*q,uchar*p) { write_com(0x80);//现将数据指针定位到第一行第一个字处 while(*q! ='\0') { write_data(*q); q++; delay (1); } write_com(0xc0);//现将数据指针定位到第二行第一个字处 while(*p! ='\0') { write_data(*p); p++; delay (1); } } //************LCD1602显示欢迎函数1****************** voidwelcome_1() { init_lcd(); lcd1602_display(table1,table2); delay(300); } //************DS18B20初始化显示************** voidInit_DS18B20_display() { init_lcd(); lcd1602_display(str1,str2); } //************LCD1602显示函数****************** voiddelay_DS18B20(uinti) { while(i--); } //************DS18B20初始化****************** voidInit_DS18B20() { DQ=1;//DQ复位 delay_DS18B20(4);//延时 DQ=0;//DQ拉低 delay_DS18B20(100); DQ=1;//拉高 delay_DS18B20(40); } //************DS18B20读一字节****************** ucharReadOneByte() { uchari,dat=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ)dat|=0x80; delay_DS18B20(10); } return(dat); } //************DS18B20写一字节****************** voidWriteOneByte(uchardat) { uchari; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; delay_DS18B20(10); DQ=1; dat>>=1; } } //************DS18B20读取温度值并转换****************** Read_Temperature() { uchara,b; Init_DS18B20(); WriteOneByte(0xcc);//跳过读序列号 WriteOneByte(0x44);//启动温度转换 Init_DS18B20(); WriteOneByte(0xcc);//跳过读序列号 WriteOneByte(0xbe);//读取温度 a=ReadOneByte(); b=ReadOneByte(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0xfff) tflag=0; else { tvalue=~tvalue+1; tflag=1; } tvalue=tvalue*(0.625)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 检测 系统 设计 说明书