版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 单片机课程设计 设计题目 单片机设计的温度报警器 学院名称 电气学院 指导教师 班 级 学 号 学生姓名 摘 要 随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于STC89C52单片机的温度报警系统,详细描述了利用温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集和显示,并可根据需要任意设定报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生
2、活和工、农业生产中的温度控制,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与STC89C52结合实现最简温度控制系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度的控制,有广泛的应用前景。关键词:单片机,温度报警,STC89C52,DS18B20 目 录一引言.1二设计内容及性能指标.1三系统器件的选择.1 3.1主控制器模块 .1 3.2温度测量 .2 3.3设置温度 .3 3.4显示设置 .3 3.5电源选取 .4四硬件实现及单元电路设计 .44.1主控制模块 .44.2显示模块电路.44.3数码管显示驱动电路.54.4温度传感器电路 .54
3、.5 蜂鸣器和发光二极管报警电路.6五系统软件设计 .65.1程序结构分析 .65.2系统程序流程图 .6六系统的安装与调试 .8七.结论 .8八参考文献 .8九附录 .9 单片机设计的温度报警器一引言 随着科技的不断发展,现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长,而如何准确而又迅速的获得这些参数就需要受制于现代信息基础的发展水平。在三大信息信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域已经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生
4、产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和温度报警装置具有重要的意义。本文将介绍智能集成温度传感器DS18B20的结构特征及控制方法,并对以此传感器,STC89C52单片机为控制器构成的数字温度控制装置的工作原理及程序设计作详细的介绍。该设计控制器使用STC89C52单片机,测温传感器使用DALLAS公司DS18B20,用数码管来实现温度显示。2 设计内容及性能指标 本设计主要介绍了单片机控制下的温度报警系统,其主要功能和指标如下:单片机实时检测温度传感器DS18B20的状态,并将DS18820得到的数据进行处理,上电后数码管显示当前的环境温度,通过按键
5、可设置高低温报警值,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同时报警灯闪烁,温度检测精确到0.1度,进入设置界面后,如果没有键按下系统会在15秒后自动退出设置界面。三系统器件的选择该系统主要由温度测量和温度设置及系统状态显示三部分电路组成,下面介绍实现此系统功能的方案。3.1主控制器模块采用STC89C52单片机作为整个系统的核心,STC89C52单片机是以51内核为主的系列单片机,STC单片机是宏晶生产的单时钟/机器周期的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快812倍,内部集成MAX810专用复位电路。4路PWM 8路高速10
6、位A、D转换,针对电机控制,强干扰场合。STC89C52单片机引脚如下图: 图1 STC89C52引脚图STC89C52RC单片机主要性能:高速:1 个时钟/ 机器周期,增强型8051 内核,速度比普通8051 快812 倍宽电压:5.53.8V,2.43.8V(STC12LE5410AD 系列)低功耗设计:空闲模式,掉电模式(可由外部中断唤醒)工作频率:035MHz,相当于普通8051:0420MHz- 实际可到48MHz,相当于8051: 0576MHz时钟:外部晶体或内部RC 振荡器可选,在ISP 下载编程用户程序时设置 16K 字节片内Flash 程序存储器,擦写次数10 万次以上 5
7、12 字节片内RAM 数据存储器芯片内EEPROM 功能 ISP / IAP,在系统可编程/ 在应用可编程,无需编程器/ 仿真器 10 位ADC,8 通道, STC12C5A16S2 系列为8 位ADC。4 路PWM 还可当4 路D/A 使用 2 个硬件16 位定时器,兼容普通8051 的定时器。4 路PCA 还可再实现4 个定时器硬件看门狗(WDT)高速SPI 通信端口全双工异步串行口(UART),兼容普通8051 的串口先进的指令集结构,兼容普通8051指令集4 组8 个8 位通用工作寄存器(共32 个通用寄存器)有硬件乘法/ 除法指令通用I/O 口(27/23/15 个),复位后为: 准
8、双向口/ 弱上拉(普通8051 传统I/O 口)可设置成四种模式:准双向口/ 弱上拉,推挽/ 强上拉,仅为输入/ 高阻,开漏每个I/O 口驱动能力均可达到20mA,但整个芯片最大不得超过55mA。3.2温度测量采用数字温度芯片DS18B20 测量实际温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器STC89C52构成的温度测量装置,它直接输出温度的数字信号。 图2外部封装形式 图3传感器电路图 DS18B20的性能特点如下:(1)独特的单线接口仅需要一个端口引脚进行通信;(
9、2)多个DS18B20可以并联在惟一的三线上,实现多点组网功能; (3)无须外部器件; (4)可通过数据线供电,电压范围为3.05.5; (5)零待机功耗; (6)温度以或位数字; (7)用户可定义报警设置; (8)报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; (9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;3.3设置温度采用键盘输入设置温度,键盘则可以用4个按键,一个复位键,一个功能设定键,一个加减一个减键。四个键比较常用,而且用到的接口得到了极好的利用,仅需要4个接口。3.4显示设置用数码管进行显示,数码管由于显示速度快,使用简单,显示效果简洁明
10、了而得到了广泛应用。3.5电源选取采用3节1.5 V干电池共4.5V做电源,经过实验验证系统工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电池更换方便。四硬件实现及单元电路设计4.1主控制模块主控制电路如图: 图4 主控电路4.2显示模块电路显示电路如图: 图5数码管显示4.3数码管显示驱动电路 三极管8550来驱动4位数码管,不仅简单,而且价格便宜。 图6驱动电路4.4温度传感器电路4.4.1 DS18B20供电方式DS18B20可以采用两种方式供电,一种是采用电源供电方式,另一种是寄生电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。P2.2口接单线总线
11、,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个上拉电阻和STC89C52的P2.2来完成对总线的上拉。4.4.2温度传感器的电路电路如图所示: 图7温度传感器电路引脚图4.4.3DS18B20控制方法DS18B20有六条控制命令:温度转换 44H 启动DS18B20进行温度转换 读暂存器 BEH 读暂存器9个字节内容 写暂存器 4EH 将数据写入暂存器的TH、TL字节 复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中 重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节 读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给
12、主CPU 4.5 蜂鸣器和发光二极管报警电路电路如图所示: 图8蜂鸣器和发光二级管驱动引脚图五系统软件设计5.1程序结构分析主程序调用了3个子程序,分别是数码管显示程序、温度信号处理程序、按键设定报警温度程序。温度信号处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。数码管显示程序:向数码管的显示送数,控制系统的显示部分。按键设定程序:可以设定低温和高温报警,可精确到0.1度。5.2系统程序流图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次,这样可以在一秒之内测量一次,被测温度与设定的报警温度比较。通过调用读温度子程序把存入内存
13、储中的整数部分与小数部分开分存放在不同的两个单元中,然后通过调用显示子程序显示出来。 图9主程序流程图5.2.1DS18B20初始化程序流程图在DS18B20工作之前需要进行初始化,流程图如下:发复位命令发跳过ROM命令 初始化成功 结束 图10初始化程序流程图5.2.2读温度子程序流程图 读温度子程序的主要功能是从DS18B20中读出温度数据,移入温度暂存器保存。其程序流程图如下:发复位命令发跳过ROM命令 发读取温度命令 移入温度暂存器 结束 图11温度子程序流程图六系统的安装与调试按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。特别是容易损坏的
14、元件要后焊,在焊集成芯片时连续焊接时间不要超过10s,注意芯片的安装方向,然后烧入程序,看显示正不正常。七结论 本温度报警器,通过单片机实时检测温度传感器DS18B20的状态,并将DS18820得到的数据进行处理。上电后数码管显示当前的环境温度,通过按键可设置高低温报警值,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同时报警灯闪烁,温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面。由于采用了3节干电池供电使系统的抗干扰性得到加强。在软件上,充分利用了STC89C52的系统资源,系统运行流畅。八参考文献
15、1.李广第,朱月秀,冷祖祁编.单片机基础(第三版).北京:北京航空航天大学出版社,2007;2.刘坤、宋戈、赵洪波、张宪栋编51单片机C语言应用开发技术大全,北京:人民邮电出版社,2008;3.谭浩强著C程序设计北京:清华大学出版社,2007;4.金发庆等编. 传感器技术与应用.北京机械工业出版社,2002九附录附录1 电路原理图附录2 元器件清单 型号原件序列原件参数值 数量 R14电阻10k1 C1电容10uF1 Y1晶振12M1 D1指示灯D1 DS1数码管DS041 P2电源接口Header21 SW1电源开关sw-灰色1 U1单片机U11 B1蜂鸣器B11Q1,Q2,Q3,Q4,Q5
16、三极管85505C2,C3电容202S1,S2,S3,S4独立按键SW-PB4R4,R5,R6,R7,R13,R15电阻2K6R1,R2,R3,R8,R9,R10,R11,R12电阻1K8U2温度传感器18B201附录3 仿真图附录4源程序#include <reg52.h>#include "eepom52.h"#define uchar unsigned char #define uint unsigned int/数码管段选定义 0 1 2 3 4 56 7 8 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x9
17、2,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; /断码/数码管位选定义uchar code smg_we=0xef,0xdf,0xbf,0x7f;uchar dis_smg8 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8;uchar smg_i = 3; /显示数码管的个位数sbit dq = P24;/18b20 IO口的定义sbit beep = P25; /蜂鸣器IO口定义uchar a_a;uint temperature ; bit flag_300ms ;uchar key_
18、can; /按键值的变量uchar menu_1; /菜单设计的变量uint t_high = 300,t_low = 100;bit flag_lj_en; /按键连加使能bit flag_lj_3_en; /按键连3次连加后使能 加的数就越大了 uchar key_time,flag_value; /用做连加的中间变量bit key_500ms ;uchar flag_clock;uchar zd_break_en,zd_break_value; /自动退出设置界面/*1ms延时函数*/void delay_1ms(uint q)uint i,j;for(i=0;i<q;i+)for
19、(j=0;j<120;j+);/*小延时函数*/void delay_uint(uint q)while(q-);/*数码显示函数*/void display()uchar i;for(i=0;i<smg_i;i+) P3 = smg_wei; /位选P1 = dis_smgi; /段选 delay_1ms(1); P3 = 0xff; /位选P1 = 0xff; /消隐 /*把数据保存到单片机内部eepom中*/void write_eepom()SectorErase(0x2000);byte_write(0x2000, t_high % 256);byte_write(0x2
20、001, t_high / 256);byte_write(0x2002, t_low % 256);byte_write(0x2003, t_low / 256);byte_write(0x2055, a_a);/*把数据从单片机内部eepom中读出来*/void read_eepom()t_high = byte_read(0x2001);t_high <<= 8;t_high |= byte_read(0x2000);t_low = byte_read(0x2003);t_low <<= 8;t_low |= byte_read(0x2002);a_a = byt
21、e_read(0x2055);/*18b20初始化函数*/void init_18b20()bit q;dq = 1;/把总线拿高delay_uint(1); /15usdq = 0;/给复位脉冲delay_uint(80);/750usdq = 1;/把总线拿高 等待delay_uint(10);/110usq = dq;/读取18b20初始化信号delay_uint(20);/200usdq = 1;/把总线拿高 释放总线/*写18b20内的数据*/void write_18b20(uchar dat)uchar i;for(i=0;i<8;i+) /写数据是低位开始dq = 0;
22、/把总线拿低写时间隙开始 dq = dat & 0x01; /向18b20总线写数据了delay_uint(5); / 60usdq = 1; /释放总线dat >>= 1;/*读取18b20内的数据*/uchar read_18b20()uchar i,value;for(i=0;i<8;i+)dq = 0; /把总线拿低读时间隙开始 value >>= 1; /读数据是低位开始dq = 1; /释放总线if(dq = 1) /开始读写数据 value |= 0x80;delay_uint(5); /60us读一个时间隙最少要保持60us的时间retur
23、n value; /返回数据/*读取温度的值 读出来的是小数*/uint read_temp()uint value;uchar low; /在读取温度的时候如果中断的太频繁了,就应该把中断给 关了,否则会影响到18b20的时序init_18b20(); /初始化18b20write_18b20(0xcc); /跳过64位ROMwrite_18b20(0x44); /启动一次温度转换命令delay_uint(50); /500usinit_18b20(); /初始化18b20write_18b20(0xcc); /跳过64位ROMwrite_18b20(0xbe); /发出读取暂存器命令EA
24、= 0;low = read_18b20(); /读温度低字节value = read_18b20(); /读温度高字节EA = 1;value <<= 8; /把温度的高位左移8位value |= low; /把读出的温度低位放到value的低八位中value *= 0.625; /转换到温度值 小数return value; /返回读出的温度 带小数/*定时器0初始化程序*/void time_init() EA = 1; /开总中断TMOD = 0X01; /定时器0、定时器1工作方式1ET0 = 1; /开定时器0中断 TR0 = 1; /允许定时器0定时/*独立按键处理函
25、数*/void key()static uchar key_new = 0,key_old = 0,key_value = 0;if(key_new = 0) /按键松开的时候做松手检测if(P2 & 0x0f) = 0x0f)key_value +;else key_value = 0;if(key_value >= 10)write_eepom();key_value = 0;key_new = 1;flag_lj_en = 0;/关闭连加使能flag_lj_3_en = 0;/关闭3秒后使能flag_value = 0;/清零else if(P2 & 0x0f) !
26、= 0x0f)key_value +; /按键按下的时候else key_value = 0;if(key_value >= 7)key_value = 0;key_new = 0;flag_lj_en = 1; /连加使能zd_break_en = 1; /自动退出设置界使能zd_break_value = 0; /自动退出设置界变量清零key_can = 20;if(key_500ms = 1)key_500ms = 0;zd_break_en = 1; /自动退出设置界使能zd_break_value = 0; /自动退出设置界变量清零key_new = 0;key_old = 1
27、;if(key_new = 0) && (key_old = 1)switch(P2 & 0x0f)case 0x0e: key_can = 4; break; /得到k1键值case 0x0d: key_can = 3; break; /得到k2键值case 0x0b: key_can = 2; break; /得到k3键值case 0x07: key_can = 1; break; /得到k4键值 key_old = key_new; /*按键处理数码管显示函数*/void key_with()if(key_can = 4)menu_1 +;if(menu_1 &g
28、t;= 3)menu_1 = 0;if(menu_1 = 0)dis_smg0 = smg_dutemperature % 10; /取温度的小数显示dis_smg1 = smg_dutemperature / 10 % 10 & 0x7f; /取温度的个位显示dis_smg2 = smg_dutemperature / 100 % 10 ; /取温度的十位显示smg_i = 3;if(menu_1 = 1)dis_smg0 = smg_dut_high % 10; /取小数显示dis_smg1 = smg_dut_high / 10 % 10 & 0x7f; /取个位显示di
29、s_smg2 = smg_dut_high / 100 % 10 ; /取low十位显示dis_smg3 = 0x89;smg_i = 4;if(menu_1 = 2)dis_smg0 = smg_dut_low % 10; /取low小数显示dis_smg1 = smg_dut_low / 10 % 10 & 0x7f; /取个位显示dis_smg2 = smg_dut_low / 100 % 10 ; /取十位显示dis_smg3 = 0xc7;smg_i = 4;if(menu_1 = 1)/设置高温报警if(key_can = 3)if(flag_lj_3_en = 0)t_h
30、igh + ;/按键按下未松开自动加三次else t_high += 10;/按键按下未松开自动加三次之后每次自动加10if(t_high > 990)t_high = 990;dis_smg0 = smg_dut_high % 10; /取小数显示dis_smg1 = smg_dut_high / 10 % 10 & 0x7f; /取个位显示dis_smg2 = smg_dut_high / 100 % 10 ; /取十位显示dis_smg3 = 0x89; /Hif(key_can = 1)if(flag_lj_3_en = 0)t_high - ;/按键按下未松开自动加三次
31、else t_high -= 10;/按键按下未松开自动减三次之后每次自动减10if(t_high <= t_low)t_high = t_low + 1;dis_smg0 = smg_dut_high % 10; /取小数显示dis_smg1 = smg_dut_high / 10 % 10 & 0x7f; /取个位显示dis_smg2 = smg_dut_high / 100 % 10 ; /取十位显示dis_smg3 = 0x89; /H/write_eepom();if(menu_1 = 2)/设置低温报警if(key_can = 3)if(flag_lj_3_en =
32、0)t_low + ;else t_low += 10;if(t_low >= t_high)t_low = t_high - 1;dis_smg0 = smg_dut_low % 10; /取小数显示dis_smg1 = smg_dut_low / 10 % 10 & 0x7f; /取个位显示dis_smg2 = smg_dut_low / 100 % 10 ; /取十位显示dis_smg3 = 0xc7; /Lif(key_can = 1)if(flag_lj_3_en = 0)t_low - ;else t_low -= 10;if(t_low <= 10)t_low
33、 = 10;dis_smg0 = smg_dut_low % 10; /取小数显示dis_smg1 = smg_dut_low / 10 % 10 & 0x7f; /取个位显示dis_smg2 = smg_dut_low / 100 % 10 ; /取十位显示dis_smg3 = 0xc7; /L/write_eepom(); /*报警函数*/void clock_h_l()if(temperature <= t_low) | (temperature >= t_high)flag_clock = 1;elseflag_clock = 0;beep = 1;void main()temperature = read_temp();/先读出温度的值time_init(); /初始化定时器 read_eepom();if(a_a = 0xff)/新的单片机初始单片机内问EEP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年资质桥接服务合同
- 二零二五年度家庭医生签约服务及健康档案管理合同范本3篇
- 保洁合同金额变更补充协议
- 2024年黄金借款合同范例
- 安居房补租 住房合同
- 《国际工程项目中的合同变更管理研究》
- 二零二五年度国际美食文化交流合作合同3篇
- 2025名片印刷加盟合作合同
- 二零二五年度安置房项目配套商业设施合作开发合同
- 二零二五年度房地产销售合同与回款资金合规性审核协议3篇
- 期末(试题)-2024-2025学年人教PEP版英语六年级上册
- 鲜奶购销合同模板
- 申论公务员考试试题与参考答案(2024年)
- DB4101T 9.1-2023 反恐怖防范管理规范 第1部分:通则
- 2024-2030年中国公安信息化建设与IT应用行业竞争策略及投资模式分析报告
- 2024年加油站场地出租协议
- 南宁房地产市场月报2024年08月
- 2024年金融理财-担保公司考试近5年真题附答案
- 高中语文古代文学课件:先秦文学
- 人教版五年级上册递等式计算100道及答案
- 文娱产业政策与发展趋势
评论
0/150
提交评论