1、温度检测显示报警报告五邑大学单片机课程设计报告 题 目:温度检测显示报警 院 系 专 业 学 号 学生姓名 指导教师 一、设计任务与要求(1)设计任务基于AT89C51单片机设计温度检测报警,可以实时采集周围的温度信息进行显示,并且可以根据应用环境不同设定不同的报警上下限。(2) 设计要求1. 实时温度检测并显示其对应的值。2. 具有温度报警功能。3. 可以设报警置温度上下限。(3)实用价值与理论意义温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度。在控制领域中,对温度的控制有着举足轻重的作用。例如陶
2、瓷的烧烤,只有控制住温度的适度,才能制作出一件完美的艺术品,否则只是一件废品;还有如酿酒的过程,也需要对温度进行控制。可见,在生活的许多方方面面都有着对温度进行感知和控制的需要。而本次设计的温度检测报警系统是在日常生活和工业应用非常广泛的工具,能实时采集周围的温度信息进行显示,程序内部设定有报警上下限,根据应用环境不同可设定不同的报警上下限。该系统实现了对温度的自动监测,为设备的正常运行提供了条件,在工业中具有一定的实用价值和广泛的应用前景。系统硬件设计二、系统电路图设计(1) 系统电路设计框图 AT89C51 单 片 机 3、设计方案原理通过温度传感器对空气进行温度采集,将采集到的温度信号传
3、输给单片机,再由单片机控制数码管显示,并比较采集温度大于设定的报警温度,若大于设定的的报警温度单片机就会驱动报警电路进行报警。温度报警装置主要单片机,时序电路,温度采样电路,报警电路,温度显示电路,电源输入电路,驱动电路等组成。DS18B20工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数
4、值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。报警原理报警控制电路由IO口控制PNP三级管驱动蜂鸣器发出声响,当温度大于20度是IO口将对PNP的基极产生一个低电平,此时PNP起开关作用闭合蜂鸣器发出声响。4、元器件清单AT89c51 1个排阻 R=10K 1个四段八位数码管 1个 共阴极温度传感器 DS18B20 1个电阻 R1=10K 1个 R2=1K
5、1个 R3=2K 1个 R4=200 1个三极管PNP 1个蜂鸣器 1个晶体振荡器 1个 11.0592MHZ电容 C1=33up C2=33up C3=10up开关 1个五、系统模块图(硬件设计)(1)AT89C52模块图 (2)温度传感器模块图 (3)蜂鸣器模块图 (4)共阴数码管模块图(5)单片机晶振模块图 (6)复位模块图 六、温度报警器PCB图七、程序设计见附录八、设计总结一开始按照电路图用面包板来连接电路的时候都连了三次才成功,第一次在三极管那里分不清楚基级,集电极和发射极而弄错;第二次是没有注意电容的正负极;直到第三次连接才真正的把电路图连接好。然后焊接完所有元器件,做成电路板后
6、,烧写程序进去了,只能显示,却不能正常报警,一开始我检查原件器,发现蜂鸣器模块上的PNP用错了,换回正确的来,还是不行,于是就检查程序,改了好几个地方,最后才发现是我自己的蜂鸣器坏了,换一个新的上去。最后再次检查元器件有没有问题,还有元器件有没有接错,最后成功了。做成功一个作品需要不断努力,不断尝试。多听取别人的意见和坚持,你就离成功不远了。九、参考文献孙涵芳单片机原理及应用【M】科学出版社,修订版;李朝青单片机原理及接口技术第三版,北京航空航天大学出版社附录:程序如下#include #define uchar unsigned char#define uint unsigned intsb
7、it DS=P34; /define interfacesbit fm=P10;uint temp; / variable of temperatureuchar flag1; / sign of the result positive or negativeunsigned char code table=0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb, / 0x45,0xdf,0xc7;unsigned char code table1=0x7f,0x64,0xbd,0xf5,0xe6,0xf3,0xfb, / 0x65,0xff,0xe7;void delay(ui
8、nt count) /delay uint i; while(count) i=200; while(i0) i-; count-; /功能:串口初始化,波特率9600,方式1/void Init_Com(void) TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1;void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i0)i-; DS=1; i=4; while(i0)i-;bit t
9、mpreadbit(void) /read a bit uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i0)i-; return (dat);uchar tmpread(void) /read a byte date uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tmpreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好一个字节在DAT里 return(dat);void tmpwritebyte(uchar dat) /write a by
10、te to ds18b20 uint i; uchar j; bit testb; for(j=1;j1; if(testb) /write 1 DS=0; i+;i+; DS=1; i=8;while(i0)i-; else DS=0; /write 0 i=8;while(i0)i-; DS=1; i+;i+; void tmpchange(void) /DS18B20 begin change dsreset(); delay(1); tmpwritebyte(0xcc); / address all drivers on bus tmpwritebyte(0x44); / initia
11、tes a single temperature conversionuint tmp() /get the temperature float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp0;a-) for(b=60;b0;b-); void display(uint temp) /显示程序 uchar A1,A2,A2t,A3,ser; /ser=temp/10; /SBUF=ser; if (temp250|temp0;a-) display(tmp(); while(1);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1