1、单片机大作业-温度控制系统设计班级:1302041学号:13020410024姓名: 陈串串1 设计要求项目简介:温度的测量和控制对人类日常生活、工业生产、气象预报、物资仓储等都起着极其重要的作用。在许多场合,及时准确获得目标的温度、湿度信息是十分重要的,近年来,温湿度测控领域发展迅速,并且随着数字技术的发展,温湿度的测控芯片也相应的登上历史的舞台,能够在工业、农业等各领域中广泛使用。鉴于此,本文对基于单片机的温湿度计系统进行了相关研究。本系统是通过单片机控制来实现对周围环境的温湿度进行测量。本系统是以 AT89C52 单片机为控制单元、温度传感器 DS18B20 为主要检测器件,实现温度、湿
2、度的测量、显示、控制,并利用单片机之间的通信功能,将所采集到的温度和湿度值在液晶屏中显示出来。温度测量范围为测 温范 围 40 70 ,精度0.0625。 (1)温度高于 28启动制冷开关,从而使制冷压缩机工作;(2)温度低于 15启动加热开关,从而使加热丝导通工作;(3)以上设定通过用户从键盘上输入实现;(4)温度需要用八段式 LED 显示(温度显示范围-4070);(5)制冷和制热需要 LED 灯显示其工作。2 电路设计硬件电路的设计运用51单片机、七段数码管、LED灯、晶振、电解电容、DS18B20、电阻、排阻、电源等组成全部系统。DS18B20可以程序设定912位的分辨率,精度为0.5
3、C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色!DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为2C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。设计框图如下:项目视图图 2-1 温度控制系统原理总图单
4、片机运用单片机处理温度转化成的串行数字信号,实现信号处理。将获得的结果通过输出装置输出显示在七段数码管上,并且在最后的处理部分也借用了 P2 和 P3 口的三个引脚,来点亮所需要点亮的 LED 灯。89C52 单片机组成结构中包含运算器、控制器、片内存储器、并行 I/O 口、串行I/O 口、定时/计数器、中断系统、振荡器等功能部件。图 2.1.1 单片机控制部分电路温度采集部分运用一个 DS18B20 温度传感器作为外部温度的检测部分,并将采集好的串行数字信号供单片机处理。图 2.1.2 DS18B20 传感器获取外界温度电路温度显示部分六个七段数码管组成显示部分。图 2.1.3 温度显示部分
5、温度状态指示电路温度高于指定温度(28)时,LED-RED 亮(代表制冷工作);温度在指定温度(1528)之间时,LED-GREEN 亮;温度低于指定温度(15)时,LED-BLUE 亮(代表制热工作)。图 2.1.4 状态指示部分 软件的设计#include #define W_IO P1 /片选线从左往右分别与 P1.0-P1.4 相连#define S_IO P0 /段选线从 A-DP,分别与 P0.0-p0.7 相连#define uchar unsigned char#define ulong unsigned long#define uint unsigned intint t,a
6、;uint temp,flag;float ftemp;sbit LED1=P20;sbit LED2=P24;sbit LED3=P31;sbit ds=P34;uchar Time5; /数码管要显示的 4 位数字和温度正负int code S_Data10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;int code W_Data5=0x01,0x02,0x04,0x08,0x10;void delayms(int time)/延时函数int i,j;for(i=time;i0;i-)for(j=110;j0;j-);void LE
7、D(uchar Data5,uint dp,uint flag)/七段数码管上的显示程序 int i=0,j=0;P0=0XFF;for(i=0;i0)i-;ds=1;i=4;while(i0)i-;bit du1wei() /读一位数据uint i;bit dat;ds=0;i+; ds=1;i+;i+;dat=ds;i=8;while(i0)i-;return (dat);uchar du1zijie()/读一字节数据uchar i,j,dat;dat=0;for(i=1;i1);return(dat);void xie1wei (uchar dat)/写一字节uint i;uchar j;bit test;for(j=1;j1;if(test)ds=0;i+;i+;ds=1;i=8;while(i0)i-;else ds=0;i=8;while(i0)i-;ds=1;i+;i+;void xie_temp_zhuanhuan()/开始获取温度并转换init18b20();delayms(1);xie1wei (0xcc);xie1wei (0x44);