基于STCC单片机DSB温度控制器课程设计_第1页
基于STCC单片机DSB温度控制器课程设计_第2页
基于STCC单片机DSB温度控制器课程设计_第3页
基于STCC单片机DSB温度控制器课程设计_第4页
基于STCC单片机DSB温度控制器课程设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、摘 要随着时代的进步和发展,温度的测试已经影响到我们的生活、工作、科研、各个领域,已经成为了一种非常重要的事情,因此设计一个温度测试的系统势在必行。本文主要介绍了一个基于at89c52单片机的数字温度报警器系统。详细描述了利用数字温度传感器ds18b20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度的采集和报警,并可以根据需要任意上下限报警温度,它使用起来相当方便,具有量程宽、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当做温度处理模块潜入其他系统中,作为其他

2、主系统的辅助扩展。ds18b20与at89c52结合实现最简温度报警系统,该系统结构简单,有广泛的应用前景。关键词:单片机;温度检测;at89c52;ds18b20;目录摘 要i1 设计要求及方案选择11.1设计要求11.2方案选择12 理论分析与设计12.1 芯片介绍12.1.1 ds18b20概述12.1.2 stc89c52介绍22.2系统结构框图32.3程序原理叙述33.电路设计33.1硬件设计33.1.1报警模块43.1.2单片机最小系统电路43.1.3温度采集模块53.2软件设计53.2.1流程框图及仿真电路图63.2.2程序设计64、系统测试215、总结22.参考文献23221.

3、设计要求及方案选择1.1设计要求基本功能:1、用ds18b20进行温度采样2、将采样的温度值进行显示扩展功能:1、可设置一个温度控制范围 2、当温度超过设定值时或低于设定值时,进行报警,超过设定值时为其降温直至到达温度范围内。1.2方案选择采用单总线数字温度传感器ds18b20测量温度,直接输出数字信号。便于单片机处理及控制,节省硬件电路。且该芯片的物理化学性很稳定,此元件线形性能好,在0100摄氏度时,最大线形偏差小于1摄氏度。ds18b20的最大特点之一采用了单总线的数据传输,由数字温度计ds18b20和微控制器stc89c52构成的温度装置,它直接输出温度的数字信号到微控制器。每只ds1

4、8b20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件。并选择数码管作为输出显示,蜂鸣器位报警装置;2 理论分析与设计2.1 芯片介绍 2.1.1 ds18b20概述ds18b20的读写时序和测温原理与ds1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 ds18b20测温原理。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的

5、脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。它的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。图2-1-1 ds18b20封装形式和引脚功能如图2-1-1所示,ds18b20的外形如一只三极管,引脚名称及作用如下:gnd:接地端。dq:数据输入/输出脚,与ttl电平兼容。vdd:可接电源,也可接地。因为每只ds18b20都可以设置成两种供电方式,即数据总线供电方

6、式和外部供电方式。采用数据总线供电方式时vdd接地,可以节省一根传输线,但完成数据测量的时间较长;采用外部供电方式则vdd接+5v,多用一根导线,但测量速度较快2.1.2 stc89c52介绍stc89c52是一种低功耗、高性能cmos 8位微控制器,具有8k在系统可编程flash 存储器。使用宏晶科技公司高密度非易失性存储器技术制造,与工业80c51 产品指令和引脚完全兼容。片上flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位cpu和在系统可编程flash,使得stc89c52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。由于此单片机应用在仓库温湿度

7、检测上,所以本设计选用了低功耗、高性能、低价格。小管脚(40脚)的stc89c52单片机。如图2-1-2所示:图2-1-2 stc89c52单片机2.2系统结构框图系统主要包括数据采集模块,单片机控制模块,显示模块和温度设置模块,驱动电路五个部分。系统框图如图2-2-1 所示。单片机显示电路报警电路温度传感器图2-2-1系统结构款图2.3程序原理叙述其中温度采集模块负责利用ds18b20传感器实时采集温度数据,并将采集到的温度数据传输到单片机控制模块,单片机控制模块将检测到的数据进行处理后送到lcd显示模块进行显示,同时将数据与系统默认的温度上限32c进行比较,如果检测到的温度超过35c或低于

8、25c,蜂鸣器会发出不同频率的声音进行报警。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口,片内含4k flash工艺的序存储器,便于用电的方式瞬间擦除和改写,而且价格便宜,其外部晶振为12m一个指令周期为1s。使用该单片机完

