版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要随着时代的进步和开展,温度的测试已经影响到我们的生活、工作、科研、各个领域,已经成为了一种非常重要的事情,因此设计一个温度测试的系统势在必行。本文主要介绍了一个基于AT89C52单片机的数字温度报警器系统。详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各局部的电路也一一进行了介绍,该系统可以方便的实现温度的采集和报警,并可以根据需要任意上下限报警温度,它使用起来相当方便,具有量程宽、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当做温度处理模块潜入其他系统中,作为其他主系统的辅助扩展。DS18B20与AT89C52结合实现最简温度报警系统,该系统结构简单,有广泛的应用前景。关键词:单片机;温度检测;AT89C52;DS18B20;目录摘要I1设计要求及方案选择11.1设计要求11.2方案选择12理论分析与设计12.1芯片介绍12..1.1DS18B20概述12.1.2STC89C52介绍22.2系统结构框图32.3程序原理表达33.电路设计33.1硬件设计3报警模块4单片机最小系统电路4温度采集模块53.2软件设计5流程框图及仿真电路图6程序设计64、系统测试215、总结22.参考文献231.设计要求及方案选择1.1设计要求根本功能:1、用DS18B20进行温度采样2、将采样的温度值进行显示扩展功能:1、可设置一个温度控制范围2、当温度超过设定值时或低于设定值时,进行报警,超过设定值时为其降温直至到达温度范围内。1.2方案选择采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。便于单片机处理及控制,节省硬件电路。且该芯片的物理化学性很稳定,此元件线形性能好,在0—100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器STC89C52构成的温度装置,它直接输出温度的数字信号到微控制器。每只DS18B20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件。并选择数码管作为输出显示,蜂鸣器位报警装置;2理论分析与设计2.1芯片介绍2.1.1DS18B20概述DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。DS18B20测温原理。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度存放器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度存放器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度存放器值的累加,此时温度存放器中的数值即为所测温度。它的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。图2-1-1DS18B20封装形式和引脚功能如图2-1-1所示,DS18B20的外形如一只三极管,引脚名称及作用如下:GND:接地端。DQ:数据输入/输出脚,与TTL电平兼容。VDD:可接电源,也可接地。因为每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采用数据总线供电方式时VDD接地,可以节省一根传输线,但完成数据测量的时间较长;采用外部供电方式那么VDD接+5V,多用一根导线,但测量速度较快2.1.2STC89C52介绍STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用宏晶科技公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。由于此单片机应用在仓库温湿度检测上,所以本设计选用了低功耗、高性能、低价格。小管脚(40脚)的STC89C52单片机。如图2-1-2所示:图2-1-2STC89C52单片机2.2系统结构框图系统主要包括数据采集模块,单片机控制模块,显示模块和温度设置模块,驱动电路五个局部。系统框图如图2-2-1所示。单片机单片机显示电路报警电路温度传感器图2-2-1系统结构款图2.3程序原理表达其中温度采集模块负责利用DS18B20传感器实时采集温度数据,并将采集到的温度数据传输到单片机控制模块,单片机控制模块将检测到的数据进行处理后送到LCD显示模块进行显示,同时将数据与系统默认的温度上限32°C进行比拟,如果检测到的温度超过35°C或低于25°C,蜂鸣器会发出不同频率的声音进行报警。3.电路设计3.1硬件设计3.1.1报警模块报警电路用一个三极管驱动一只蜂鸣器组成,驱动信号由芯片的管脚RD/P3.7控制。当显示的温度不在设定的温度范围内,即不在TL与TH之间那么驱动蜂鸣器发声报警,其电路如图3-1-1所示。或采用一个扬声器即可。图3-1-1报警电路3.1.2单片机最小系统电路在课题设计的温度控制系统设计中,控制核心是STC89C52单片机,该单片机为51系列增强型8位单片机,它有32个I/O口,片内含4KFLASH工艺的序存储器,便于用电的方式瞬间擦除和改写,而且价格廉价,其外部晶振为12M一个指令周期为1μS。使用该单片机完全可以完成设计任务,其最小系统主包括:复位电路、震荡电路以及存储器选择模式,如图3-2-1所示图3-1-2单片机最小电路3.1.3温度采集模块在硬件完成后,为了使作品能够实现预定的功能和效果,因此需要对环境温度进行采集.在本设计中采用外部供电方式实现DS18B20传感器与单片机的连接如图3-1-3所示.图3-1-3温度传感器接口3.2.1流程框图及仿真电路图图3-2-1程序流程框图图3-2-2仿真电路图3.1.4键盘3.2.2程序设计主函数所在C文件://数码管显示程序,FromWilliamsYouth20180104#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#include"DS18B20.h"#include"NixieLight.h"#include"Button.h"#include"BuzzerWarning.h"voidmain(){ uchari; DS18B20_reset(); buzInit();while(1){P0=0x00; if(keyadd==0||keydec==0)i++;//设置标志位i,只有加或减键被按下之 //后报警程序启动;防止当前温度在界限之外一直报警并无法设定问题 t=read_temperature();//读温度 formatTemp(t); keyboard(); if(i>=1)WhetherWarn(t); }}数码管显示局部:sbitfir=P2^1;sbitsec=P2^2;sbitthr=P2^3;voiddisplay(ucharnum,uchardat);//数码管显示数字的编码table[0]就是显示0ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //不带共阳极小数点的0-9编码0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10 //带共阳极小数点的0-9编码};voiddelay(uchari) //1Ms毫秒延时{ucharj,k;for(j=i;j>0;j--)for(k=125;k>0;k--);}voidformatTemp(uintt)//格式化数据以显示于数码管{ uchari; i=t/100;display(1,i); i=t%100/10+10;display(2,i); i=t%100%10;display(3,i);}voiddisplay(ucharnum,uchardat){switch(num) {case1:P0=table[dat];fir=0;delay(5);fir=1;break;//十位 case2:P0=table[dat];sec=0;delay(5);sec=1;break;//个位 case3:P0=table[dat];thr=0;delay(5);thr=1;break;//小数点位 } }DS18B20测试温度局部:voidDS18B20_Delayus(uintus);voidDS18B20_reset();voidDS18B20_write(uchardat);ucharDS18B20_data();uintread_temperature();sbitDQ=P3^7;uintt=0;//1820温度变量uintset_hightemp=200,set_lowtemp=150; //高温界限20度,低温警报15度/*us级延时函数*/voidDS18B20_Delayus(uintus){while(--us);}//初始化DS18B20voidDS18B20_reset(){ucharx=0;DQ=1;DS18B20_Delayus(16);//稍做延时DQ=0;//将DQ拉低DS18B20_Delayus(160);//延时400us~960usDQ=1;//拉高总线DS18B20_Delayus(28);//延时15us~60usx=DQ;//如果=0那么初始化成功=1那么初始化失败DS18B20_Delayus(40);//延时60us~240us}/*写一个字节*/voidDS18B20_write(uchardat){uchari;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;DS18B20_Delayus(10);DQ=1;dat>>=1;}}/*读一个字节*/ucharDS18B20_data(){uchari,dat;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;DS18B20_Delayus(8);}returndat;}/*读取温度*/uintread_temperature(){uchara,b;uintt=0;floattt=0;DS18B20_reset();//DS18B20复位DS18B20_write(0xcc);//跳过读序号列号的操作DS18B20_write(0x44);//启动温度转换DS18B20_reset();//DS18B20复位DS18B20_write(0xcc);//跳过读序号列号的操作DS18B20_write(0xbe);//读取温度存放器a=DS18B20_data();//读低8位b=DS18B20_data();//读高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t=tt*10+0.5;//放大10倍输出并四舍五入return(t);}蜂鸣器工作局部://温度超过界限报警并采取措施程序,FromWilliams//温度高于20度Beep报警,温度低于15度Beep报警ucharCount;sbitbuz=P3^6;sbitmotor=P2^7;voiddelay2(void){uintk;for(k=1700;k>0;k--);}voidbuzInit()//主函数初始化{Count=0x00;buz=1;TMOD=0x01;TH0=0x00;TL0=0xff;EA=1;ET0=1;}/********************************************************BEEP工作函数*********************************************************/voidbuzWork()//beep工作函数{ charshowtime=127; do{Count++;delay2();}while(Count!=0xff); if(t>set_hightemp){do {Count--; delay2(); }while(Count!=0x00); } TR0=0; }/*********************************************************Time0中断函数**********************************************************/voidTime0(void)interrupt1using0{TH0=0xfe;TL0=Count;buz=~buz;}//判断函数voidWhetherWarn(uintt){ if(t<set_lowtemp&&t!=850){TR0=1;buzWork();} elseTR0=0; if(t>set_hightemp&&t!=850){TR0=1;buzWork();} elseTR0=0;}按钮工作局部:sbitkeyh=P3^5;sbitkeyl=P3^4;sbitkeyadd=P3^3;sbitkeydec=P3^2;voidkeyboard(){ucharh=0,l=0;/////设置高温界限 if(keyh==0) //K3anxia {delay(10);if(keyh==0) {while(!keyh);h++; }}//进入K3 while(h==1) {formatTemp(set_hightemp);//显示最高值 if(keyadd==0) {delay(10); if(keyadd==0){ formatTemp(set_hightemp); while(!keyadd); set_hightemp+=10;}} if(keydec==0) {delay(10); if(keydec==0){ formatTemp(set_hightemp); while(!keydec); set_hightemp-=10;}} if(keyh==0) {delay(10); if(keyh==0){ formatTemp(set_hightemp); while(!keyh); h++;}} }//////////////设置低温界限 if(keyl==0) //K3anxia {delay(10);if(keyl==0) {while(!keyl);l++; }}//进入K3 while(l==1) {formatTemp(set_lowtemp);//显示最高值 if(keyadd==0) {delay(10); if(keyadd==0){ formatTemp(set_lowtemp); while(!keyadd); set_lowtemp+=10;}} if(keydec==0) {delay(10); if(keydec==0){ formatTemp(set_lowtemp); while(!keydec); set_lowtemp-=10;}} if(keyl==0) {delay(10); if(keyl==0){ formatTemp(set_lowtemp); while(!keyl); l++;}} } }4、系统测试当温度传感器DS18B20接受到外界环境温度的变化时,如:将火苗靠近传感器或用电吹风对传感器加热等,这时传感器对这个信号进行采样处理,将这个数字信号输入到主模块单片机STC89C52中进行处理。由单片机的P3.6脚接入高温报警电路控制局部,用于发光二极管和继电器的控制。检查焊接是否标准,线路是否接错,确保根本的错误没有后,接通电源,检查前级和后级,看看数码管是否正常显示,最后再加热传感器,使其到达设定的高温临界点,如果实现了报警,证明设计成功了,如果没有还需一级一级的仔细检查。在焊接的过程中,为保证焊点牢固、接触良好与美观,不存在虚焊、假焊,在焊接前要用刀、断锯条或砂纸刮去或打光引脚引线上的油污、氧化膜或漆,直至露出光亮干净的外表,之后涂上松香溶液,其上搪一层锡。焊接时应掌握好温度及时间,焊接时间一般在3~5秒。假设焊接时间过短,焊锡未与焊件充分浸熔易产生虚焊、假焊;时间过长,那么将烫坏印制板的铜箔或元件。焊接时,烙铁头应同时紧贴引脚或引线头及印制板上的焊盘铜箔,当焊点温度升至焊锡熔点时,焊锡熔化即自动流到引线与铜箔间,形成锥状光滑焊点,之后迅速移开烙铁。焊锡未完全凝固前,不能移动或摇动被焊元器件。焊锡可事前熔在烙铁头上,亦可在烙铁贴在焊点加热时将其送入。各元件焊接完毕,焊接结束后必须检查有无漏焊、虚焊以及由于焊锡流淌造成的元件短路。虚焊较难发现,可用镊子夹住元件引脚轻轻拉动,如发现摇动应立即补焊。5、总结本设计是以温度采集及控制过程设计为总目标,以89C52单片机最小应用系统为总控制中心,辅助设计有温度采样电路、LED数码管动态串行显示器等。本设计的重点、难点是:〔1〕要掌握温度传感器的原理、结构、应用等;〔2〕考虑从非电量信号到电量信号的电路实现原理以及与单片机的接口;〔3〕熟悉MCS-51编程的技术,实现单片机对温度的调节控制;〔4〕整体电路的仿真调试。本次设计优点:采用的单片机STC89C52性价比高;热敏电阻温度传感器转化温度的方法非常简洁且精度高、测试范围较广。由于时间及精力所限,对温度控制系统做了整体设计,具体实现了其中的温度报警局部设计,即温度控制系统的采集、显示及报警模块。6、设计过程2017-12-2822:16:11单片机开发板数码管为共阳数码管;【验证正确】测试数码管程序是否正确;测试DS18B20是否工作正常;2017年12月29日13:03:35可以正常用数码管显示温度;开始做功能二:温度过高用蜂鸣器报警并使电机工作以降温;2017年12月30日18:41:58蜂鸣器疑心损坏或电路不正确:蜂鸣器为无源蜂鸣器且P04口驱动蜂鸣器存在问题,考虑不用P04口2018年1月1日星期一17:11:58确定蜂鸣器接口为P36,不是P04,温度过高报警功能完成,报警方式消防车报警声2017年12月29日18:42:27Proteus问题4位一体数码管:共阳,abcdefgh为接低电平相应段亮;2018年1月1日星期一11:03:36设计:用键盘更改设定温度程序功能设定:按键k3〔P35〕:选定+确定功能,用于设定上限温度,按一下设置十位,再按一下设定个位,再按第三次设定小数点后一位,最后按压一次设置完成;〔整个设置过程中假设中途有3s不操作那么跳出设置,根据当前已更改和未更改值设定温度〕2018年1月1日星期一17:17:09按键k4〔P34〕:选定+确定功能,用于设定下限温度,按一下设置十位,再按一下设定个位,再按第三次设定小数点后一位,最后按压一次设置完成;〔整个设置过程中假设中途有3s不操作那么跳出设置,根据当前已更改和未更改值设定温度〕按键k5〔P33〕:温度设置加;按键k6〔P32〕:温度设置减;功能流程图描述:设定的下限温度十位闪烁设定的下限温度十位闪烁K6按下〔温度减〕K5按下〔温度加〕K4按下〔进入设定下限温度〕2018/1/121:30:02解决proteus仿真不成功问题〔未解决〕2018年1月2日星期二17:06:09报警程序问题:不能跳出;21时3分25秒按钮设置温度;2018年1月3日星期三10:52:34按钮程序问题,while循环不能成功循环【问题已解决,编译器问题,之前翻开的button.h编辑无效,通过主程序翻开的button.h才能被编辑】2018年1月3日星期三19:34:54尝试解决仿真不通过问题;〔未解决〕2018年1月4日10:30:33尝试参加电机控制程序,单片机负载电流不够,所以考虑用驱动IC,查找并尝试使用74LS245及74LS04芯片,无法驱动74LS245双向总线驱动器,驱动单片机系统总线总线驱动芯片,用来驱动led或者其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 做玻璃隔断施工方案(3篇)
- 室内槽钢油漆施工方案(3篇)
- 教育会员营销方案(3篇)
- 车场坡道施工方案范本(3篇)
- 道口栅栏刷漆施工方案(3篇)
- 铁皮场地围墙施工方案(3篇)
- 电子废弃物回收利用
- 深市A股公司治理结构对投资效率的影响:基于实证分析的洞察
- 深圳SJ建筑设计公司成本控制优化研究:策略与实践
- 深入剖析LED幻影阵列效应:原理、特性与应用探索
- 全面质量管理培训课件
- 2025贵州毕节市第四人民医院招聘编外人员23人历年真题汇编含答案解析(夺冠)
- DB14∕T 3507-2025 公路桥梁墩身纠偏技术规程
- 2025浙江绍兴市轨道交通集团有限公司社会招聘、高校毕业生招聘20人笔试考试参考试题及答案解析
- 水罐环氧树脂施工技术交底
- 小学地质灾害科普
- 110kV升压设备维护操作手册
- 中国餐饮业职业经理人(CMEP)高级资格证书考试综合练习题及答案三
- 家电应急处理预案
- DBJT 13-503-2025 福建省城市口袋公园规划建设标准
- 2025秋期版国开电大本科《心理学》一平台形成性考核练习1至6在线形考试题及答案
评论
0/150
提交评论