毕业论文设计基于单片机的温度报警器设计_第1页
毕业论文设计基于单片机的温度报警器设计_第2页
毕业论文设计基于单片机的温度报警器设计_第3页
毕业论文设计基于单片机的温度报警器设计_第4页
毕业论文设计基于单片机的温度报警器设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、河北石油职业技术学院河北石油职业技术学院电子工程 系 电气自动化专业 08 级毕业论文(设计)题目: 基于单片机的温度报警器设计姓名:陈久瑞 学号: 指导教师(签名):2011年 5月 23日基于单片机的温度控制设计摘 要 本设计实现的是单片机温度测量与控制系统,通过数码管显示所测量的温度。系统采用18b20为温度传感器,通过单片机处理进行显示,本文介绍了基于m16单片机的温度实时测量与控制系统和显示系统的设计,包括介绍了硬件结构原理,软件设计流程及其程序实现。系统结构简单、实用,提高了测量精度和效率 。可进行上限、下限温度预设,分辨率为912位的温度报警器设计,可通过高电平打开,低电平关闭,

2、在没有负载的情况下,系统可进入休眠状态。可以交替的显示所设置的上、下限温度。本设计制作方便,并通过c语言程序控制能够精准的对所测量的环境进行温度控制,实用性强。 关键字:m16 18b20 上、下限温度控制 c语言 分辨率912目 录1、 引言 41.2、设计内容及要求52单片机的相关资料72.1 单片机技术的背景情73、m16单片机概述 83.1 atmega16 单片机主要特征及基本结构 93.1.2、m16 的基本组成及引脚配置103.1.3、 m16的引脚基本功能 113.2外部晶体振荡器接线图 114、温度传感器18b20介绍 12 4.1温度传感器18b20的特性 13 4.2 温

3、度传感器18b20的基本组成13 4.3 温度传感器18b20的测温操作 145.基于单片机温度报警器设计 173.1 下位机软件流程 183.2 硬件电路实 19总结 20致谢 21参考资料、附件 22引言 在农业生产中,温室的温度很难把握。往往超过或低于允许值,致使大批良种的报废,耽误农时,影响生产。日常生活中,经常要用到高功率电器,但是高功率电器的发热量大,有时候可能引起火灾。等等之类的情况,这就需要一个温度报警器在环境温度超过一定范围时报警,来提醒使用者。经过试用和改进,温度报警器可适用于变压器超温报警、环境温度监测、配电柜温度监测及风扇自动控制、机房、仓库、鱼塘、蔬菜大棚温度监测及报

4、警等等。温度控制器目前普遍采用的几种方法:方案一:采用单总线的ds1820的温度传感器的控制仪。 方案二:采用集温湿度传感器于一体的sht11芯片为主要芯片的控制仪。 虽然sht11是瑞士sensiri-on公司生产的具有二线串行接口的单片全校准数字式新型相对湿度和温度传感器,可用来测量相对湿度、温度和露点等参数,具有数字式输出、免调试、免标定、免外围电路及全互换的特点。但是本设计只对温度控制,设计原理简单,基于经济效益的考虑此次选择传统的模拟式温度度传感器1.2 设计内容及要求 本温度报警器为超温报警,及高于选定的高温或低于选定的低温均预报警,也就是说温度超过某个选定的温度范围则报警,温度在

5、这个范围内则不报警。mcu:m16 8mhz 内部rc震荡。外观如下图所示:使用方法:打开电源开关然后按如下操作:1)下限设置: 按下“set”,进入温度上限设置,数字闪烁,同时左第1位最上面显示一横,表示上限设置,按一次“”温度值加0.1摄氏度,按一次“”,温度值减小0.1摄氏度,设置好上限; 这时再按“set”一次,进入下限温度设置,数字闪烁,同时左第1位最下面显示一横,表示是下限设置,按一次“”温度值加0.1摄氏度,按一次,温度值减小0.1摄氏度,设置好下限,再按一次“set”,退出上下限设置,并把设置好的上下限参数保存到eeprom中。 2)负载载控制开关控制: 有时不需要控制负载,就

