1、摘要摘 要: 随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度。本文通过采用蜂鸣器作为电声元件的温度报警器的设计,阐明了该装置进行设计与制作的具体过程及方法。这种温度报警器结构简单,可操作性强,应用广泛。工作时,温度测量范围为538。当前环境温度若超过设定的高温临界温度,由单片机发出报警信号,从而防止带来的不必要的损失。造成高温火灾有:电气线路短路、过载、接触电阻过大等引发高温或火灾;静电产生高温或或火灾;雷电等强电侵入导致高温或火灾;最主要是机房内电脑、空调等用电设备长时间工作,导致设备老化,空调发生故障,而不能降温;因此机房内所属的电子产品发热快,在短时间内
2、机房温度升高超出设备正常温度,导致系统瘫痪或产生火灾,这时温度报警系统就会发挥应有的功能。关键词:STC89C51单片机,数字控制,温度计,DS18B20目 录摘要11 设计要求与方案论证31.1 设计要求31.2 基本方案31.2.1 单片机芯片的选择31.2.2 温度传感器设计32 主要元件介绍42.1 STC89C51介绍42.1.1 STC89C51引脚介绍42.1.2 单片机最小系统:52.2 DS18B20传感器介绍52.2.1 DS18B20引脚介绍62.2.2 DS18B20的内部结构62.3 数码管介绍72.3.1 数码管概述73 软件部分83.1程序流程图83.2 程序.
3、8结论15参考文献16附录 原理图17- 1 -1 设计要求与方案论证1.1 设计要求基本范围0-99 ;数码管直读显示;扩展功能:可以任意设定温度的上下限报警功能。1.2 基本方案 1.2.1 单片机芯片的选择由于单片机具有以下的很多优点,被我们选定为制作该作品的首选芯片单片机特点:(1)高集成度,体积小,高可靠性 (2)控制功能强 (3)低电压,低功耗,便于生产便携式产品 (4)易扩展 (5)优异的性能价格比 本设计采用STC89C51芯片作为硬件核心。STC89C51内部具有8KB ROM 存储空间,512字节数据存储空间,带有2K字节的EEPROM存储空间,可以通过串口下载数据。1.2
4、.2 温度传感器设计温度传感器是温度测量仪表的核心部分,品种繁多。按测量方式可分为接触式和非接触式两大类,按照传感器材料及电子元件特性分为热电阻和热电偶两类。温度传感器的发展大致经历了以下三个阶段;(1)传统的分立式温度传感器(含敏感元件);(2)模拟集成温度传感器/控制器;(3)智能温度传感器。国际上新型温度传感器正从模拟式向数字式、由集成化向智能化、网络化的方向发展。由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行 A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到 A/D 转换
5、电路,感温电路比较麻烦。进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器 DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。2 主要元件介绍2.1 STC89C51介绍2.1.1 STC89C51引脚介绍 主电源引脚(2根)VCC(Pin40):电源输入,接5V电源GND(Pin20):接地线外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片
6、机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。可编程输入/输出引脚(32根)STC89C51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。P0口(Pin39Pin32):8位双向I/O口线,名称为P0.0P0.7P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7 P2口(Pin21Pin28):8位准双向I/O口线,名称为P2.0P2.7 P3
7、口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.7图1:STC89C51封装图2.1.2 单片机最小系统当在STC89C51单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作,按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经过电阻与电源VCC接通而实现的。最小系统如图2所示。图2 单片机最小系统电路电路以STC89C51单片机最小系统为控制核心,测温电路由DS18B20提供,输入部分采用三个独立式按键S1、S2、S3。数码管显示部分。具体电路连接,见附录1。2.2 DS18B20传感器介绍2.2.1 DS18B20引脚介绍图3:D
8、S18B20引脚各引脚功能为:I/O为数据输入/输出端(即单线总线),它属于漏极开路输出,外接上拉电阻后,常态下呈高电平。UDD是可供选用的外部电源端,不用时接地,GND为地,NC空脚。2.2.2 DS18B20的内部结构DS18B20的内部结构主要包括7部分:寄生电源、温度传感器、64位激光(loser)ROM与单线接口、高速暂存器(即便筏式RAM,用于存放中间数据)、TH触发寄存器和TL触发寄存器,分别用来存储用户设定的温度上下限值、存储和控制逻辑、位循环冗余校验码(CRC)发生器。图4:DS18B20内部结构2.3 数码管介绍数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段
9、数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管; 按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段
10、就点亮,当某一字段的阳极为低电平时,相应字段就不亮。2.3.1 数码管概述图5:数码管数码显示器是一种由LED发光二极管组合显示字符的显示器件,它使用了8个Led发光二极管,其中七个用于显示字符,一个显示小数点,所以通称为七段发光二极管数码显示器。4位一体数码管,其内部段已连接好,引脚如图所示(数码管的正面朝自己,小数点在下方)。a、b、c、d、e、f、g、dp为段引脚,S1、S2、S3、S4分别表示四个数码管的位。3 软件设计3.1 程序流程图图6:程序流程图3.2 程序#include #define uint unsigned int#define uchar unsigned char
11、 /宏定义#define SET P3_1 /定义调整键#define DEC P3_2 /定义减少键#define ADD P3_3 /定义增加键#define BEEP P3_6 /定义蜂鸣器#define ALAM P1_2/定义灯光报警#define DQ P3_7 /定义DS18B20总线I/Obit shanshuo_st; /闪烁间隔标志bit beep_st; /蜂鸣器间隔标志sbit DIAN = P05; /小数点uchar x=0; /计数器signed char m; /温度值全局变量uchar n; /温度值全局变量uchar set_st=0; /状态标志signe
12、d char shangxian=38; /上限报警温度,默认值为38signed char xiaxian=5; /下限报警温度,默认值为 5/uchar code LEDData=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff;uchar code LEDData=0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B;=/=DS18B20=/*延时子程序*/void Delay_DS18B20(int num) while(
13、num-) ;/*初始化DS18B20*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 Delay_DS18B20(8); /稍做延时 DQ = 0; /单片机将DQ拉低 Delay_DS18B20(80); /精确延时,大于480us DQ = 1; /拉高总线 Delay_DS18B20(14); x = DQ; /稍做延时后,如果x=0则初始化成功,x=1则初始化失败 Delay_DS18B20(20);/*读一个字节*/unsigned char ReadOneChar(void) unsigned char i=0;
14、 unsigned char dat = 0; for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; Delay_DS18B20(4); return(dat);/*写一个字节*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; Delay_DS18B20(5); DQ = 1; dat=1; /*读取温度*/unsigned int ReadTemperatu
15、re(void) unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0x44); /启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器 a=ReadOneChar(); /读低8位 b=ReadOneChar(); /读高8位 t=b; t=8; t=t|a; tt=t*0.
16、0625; t= tt*10+0.5; /放大10倍输出并四舍五入 return(t);/=/*延时子程序*/void Delay(uint num) while( -num );/*初始化定时器0*/void InitTimer(void)TMOD=0x1;TH0=0x3c;TL0=0xb0; /50ms(晶振12M)/*读取温度*/void check_wendu(void)uint a,b,c;c=ReadTemperature()-5; /获取温度值并减去DS18B20的温漂误差a=c/100; /计算得到十位数字b=c/10-a*10; /计算得到个位数字m=c/10; /计算得到整
17、数位n=c-a*100-b*10; /计算得到小数位if(m99)m=99;n=9; /设置温度显示上限 /*显示开机初始化等待画面*/void Disp_init(void) P0 = 0x80; /显示-P2 = 0x7F;Delay(200);P2 = 0xDF;Delay(200); P2 = 0xF7;Delay(200);P2 = 0xFD;Delay(200);P2 = 0xFF; /关闭显示/*显示温度子程序*/void Disp_Temperature(void) /显示温度P0 = 0x98; /显示CP2 = 0x7F;Delay(400);P0=LEDDatan; /显
18、示个位P2 = 0xDF;Delay(400);P0 =LEDDatam%10; /显示十位DIAN = 0; /显示小数点P2 = 0xF7;Delay(400);P0 =LEDDatam/10; /显示百位P2 = 0xFD;Delay(400);P2 = 0xff; /关闭显示/*显示报警温度子程序*/void Disp_alarm(uchar baojing)P0 =0x98; /显示CP2 = 0x7F;Delay(200);P0 =LEDDatabaojing%10; /显示十位P2 = 0xDF;Delay(200);P0 =LEDDatabaojing/10; /显示百位P2
19、= 0xF7;Delay(200);if(set_st=1)P0 =0xCE;else if(set_st=2)P0 =0x1A; /上限H、下限L标示P2 = 0xFD;Delay(200);P2 = 0xff; /关闭显示/*报警子程序*/void Alarm()if(x=10)beep_st=beep_st;x=0;if(m=shangxian&beep_st=1)|(mxiaxian&beep_st=1)BEEP=0;ALAM=0;elseBEEP=1;ALAM=1;/*主函数*/void main(void) uint z; InitTimer(); /初始化定时器 EA=1; /全
20、局中断开关 TR0=1; ET0=1; /开启定时器0 IT0=1; IT1=1; check_wendu(); check_wendu(); for(z=0;z2)set_st=0; if(set_st=0) EX0=0; /关闭外部中断0 EX1=0; /关闭外部中断1 check_wendu(); Disp_Temperature(); Alarm(); /报警检测 else if(set_st=1) BEEP=1; /关闭蜂鸣器 ALAM=1; EX0=1; /开启外部中断0 EX1=1; /开启外部中断1 if(x=10)shanshuo_st=shanshuo_st;x=0; if
21、(shanshuo_st) Disp_alarm(shangxian); else if(set_st=2) BEEP=1; /关闭蜂鸣器 ALAM=1; EX0=1; /开启外部中断0 EX1=1; /开启外部中断1 if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(xiaxian); /*定时器0中断服务程序*/void timer0(void) interrupt 1 TH0=0x3c; TL0=0xb0; x+;/*外部中断0服务程序*/void int0(void) interrupt 0 EX0=0; /
22、关外部中断0 if(DEC=0&set_st=1) doDisp_alarm(shangxian); while(DEC=0); shangxian-; if(shangxianxiaxian)shangxian=xiaxian; else if(DEC=0&set_st=2) doDisp_alarm(xiaxian); while(DEC=0); xiaxian-; if(xiaxian99)shangxian=99; else if(ADD=0&set_st=2) doDisp_alarm(xiaxian); while(ADD=0); xiaxian+; if(xiaxianshang
23、xian)xiaxian=shangxian; 结论通过对自己这学期所学的知识的回顾,并充分发挥对所学知识的理解和对课程设计的思考及书面表达能力,最终完成了本设计。这为自己今后进一步深化学习,积累了一定宝贵的经验。本次论文设计,使我加深了对单片机的认识,并且熟悉了单片机系统的设计流程,收获丰硕。技术在不断进步,机械式时钟已经被淘汰,电子时代已经到来。做为新时代的我们,更应该提高自身能力,适应新时代的发展。知识来自实践,多从生活中探寻所需要的。参考文献1 陈权昌,李兴富.单片机原理及应用M.广州:华南理工大学出版社,2007.841022 李庆亮.C语言程序设计实用教程M.北京:机械工业出版社,2005.32583 杨志忠.数字电子技术M.北京:高等教育出版社,2003.1251324 及力.Protel 99 SE原理图与PCB设计教程M.北京:电子工业出版社,2007.891505 徐江海.单片机实用教程M.北京:机械工业出版社,2006.1281566 胡宴如.模拟电子技术M.北京:高等教育出版社,2008.601047 汪文,陈林.单片机原理及应用M.湖北:华中科技大学出版社,2007.36688 康华光.电子技术基础数字部分M.北京:高等教育出版社,2008.2032099 杨欣电子设计从零开始M.北京:清华大学出版社,2005.28102附录 原理图- 16 -