9、全可以完成设计任务,其最小系统主包括:复位电路、震荡电路以及存储器选择模式,如图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文件:/数码管显示程序,from williams youth20180104#include #define uchar unsigned c

10、har#define uint unsigned int #include ds18b20.h#include nixielight.h#include button.h#include buzzerwarning.h void main() uchar i;ds18b20_reset();buzinit(); while(1) p0=0x00; if(keyadd=0|keydec=0)i+; /设置标志位i,只有加或减键被按下之 /后报警程序启动;防止当前温度在界限之外一直报警并无法设定问题 t = read_temperature(); /读温度 formattemp(t); keybo

11、ard(); if(i=1)whetherwarn(t); 数码管显示部分:sbit fir=p21;sbit sec=p22;sbit thr=p23;void display(uchar num,uchar dat);/ 数码管显示数字的编码 table0 就是显示 0uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,/不带共阳极小数点的0-9编码0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10/带共阳极小数点的0-9编码;void delay(uchar

12、i) /1ms毫秒延时uchar j,k; for(j=i;j0;j-) for(k=125;k0;k-);void formattemp(uint t)/格式化数据以显示于数码管uchar i;i=t/100;display(1,i);i=t%100/10+10;display(2,i);i=t%100%10;display(3,i);void display(uchar num,uchar dat) switch (num)case 1:p0=tabledat;fir=0;delay(5);fir=1;break;/十位 case 2:p0=tabledat;sec=0;delay(5);

13、sec=1;break;/个位 case 3:p0=tabledat;thr=0;delay(5);thr=1;break;/小数点位 ds18b20测试温度部分:void ds18b20_delayus(uint us); void ds18b20_reset(); void ds18b20_write(uchar dat); uchar ds18b20_data(); uint read_temperature(); sbit dq = p37; uint t=0; /1820温度变量 uint set_hightemp=200,set_lowtemp=150;/高温界限20度,低温警报1

14、5度/*us级延时函数 */ void ds18b20_delayus(uint us) while(-us); /初始化ds18b20 void ds18b20_reset() uchar x = 0; dq = 1; ds18b20_delayus(16); /稍做延时 dq = 0; /将dq拉低 ds18b20_delayus(160);/延时400us960us dq = 1; /拉高总线 ds18b20_delayus(28);/延时15us60us x = dq; /如果=0则初始化成功 =1则初始化失败 ds18b20_delayus(40);/延时60us240us /* 写

15、一个字节 */ void ds18b20_write(uchar dat) uchar i; for(i = 8; i 0; i-) dq = 0; dq = dat & 0x01; ds18b20_delayus(10); dq = 1; dat = 1; /* 读一个字节 */ uchar ds18b20_data() uchar i,dat; for (i = 8; i 0; i-) dq = 0; / 给脉冲信号 dat = 1; dq = 1; / 给脉冲信号 if(dq) dat |= 0x80; ds18b20_delayus(8); return dat; /* 读取温度 */

16、 uint read_temperature() uchar a,b; uint t = 0; float tt = 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; t0

17、;k-);void buzinit() /主函数初始化 count=0x00; buz=1; tmod=0x01; th0=0x00; tl0=0xff; ea=1; et0=1;/*beep工作函数*/void buzwork() /beep工作函数 char showtime=127;docount+; delay2(); while(count!=0xff); if(tset_hightemp) do count-; delay2(); while(count!=0x00); tr0=0;/* time0中断函数*/void time0(void) interrupt 1 using 0

18、 th0=0xfe; tl0=count; buz=buz;/判断函数void whetherwarn(uint t)if(tset_hightemp&t!=850)tr0=1;buzwork();else tr0=0;按钮工作部分:sbit keyh=p35;sbit keyl=p34;sbit keyadd=p33;sbit keydec=p32;void keyboard()uchar h=0,l=0;/设置高温界限if(keyh=0) /k3anxiadelay(10);if(keyh=0)while(!keyh);h+;/进入k3while(h=1)formattemp(set_hi

19、ghtemp); /显示最高值 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

20、delay(10);if(keyl=0)while(!keyl);l+;/进入k3while(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)formatt

21、emp(set_lowtemp); while(!keyl); l+; 4、系统测试当温度传感器ds18b20接受到外界环境温度的变化时,如:将火苗靠近传感器或用电吹风对传感器加热等,这时传感器对这个信号进行采样处理,将这个数字信号输入到主模块单片机stc89c52中进行处理。由单片机的p3.6脚接入高温报警电路控制部分,用于发光二极管和继电器的控制。检查焊接是否规范,线路是否接错,确保基本的错误没有后,接通电源,检查前级和后级,看看数码管是否正常显示,最后再加热传感器,使其达到设定的高温临界点,如果实现了报警,证明设计成功了,如果没有还需一级一级的仔细检查。在焊接的过程中,为保证焊点牢固、接

