基于89C51系列单片机系列的温度控制系统_第1页
基于89C51系列单片机系列的温度控制系统_第2页
基于89C51系列单片机系列的温度控制系统_第3页
基于89C51系列单片机系列的温度控制系统_第4页
基于89C51系列单片机系列的温度控制系统_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 目录一.系统方案设计2二. 系统设计22.1 单片机的选择及基本原理22.2 温度传感器的工作原理及于单片机连接32.3 报警电路(包含主电路)设计42.4 电源电路52.5 显示电路6三.系统软件设计6 3.1程序框图6四.参考文献13一.系统方案设计 该方案使用stc89C52系列单片机作为核心,以智能温度传感器DS18B20为测量温度的元件,进行温度测量,用1602显示模块将温度显示出来。设定一个温度上下限,当温度低于下限或高于上限时,将控制使主电路进行动作(加热或制冷),同时使报警电路报警(本方案中将主电路模拟用二极管算入报警电路中),本方案中用四个发光二极管模拟加热和制冷装置的动作

2、,用蜂鸣器和电阻组成报警电路(详见后面该单片机系统原理图)。其系统框图如下:2. 系统设计2.1 单片机的选择及基本原理 本方案中选用stc89C52作为本温控系统的核心,功能上STC89C52与教材上介绍的80C51并无太大差别。S 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,2个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停TC89C52是一种低功耗、高性能CMOS8位微控

3、制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。2.2 温度传感器的工作原理及于单片机连接 温度传感器的单总线于单片机的P2.7口连接,P2.7是单片机的高位地址总线,P2端口是8位双向I/O口。对其端口写1可用作输入口。 DS18B20与单片机的接口线路很简单,该

4、传感器只有3个接口,一个接地,一个接电源,输入输出引脚接单片机的I/O口,此外,电源和输入输出引脚之间应加入一个的电阻。连接图如下:DS18B20概述:该传感器是DALLAS公司生产的单总线器件,具有体积小线路简单等特点。该产品具有以下特点:1,只需要一个端口就可以实现。2,每个DS18B20上都有独一无二的的序列号。3,实际应用中无需其他器件就可以测量温度。4,测量温度在-25.C+125.C5,数字温度计的分辨率可以从9到12位可选6,内部附有温度上下限警告设置。 工作原理:其中的温度传感器可以测量温度,以12位转化为例:以16位符号扩展的二进制补码读书形式提供,以形式表达,其中S为符号位

5、,存储在18B20的两个8比特的的RAM中,二进制的前五位为符号位,如果大于0,则这五位为0,直接用测的数字乘以0.0625即可,如果小于0,则这五位为1,应对数据进行取反加1再乘以0.0625. 温度对应表格如下: DS18B20配置寄存器: 第五位一直是1,TM是测试模式位,用于设定工作在测试模式还是工作模式。出厂时设为0用户无需改动,R1,R0用于设定分辨率,如下图显示: ROM命令跟随需要交换的数据,功能命令跟随者需要交换的数据。如果丢失任何一步或者序列混乱,DS18B20都不会相应主机。2.3 报警电路(包含主电路)设计 原理图如下:2.4 电源电路 本系统需要5V电源,采取三端稳压

6、电源LM7805.该电源接线简单,仅有输入输出公共端三个引脚,内部有过流保护、过热保护等可以保护电路。以下是电源连接图:2.5 显示电路 本系统采用1602显示模块进行显示。该显示模块使用5V电源驱动,可以双行显示,不能显示汉字,内置128个字符的ASCII字符集字库,每行可以显示16个字符,只有并行接口无穿行接口。3. 系统软件设计 3.1程序框图系统程序为:#include <reg51.H>#include <intrins.H>#include <math.H>#define uchar unsigned char/宏定义,定义无符号字符型数据#de

7、fine uint unsigned int和无符号整形数据; sbit dula = P26;/各个引脚初始化定义; sbit wela = P27; sbit beep=P30; sbit led0=P10; sbit led1=P11; sbit led2=P12; sbit led3=P13; sbit RS = P35; sbit LCDEN = P34; uint warm_l1=250;/定义四个温度点; uint warm_l2=220; uint warm_h1=370; uint warm_h2=350;void delayUs()/延时微秒; _nop_(); void