6、是待机状态,在工作状态下,按下wait,下面的数码管会关显示,什么也不显示,表示不控制负载,这时再按下wait,又回到工作状态,设置状态也保存eeprom中,交替显示所设定的温度上下限值。2、 单片机的相关资料2.1 单片机技术的背景状况单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的cd4000系列这些纯硬件来搞定的话,电路一定是一块大pcb板,但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别。

7、只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性。目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能ic卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。 3、 m16单片机概述3.1 atmega16 单片机主要特征及基本结构3.1.1atmega16 的主要性能: 1、先进的、高性能的的8位cpu内核结构: 1)耗

8、先进的risc (精简指令集计算机)结构; 2)高速度,低功耗的 新8 位中央处理器; 2、非易失性程序和数据存储器: 3、丰富的核外功能资源电路:完善的串、并、及jtag(联合测试行动组)接口。4、电压范围宽、功率消耗低、时钟频率灵活。 5、极高的性价比和适于高级语言开发;3.1.1、m16 的基本组成及引脚配置 m16的组成结构图3.1.2、 m16的引脚基本功能1、vcc:数字电路电源(+5v)2、gnd:地(0v)3、端口a( pa7pa0) 端口a 为8 位双向i/o 口,也是a/d 转换器的模拟输入端。具有可编程的内部上拉电阻。其输出缓冲器可以输出和吸收大电流。作为输入使用时,若内

9、部上拉电阻使能,端口被外部电路拉低时将输出电流。4、端口b(pb7.pb0) 为8位双向i/o 口,具有可编程的内部上拉电阻。 作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。5、端口c(pc7.pc0) 为8 位双向i/o 口,具有可编程的内部上拉电阻。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口c 也处于高阻状态。、6、端口d(pd7.pd0) 为8位双向i/o 口,具有可编程的内部上拉电阻。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。7、reset: 复位输入引脚。8、xtal1

10、: 反相振荡放大器与片内时钟操作电路的输入端。 9、xtal2: 反相振荡放大器的输出端。10、avcc:端口a与a/d转换器的电源。11、aref:a/d 的模拟基准电压输入引脚。atmega16所有的i/o端口及外围设备都被放置于i/o专用空间。所有的i/o寄存器都可以通过in 与out指令来访问,在32个通用工作寄存器和i/o 之间传输数据。地址为0x00 - 0x1f 的前32个i/o 寄存器还可用sbi 和cbi 指令直接进行位寻址,而sbis 和sbic 则用来检查某一位的值。m16系统内可编程的flash程序存储器:atmega16具有16k字节(8k字0000-1fff)的在线

11、编程flash,用于存放程序指令代码。其结构具有两个主要的存储器空间:应用程序存储空间和引导程序存储空间。两个空间通过对应锁定位来选择,引导区程序可用spm指令再应用修3.2外部晶体振荡器接线图- 40 -图为晶体振荡器连接图 图外部rc 配置4、温度传感器18b20介绍 4.1温度传感器18b20的特性ds18b20 可以程序设定 912 位分辨率可调,适用电压为 3v5v,精度为0.5c。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在 eeprom 中,掉电后依然保存。ds18b20 的性能是新一代产品中最好的!性能价格比也非常出色!ds1822 与 ds1

12、8b20 软件兼容,是 ds18b20 的简化版本。省略了存储用户定义报警温度、分辨率参数的 eeprom,精度降低为2c,适用于对性能要求不高,成本控制严格的应用,是经济型产品。to-92、soic 及 csp 封装可选,经济型版本无 eeprom 合自己的经济的测温系统。继“一线总线”的早期产品后,ds1820 开辟了温度传感器技术的新概念。ds18b20 和 ds1822 使电压、 特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。4.2 温度传感器18b20的基本组成 说明 ds1820 数字温度计以 9 位数字量的形式反映器件的温度值。ds1820 通过一个单线接口发送

