1、温度报警系统的设计温度报警系统的设计1设计思路 本设计是一种基于STC89C52的温度检测及报警系统。该系统将单总线温度传感器DS18B20并接在控制器的一个端口上,对传感器温度进行采集,将采集到的温度值实时显示同时与设定值进行比较,当超出设定的上限温度时,通过蜂鸣器报警,并根据要求打开继电器或电风扇。 2方案设计采用技术成熟、操作简单、精确度高的温度传感器,在此,可以选用数字温度传感器DS18B20,根据它的特点和测温原理,很容易就能直接读取被测温度值并进行转换,这样就可以满足设计要求。码管以串口并行输出方式传送数据实现温度显示。 图1总体设计框图2.1主要器件的选择STC89C52 是低电
2、压,高性能 CMOS 8 位单片机,片内含 8k bytes 的可反复擦写的Flash只读程序存储器和256 bytes 的随机存取数据存储器(RAM),器件采用高密度、非易失性存储技术生产,与标准 MCS-51 指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和 Flash 存储单元,功能强大 STC89C52 单片机适合于许多较为复杂控制应用场合。STC89C52单片机为40引脚双列直插芯片,有四个I/O口P0、P1、P2、P3,每一条I/O线都能独立地作输出或输入。STC89C52 PDIP管脚封装,如图2所示。 图2 STC89C52单片机内部引脚封装图STC89c5
3、2包含以下部分:(1)一个8位微处理器CPU(2)片内数据存储器RAM和特殊功能寄存器SFR(3)片内程序存储器ROM(4)两个定时/计数器T0、T1,可用作定时器,也可用以对外部脉冲进行计数(5)四个8位可编程的并行I/O端口,每个端口既可作输入,也可作输出(6)一个串行端口,用于数据的串行通信(7)中断控制系统(8)内部时钟电路 2.2 DS18B20温度传感器(1) DS18B20的主要特征: 全数字温度转换及输出。 先进的单总线数据通信。 最高12位分辨率,精度可达土0.5摄氏度。 12位分辨率时的最大工作周期为750毫秒。 多样封装形式,适应不同硬件系统。(2) DS18B20内部结
4、构:图3 DS18B20内部结构框图温度传感器DS18B20的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图2.4所示。2.3 蜂鸣器的报警原理(三极管驱动的蜂鸣器报警电路)图4 蜂鸣器设计原理图P1.0接三极管输入端。当P1.0输出低电平时,三极管导通,压电式蜂鸣器两端获得的+5V电压而鸣叫:当P1.0输出高电平,三极管截止,蜂鸣器停止发音。3单元电路设计3.1单片机电路图设计本系统使用儿的基于单片机的温度计的设计所以首先设计单片机的最小系统,所谓最小系统是一个真正可用的单片机的最小配置系统。由于本次设计所是用的stc8
5、9c52单片机片内不能集成始终电路所需的晶体振荡器,也没有复位电路,在构成最小系统时必须外接这些部件。电路设计如下,其中电容为22PF ,晶振为12MHZ。图5 单片机原理图 3.2温度传感器DS18B20电路图设计主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列、各种封装形式如图 3.4 所示。其中,DQ 为数据输入/输出引脚,也可用作开漏单总线接口引脚,当被用在寄生电源工作方式下,可以向器件提供电源;GND为地信号;VDD为可选择的电源引脚,当工作于寄生电源时,此引脚必须接地。其电路图6所示。图6 DS18B20温度传感
6、器设计图 3.3蜂鸣器电路图设计压电式蜂鸣器约10mA的驱动电流,可以使用TTL系列集成电路7406或7407低电平驱动,这里我选用了一个三极管来做驱动。P1.0接三极管输入端。当P1.0输出低电平时,三极管导通,压电式蜂鸣器两端获得的+5V电压而鸣叫:当P1.0输出高电平,三极管截止,蜂鸣器停止发音。图7 蜂鸣器设计原理图4软件设计 4.1 流程图设计图8 程序设计流程图4.2 程序设计温度报警系统端口说明公共端是P2.0-P2.3,数码管显示用P0口ds18B20是P3.6,蜂鸣器P3.7, set按键是P3.1, 减法键是P3.2,加法键是P3.3DS18B20.C/*程序名称:DS18
7、B20温度测量、报警系统简要说明:DS18B20温度计,温度测量范围099.9摄氏度 可设置上限报警温度、下限报警温度 即高于上限值或者低于下限值时蜂鸣器报警 默认上限报警温度为38、默认下限报警温度为5 报警值可设置范围:最低上限报警值等于当前下限报警值 最高下限报警值等于当前上限报警值 将下限报警值调为0时为关闭下限报警功能 */#include #include DS18B20.h #define uint unsigned int#define uchar unsigned char /宏定义#define SET P3_1 /定义调整键#define DEC P3_2 /定义减少键#
8、define ADD P3_3 /定义增加键#define BEEP P3_7 /定义蜂鸣器bit shanshuo_st; /闪烁间隔标志bit beep_st; /蜂鸣器间隔标志sbit DIAN = P07; /小数点uchar x=0; /计数器signed char m; /温度值全局变量uchar n; /温度值全局变量uchar set_st=0; /状态标志signed char shangxian=38; /上限报警温度,默认值为38signed char xiaxian=5; /下限报警温度,默认值为38uchar code LEDData=0x3F,0x06,0x5B,0
9、x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,;/*延时子程序*/void Delay(uint num)while( -num );/*初始化定时器0*/void InitTimer(void)TMOD=0x1;TH0=0x4c;TL0=0x00; /50ms(晶振11.0592M)/*定时器0中断服务程序*/void timer0(void) interrupt 1TH0=0x4c;TL0=0x00;x+;/*外部中断0服务程序*/void int0(void) interrupt 0EX0=0; /关外部中断0if(DEC=0&set_st=1)shangxian-
10、;if(shangxianxiaxian)shangxian=xiaxian;else if(DEC=0&set_st=2)xiaxian-;if(xiaxian99)shangxian=99;else if(ADD=0&set_st=2)xiaxian+;if(xiaxianshangxian)xiaxian=shangxian; /*读取温度*/void check_wendu(void)uint a,b,c;c=ReadTemperature()-5; /获取温度值并减去DS18B20的温漂误差a=c/100; /计算得到十位数字b=c/10-a*10; /计算得到个位数字m=c/10;
11、 /计算得到整数位n=c-a*100-b*10; /计算得到小数位if(m99)m=99;n=9; /设置温度显示上限 /*显示开机初始化等待画面*/Disp_init() P0 = 0x40; /显示-P2 = 0x08;Delay(200);P2 = 0x04;Delay(200); P2 = 0x02;Delay(200);P2 = 0x01;Delay(200);P2 = 0x00; /关闭显示/*显示温度子程序*/Disp_Temperature() /显示温度P0 =0x39; /显示CP2 = 0x08;Delay(300);P0 =LEDDatan; /显示个位P2 = 0x0
12、4;Delay(300);P0 =LEDDatam%10; /显示十位DIAN =1; /显示小数点P2 = 0x02;Delay(300);P2 = 0x00; /关闭显示Disp_alarm(uchar baojing) /*显示报警温度子程序*/P0 =0x39; /显示CP2 = 0x08;Delay(200);P0 =LEDDatabaojing%10; /显示十位P2 = 0x04;Delay(200);if(set_st=1)P0 =0x76;else if(set_st=2)P0 =0x38; /上限H、下限L标示P2 = 0x01;Delay(200);P2 = 0x00;
13、/关闭显示void Alarm()/*报警子程序*/if(x=10)beep_st=beep_st;x=0;if(m=shangxian&beep_st=1)|(mxiaxian&beep_st=1)BEEP=0;else BEEP=1;void main(void) /*主函数*/ uint z;InitTimer(); /初始化定时器EA=1; /全局中断开关TR0=1;ET0=1; /开启定时器0IT0=1; IT1=1;check_wendu();check_wendu();for(z=0;z2)set_st=0;if(set_st=0) EX0=0; /关闭外部中断0 EX1=0;
14、/关闭外部中断1 check_wendu(); Disp_Temperature(); Alarm(); /报警检测else if(set_st=1) BEEP=1; /关闭蜂鸣器 EX0=1; /开启外部中断0 EX1=1; /开启外部中断1 if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(shangxian);else if(set_st=2) BEEP=1; /关闭蜂鸣器 EX0=1; /开启外部中断0 EX1=1; /开启外部中断1 if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(xiaxian); /*END*/5 小结89S52 芯片控制温度传感器DS18B20,再辅之以部分外围电路实现对环境温度的测控,性能稳定,精度教高,而且扩展性能很强大。由于DS18B20的测量精度只有0.5 度,往往很多场合需要更加精确的温度,在所测温度精度不变的基础上必须对数据进行校正。由于DS18B20 是基于带隙结构的数字式温度传感器,PN 结增量电压正比于IC 绝对温度(PTAT),它的测温精度较高,但存在着一定的误差.不过,其误差在时间和外部环境变化的条件下,保持相当高的稳定性。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1