8、delayMs(uint a)/延时毫秒; uint i, j; for(i = a; i > 0; i-) for(j = 100; j > 0; j-); void writeComm(uchar comm) /写控制; RS = 0; P0 = comm; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(1);/产生一个下降沿;void writeData(uchar dat) /写数据:RS=1, RW=0; RS = 1; P0 = dat; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(1); voi

9、d init()/1602初始化; dula = wela = 0; writeComm(0x38); writeComm(0x0c); writeComm(0x06); writeComm(0x01); void writeString(uchar * str, uchar length)/字符显示; uchar i; for(i = 0; i < length; i+) writeData(stri); /*/*DS18B20*/ sbit ds = P22;void dsInit()/ds18b20引脚初始化; unsigned int i; ds = 0; i = 100; wh

10、ile(i>0) i-; ds = 1; i = 4; while(i>0) i-; void dsWait() unsigned int i; while(ds); while(ds); i = 4; while(i > 0) i-;bit readBit()/读每一位的数据; unsigned int i; bit b; ds = 0; i+; ds = 1; i+; i+; b = ds; i = 8; while(i>0) i-; return b;unsigned char readByte()/读字节数据; unsigned int i; unsigned

11、char j, dat; dat = 0; for(i=0; i<8; i+) j = readBit(); dat = (j << 7) | (dat >> 1); return dat;void writeByte(unsigned char dat)/写引脚; unsigned int i; unsigned char j; bit b; for(j = 0; j < 8; j+) b = dat & 0x01; dat >>= 1; if(b) ds = 0; i+; i+; ds = 1; i = 8; while(i>0

12、) i-; else ds = 0; i = 8; while(i>0) i-; ds = 1; i+; i+; void sendChangeCmd()/发出温度转换请求; dsInit(); dsWait(); delayMs(1); writeByte(0xcc); writeByte(0x44);void sendReadCmd()/发出读的命令; dsInit(); dsWait(); delayMs(1); writeByte(0xcc); writeByte(0xbe); int getTmpValue()/获取温度的函数; unsigned int tmpvalue; i

13、nt value; float t; unsigned char low, high; sendReadCmd(); low = readByte(); high = readByte(); tmpvalue = high; tmpvalue <<= 8; tmpvalue |= low; value = tmpvalue; t = value * 0.0625; value = t * 100 + (value > 0 ? 0.5 : -0.5); /大于0加0.5, 小于0减0.5 return value;void display(int v) /温度显示函数; uns

14、igned char count; unsigned char datas = 0, 0, 0, 0, 0; unsigned int tmp = abs(v); datas0 = tmp / 10000; datas1 = tmp % 10000 / 1000; datas2 = tmp % 1000 / 100; datas3 = tmp % 100 / 10; datas4 = tmp % 10; writeComm(0xc0+3); if(v < 0) writeString("- ", 2); else writeString("+ ",

15、 2); if(datas0 != 0) writeData('0'+datas0); for(count = 1; count != 5; count+) writeData('0'+datascount); if(count = 2) writeData('.'); /温度处理及报警函数; void deal(uint t) if (t>warm_l2)&&(t<=warm_l1)|(t>warm_h2)&&(t<=warm_h1) led0=0; delayMs(20); led0=1

16、; else if (t<=warm_l2) led1=0; delayMs(10); led1=1; beep=0; delayMs(20); beep=1; else if (t<warm_h2)&&(t>warm_l1) ) led2=0; delayMs(20); led2=1; else led3=0; delayMs(10); led3=1; beep=0; delayMs(20); beep=1; /*/*DS18B20*/ void main() uchar table = " xianzaiwendu:" /定义无符号字符数组并初始化; sendChangeCmd(); /发送温度转换请求; init(); /1602初始化; writeComm(0x80);/写指令; writeString(table, 16);/写字符串; while(1) delayMs(1000); /温度转换时间需要750ms以上 w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论