13、或接收信息,因此在中央微处理器和 ds1820 之间仅需一条连接线(加上 地线)。用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。因为每个 ds1820 都有一个独特的片序列号,所以多只 ds1820 可以同时连在一根单线总线上,这样就 可以把温度传感器放在许多不同的地方。这一特性在 hvac 环境控制、探测建筑物、仪器或机器的温度以及 过程监测和控制等方面非常有用。引脚说明16 脚 ssop pr35 符号 说明9 1gnd接地82dq数据输入/输出脚。对单线操作:漏极开路73vdd可选的 vdd 引脚。ds1820s(16 脚 ssop):所有上表中没提到的脚均接地概览图 1

14、的方框图示出了 ds1820 的主要部件。ds1820 有三个主要数字部件:1)64 位激光 rom,2)温度传 感器,3)非易失性温度报警触发器 th 和 tl。器件用如下方式从单线通讯线上汲取能量:在信号线处于高 电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再 给寄生电源(电容)充电。ds1820 也可用外部 5v 电源供电。4.3 温度传感器18b20的测温操作ds1820 通过一种片上温度测量技术来测量温度。图 4 示出了温度测量电路的方框图。ds1820 是这样测温的:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一

15、个低温度系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应于-55的一个值。如果计数器 在门周期结束前到达 0,则温度寄存器(同样被预置到-55)的值增加,表明所测温度大于-55。同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振 荡器的抛物线特性。然后计数器又开始计数直到 0,如果门周期仍未结束,将重复这一过程。斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨力。这是通过改变计数 器对温度每增加一度所需计数的的值来实现的。因此,要想获得所需的分辨力,必须同时知道在给定温度 下计数器的值和每一度的计数值。ds1820 内部对此计

16、算的结果可提供 0.5的分辨力。温度以 16bit 带符号位扩展的二进制补码形式读 出,表 1 给出了温度值和输出数据的关系。数据通过单线接口以串行方式传输。ds1820 测温范围-55+125,以 0.5递增。如用于华氏温度,必须要用一个转换因子查找表。 意 ds1820 内温度表示值为 1/2lsb,如下所示 9bit 格式最高有效(符号)位被复制充满存储器中两字节温度寄存器的高 msb 位,由这种“符号位扩展”产生出了示于表 1 的 16bit 温度读数。可用下述方法获得更高的分辨力。首先,读取温度值,将 0.5位(lsb)从读取的值中截去,这个值 叫做 temp_read。然后读取计数

17、器中剩余的值,这个值是门周期结束后保留下来的值(count_remain)。最 后,我们用到在这个温度下每度的计数值(count_per_c)。用户可以用下面的公式计算实际温度值:tempeature=temp_read-0.25=(count_per_c-count_remain)/count_per_c5、基于单片机的温度报警器设计开始读取温度值 并送显示缓冲值读取上下限值 否.初始化端口是写、读eeprom一个字节写eeprom上下限设置数据读按键,返回键值按键检测和设置超上限关负载超下限开负载关负载程序流程图5.1 硬件电路实现经分析本设计的电路原理图如下图所示:总 结由于采用高效的单

18、片机作为核心,使得此温度控制器具有精度高,成本低,体积小,接口简单等优点,还具有良好抗干扰能力,再加上优化程序,使得本系统具有很高的实用性。 在设计过程中由于时间和个人能力的限制,设计中存在一些需要改进和优化的地方。测量精度有待进一步提高,软件设计也存在不合理之处。但通过此次设计对单片机有了进一步的认识,对于单片机的一些软件的操作能力也明显提高,通过此设计,本人受益颇丰。致 谢 在电子信息工程系学习期间,老师们特别是指导老师童欣老师给予了我热心的关怀和谆谆教诲,在学习和生活方面都勉励、指导我。三年来,通过学习专业知识和查阅大量的资料,我在理论方面有了很大的收获。同时在导师的指导下我的实践能力也