22、触良好与美观,不存在虚焊、假焊,在焊接前要用刀、断锯条或砂纸刮去或打光引脚引线上的油污、氧化膜或漆,直至露出光亮干净的表面,之后涂上松香溶液,其上搪一层锡。焊接时应掌握好温度及时间,焊接时间一般在35秒。若焊接时间过短,焊锡未与焊件充分浸熔易产生虚焊、假焊;时间过长,则将烫坏印制板的铜箔或元件。焊接时,烙铁头应同时紧贴引脚或引线头及印制板上的焊盘铜箔,当焊点温度升至焊锡熔点时,焊锡熔化即自动流到引线与铜箔间,形成锥状光滑焊点,之后迅速移开烙铁。焊锡未完全凝固前,不能移动或摇动被焊元器件。焊锡可事前熔在烙铁头上,亦可在烙铁贴在焊点加热时将其送入。各元件焊接完毕,焊接结束后必须检查有无漏焊、虚焊以

23、及由于焊锡流淌造成的元件短路。虚焊较难发现,可用镊子夹住元件引脚轻轻拉动,如发现摇动应立即补焊。 5、总结本设计是以温度采集及控制过程设计为总目标,以89c52单片机最小应用系统为总控制中心,辅助设计有温度采样电路、led数码管动态串行显示器等。本设计的重点、难点是:(1) 要掌握温度传感器的原理、结构、应用等;(2) 考虑从非电量信号到电量信号的电路实现原理以及与单片机的接口;(3) 熟悉mcs-51编程的技术,实现单片机对温度的调节控制;(4) 整体电路的仿真调试。本次设计优点:采用的单片机stc89c52 性价比高;热敏电阻温度传感器转化温度的方法非常简洁且精度高、测试范围较广。由于时间

24、及精力所限,对温度控制系统做了整体设计,具体实现了其中的温度报警部分设计,即温度控制系统的采集、显示及报警模块。6、设计过程2017-12-28 22: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,温度过高报警功

25、能完成,报警方式消防车报警声2017年12月29日18:42:27 proteus问题4位一体数码管:共阳,abcdefgh为接低电平相应段亮;2018年1月1日星期一11:03:36设计:用键盘更改设定温度程序功能设定:按键k3(p35):选定+确定功能,用于设定上限温度,按一下设置十位,再按一下设定个位,再按第三次设定小数点后一位,最后按压一次设置完成;(整个设置过程中若中途有3s不操作则跳出设置,根据当前已更改和未更改值设定温度)2018年1月1日星期一17:17:09按键k4(p34):选定+确定功能,用于设定下限温度,按一下设置十位,再按一下设定个位,再按第三次设定小数点后一位,最后

26、按压一次设置完成;(整个设置过程中若中途有3s不操作则跳出设置,根据当前已更改和未更改值设定温度)按键k5(p33):温度设置加;按键k6(p32):温度设置减;功能流程图描述:设定的下限温度十位闪烁k6按下(温度减)k5按下(温度加)k4按下(进入设定下限温度)2018/1/1 21:30:02解决proteus仿真不成功问题(未解决)2018年1月2日星期二17:06:09报警程序问题:不能跳出;21时3分25秒按钮设置温度;2018年1月3日星期三10:52:34按钮程序问题,while循环不能成功循环【问题已解决,编译器问题,之前打开的button.h编辑无效,通过主程序打开的butt

27、on.h才能被编辑】2018年1月3日星期三19:34:54尝试解决仿真不通过问题;(未解决)2018年1月4日10:30:33尝试加入电机控制程序,单片机负载电流不够,所以考虑用驱动ic,查找并尝试使用74ls245及74ls04芯片,无法驱动74ls245双向总线驱动器,驱动单片机系统总线总线驱动芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。测试不能驱动电机(5v,0.16a)74ls16474ls3274ls32是四2输入或门,常用在各种数字电路以及单片机系统中。74ls04反相器测试不能驱动电机(5v,0.16a)尝试用3极管驱动电机;三极管配置问题:说明:b端电压不能恒定为5v,需要调制到5v以下电机正常工作;

温馨提示

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

评论

0/150

提交评论