基于单片机智能温控系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告设计名称基于单片机的智能温控系统的设计与实现
一、概述
随着嵌入式技术、计算机技术、通信技术的不断发展与成熟。控制系统以其直观、方便、准确、适用广泛而被越来越广泛地应用于工业过程、空调系统、智能楼宇等。恒温控制系统,控制对象是温度。温度控制在日常生活及工作领域应用的相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制,而以往温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。针对此问题,本系统设计的目的是实现一种可连续高精度调温的温度控制系统,它应用广泛,功能强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。
本项目设计是对温度进行实时监测与控制,设计的温度控制系统实现了基本的温度控制功能:被控温度围可以调整,初始围25<=T<=35。如果被测温度在25度到35度之间,则既不加热,又不报警;如果被测温度小于25度,则既加热,又报警;如果被测温度大于35度,则报警,不加热。
数码管显示温度,温度精确到整数。
二、方案设计
采用单片机+单总线DS18B20的方案,其中单片机采用51兼容系列
三、详细硬件设计及原件介绍
3.1 单片机最小系统
在基于单片机的应用系统中,其核心是单片机的最小系统,而单片机又是最小系统的核心,为了方便起见,采用的单片机型号是:STC89C52RC,部资源有:8KB FLASH ,512B SRAM,4个8位I/O,2个TC,1个UART,带ISP和IAP功能。是近年来流行的低端51单片机。时钟电路采用12.0M晶体,复位电路采用简单的RC复位电路。R=10K,C=10uF,详细电路见总体原理图
3.2 DS18B20简介
DS18B20是采用“1-wire”一线总线传输数据的集成温度传感器,信息经过单线接口送入DS18B20或从DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线。可采用外部电源供电,也可采用总线供电方式,此时,把VDD连接在一起作为数字电源。
因为每一个DS18B20有唯一的系列号(silicon serial number),因此多个DS18B20可以存在于同一条单线总线上,这允许在许多地方放置温度灵敏器件。此特性的应用围包括HVAC环境控制,建筑物、设备或机械的温度检测。
3.2 DS18B20与单片机接口
四、总体原理图见附录1
五、程序设计
1、主程序流程图
六、项目总结
通过对该项目的设计制作,我对简单的单片机控制系统的开发过程有了比较全面的理解,在这次实习中,我的体会有:
1.细心,制作硬件和编写程序,调试程序,都需要细心,否则很容易失败。
2.基础,单片机不是万能的,它需要外部硬件电路的配合,这些电路不复杂,但是要弄明白它的原理,还是要下一番功夫的。像基础的电子焊接,测量,元件的识别等都是。
3.团队合作,由于时间的关系,每个项目由几个人合作,这时就特别需要团队合作意识。
4.撰写设计文档,对写设计文档总感到是一种累赘——反正实物已经出来了,有没有文档关系不大。现在需要在设计过程中随时记录一些东西,最后整理成设计文档。
5.将一个大的问题分割成几个相对独立的部分,更容易解决。
附录1:电路原理图
附录2:代码:
(1)名称:温控系统
#include
//#include
#define uchar unsigned char
#define uint unsigned int
/******************************************************************/ /* 定义端口 */ /******************************************************************/ sbit DQ=P2^7;//ds18b20 端口
sbit ledj=P1^1;//加热
sbit ledb=P1^7;//报警
sbit keyup=P3^0; //温度加
sbit keydn=P3^1; //温度减
/******************************************************************/ /* 全局变量 */ /******************************************************************/ uint tmax=30;
uint tmin=26;
uint temp;
uchar shi,ge,temph,i,j,x;
uchar code tab[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //7段数码管段码表共阳
/******************************************************************/ /* 函数声明 */ /******************************************************************/ unsigned int ReadWD(void);
void csh(void);
unsigned char ReadOneChar(void);
void WriteOneChar(uchar dat);
void delay(uint i);
void xs(uchar shi,uchar ge);
void sjcl();
/******************************************************************/ /* 主函数 */ /******************************************************************/ void main()
{
//unsigned char temph;