19、有了飞速的提高,积累了丰富的经验,使自己在工作岗位上能迅速地将所学的知识和技能服务于社会,另外在我的论文完成的整个过程中,凝结了童欣老师的智慧和心血,童欣老师以他渊博的知识、丰富的经验和严谨的治学态度指导我顺利完成了论文。在此谨向童欣老师致以深深地谢意!衷心感谢各位任课老师对我学业上的教导和帮助。给我提供了良好的学习环境以及各方面无微不至的关怀,帮助我很好的完成了学业。同时,感谢学习期间给过我帮助的同学和同事。参考文献:1 文生平.赵国平.江剑强 基于matlab的熔体温度控制设计研究 2007(6)2 王宝库 多功能检测控制系统的设计 2006(4-1)3 赵亮.赵国锐 单片机c语言编程与实

20、例 20034 谢自美. 电子线路设计*实验*测试m.华中科技大学出版社. 5 张友德等. 单片微型机原理、应用和实验m.电子工业出版社. 6吴经国等.单片机应用技术m. 中国电力出版社. 7李群芳.单片机微型计算机与接口技术m.电子工业出版社. 8阉石.数字电子技术基础m.高等教育出版社. 9 黄智伟.全国大学生电子设计竞赛训练教程m.电子工业出版社. 10 周立功.单片机实验与实践m.北京航空航天大学出版社. 附件:原程序:/*/温度报警系统/mcu:m16 8mhz 内部rc震荡/2010年12月10号/18脚控制继电器负载,高电平打开,低电平关闭/脚蜂鸣器控制,长鸣为高温报警,短鸣为低

21、温报警/*/宏定义#include /包含型号头文件#include /包含位操作头文件#include /标准输入输出头文件#include #define clr_dir_1wire ddrd&=bit(5)/见1为1 #define set_dir_1wire ddrd|=bit(5) /见0为0#define clr_op_1wire portd&=bit(5) #define set_op_1wire portd|=bit(5) #define check_ip_1wire (pind & 0x20) /检测 #define duan1 0 / c /位扫描#define duan2

22、 1 / c#define duan3 2 / c#define duan4 3 / c#define duan5 4 / c#define duan6 5 / c#define duan7 6 / c#define duan8 7 / c#define key1 1/pb1/按键引脚#define key2 4/pb4#define key3 2/pd2#define key4 6/pd6#define keybit1 (pinb & (1key1)#define keybit2 (pinb & (1key2)#define keybit3 (pind & (1key3)#define ke

23、ybit4 (pind & (1关 保存eeprom-地址16 / 非0-开 volatile unsigned int tem; /*- 延时函数 系统时钟:8m -*/ void delay_1us(void) /1us延时函数 asm(nop); void delay_nus(unsigned int n) /n us延时函数 for(;n0;n-) asm(nop); void delay_1ms(void) /1ms延时函数 unsigned int i; for (i=0;i1140;i+); void delay_nms(unsigned int n) /n ms延时函数 uns

24、igned int i=0; for (i=0;in;i+) delay_nus(1000); /初始化18b20void init_1820() set_dir_1wire; /设置pc2 为输出 set_op_1wire; clr_op_1wire; delay_nus(580); /480us以上 set_op_1wire; clr_dir_1wire; delay_nus(25); /1560us while(check_ip_1wire); set_dir_1wire; set_op_1wire; delay_nus(140); /60240us /写18b20 void write

25、_1820(unsigned char x) unsigned char m; for(m=0;m8;m+) clr_op_1wire; if(x&(1m) /写数据了,先写低位的! set_op_1wire; else clr_op_1wire; delay_nus(40); /1560us set_op_1wire; set_op_1wire; /读18b20unsigned char read_1820() unsigned char temp,n,k; temp=0; for(n=0;n8;n+) clr_op_1wire; set_op_1wire; clr_dir_1wire; k

26、=(check_ip_1wire); /读数据,从低位开始 if(k) temp|=(1n); else temp&=(1n); delay_nus(80); /60120us set_dir_1wire; return (temp); /读取温度值 并送显示缓冲void gettemp() unsigned char temh,teml; unsigned int t; init_1820(); /复位18b20 write_1820(0xcc); / 发出转换命令 write_1820(0x44); delay_nms(200); /不延时也好使,有时会出现死机现象 init_1820()

27、; write_1820(0xcc); /发出读命令 write_1820(0xbe); teml=read_1820(); /读数据 temh=read_1820(); t = temh; t = t 8; t = t + teml; t = t * 10 /16; tem = t; disp_buff3=t%10; t = t/10; disp_buff2=t%10; t = t/10; disp_buff1=t%10; /初始化端口void init_io(void) ddra = 0xff;ddrc = 0xff;ddrd |= 0x10;porta = 0xff;portc = 0x

28、ff;ddrb &= (1key1);/低电平ddrb &= (1key2);ddrd &= (1key3);ddrd &= (1key4);portb |= (1key1);/高电平portb |= (1key2);portd |= (1key3);portd |= (1key4);/timer0 initialize - prescale:256/ desired value: 2msec/ actual value: 2.000msec (0.0%)/定时器0初始化函数void timer0_init(void) cli(); /disable all interrupts tccr0

29、= 0x00; /stop tcnt0 = 0x83; /set count ocr0 = 0x7d; /set compare tccr0 = 0x04; /start timer timsk = 0x01; /timer interrupt sources sei(); /re-enable interrupts/定时器0中断函数,大约2毫秒一次#pragma interrupt_handler timer0_ovf_isr:3void timer0_ovf_isr(void) /定时器中断最常执行时间6us tcnt0 = 0xc0; /reload counter value lie

30、+; if(lie = 8) lie = 0; portc = 0x00; switch(lie) case 0: porta = madisp_buff5;portc &= 1duan1;break;case 1: if(disp_buff6 != 18) porta = madisp_buff6 & 0xdf;/如果该位不显示,小数点也不必加 portc &= 1duan2; break;case 2: porta = madisp_buff7; portc &= 1duan3; break;case 3: porta = madisp_buff3; portc &= 1duan4; br

31、eak; case 4: porta = madisp_buff2 & 0xdf; portc &= 1duan5; break;case 5: porta = madisp_buff1; portc &= 1duan6; break;case 6: porta = madisp_buff0; portc &= 1duan7; break;case 7: porta = madisp_buff4; portc &= 1duan8; break; default:break; /写eeprom一个字节void eeprom_write(unsigned int uiaddress, unsign

32、ed char ucdata) /* 等待上一次写操作结束 */ while(eecr & (1eewe);/* 设置地址和数据寄存器*/ eear = uiaddress;eedr = ucdata;/* 置位eemwe */ eecr |= (1eemwe); /* 置位eewe 以启动写操作*/ eecr |= (1eewe);/读eeprom一个字节unsigned char eeprom_read(unsigned int uiaddress) /* 等待上一次写操作结束 */ while(eecr & (1eewe); /* 设置地址寄存器*/ eear = uiaddress;

33、/* 设置eere 以启动读操作*/ eecr |= (18); eeprom_write(10, i);i = (unsigned char)(h_off); eeprom_write(11, i);i = (unsigned char)(l_on8); eeprom_write(12, i);i = (unsigned char)(l_on); eeprom_write(13, i);/读eeprom上下限设置数据void readhl(void) unsigned int i; i = eeprom_read(10); i = i8; i = i | eeprom_read(11); h_off = i; i = eeprom_read(12); i = i 25000) timedisp1 = 0; a = readkey();if (m = 0)&(a = 2) h_off +;

温馨提示

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

评论

0/150

提交评论