单片机课程设计 简易数字温度报警系统.doc

上传人:飞****2 文档编号:66764127 上传时间:2022-12-21 格式:DOC 页数:20 大小:219.50KB
返回 下载 相关 举报
单片机课程设计 简易数字温度报警系统.doc_第1页
第1页 / 共20页
单片机课程设计 简易数字温度报警系统.doc_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《单片机课程设计 简易数字温度报警系统.doc》由会员分享,可在线阅读,更多相关《单片机课程设计 简易数字温度报警系统.doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机课程设计简易数字温度报警系统姓名:班级:学号:指导老师:完成时间:单片机课程设计任务书 班级: 姓名: 指导老师: 设计题目:简易数字温度报警系统 设计任务做一个基于单片机的简易数字温度报警系统。1. 测量温度范围:-55C125C。2. 数字显示位数为4位,显示精度为0. 1C。3. 响应时间5s。4. 上限下限值设置。5. 声光报警。设计要求1. 调研、查找并收集资料。2. 总体设计,画出框图。3. 单元电路设计:。4. 绘制电器原理图。5. 列写元器件明细表。6. 撰写设计说明书(字数约2500字左右)。7. 参考资料目录参考资料康华光主编 电子技术基础 高等教育出版社 阎石主编

2、数字电子技术基础 高等教育出版社陈坤等编著 电子设计技术 电子科技大学出版社王炳勋主编 电工实习教程 机械工业出版社教研室主任签字: 年 月 日目录1.引言.32.总体设计方案.32.1数字温度计设计方案论证.32.2方案二的总体设计框图.32.3各个电路模块电路图.82.4 系统整体硬件电路.112.5 数字温度计简要使用说明133系统软件算法分析.143.1主程序.144总结与体会.155附录.15附录1 程序代码15简易数字温度报警系统摘要:随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温

3、度计属于多功能温度计,可以设置上下报警温度。关键词:单片机,数字控制,温度计, DS18B20,ATMEGA161 引言在日常生活及工农业生产中经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调式复杂,制作成本高。随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

4、本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用ATMEL公司生产的ATMEGA16L单片机芯片1,测温传感器使用DS18B20,用4位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。2 总体设计方案2.1数字温度计设计方案论证2.1.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转

5、换电路,感温电路比较麻烦。2.1.2 方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。与方案一相比,方案二 :电路简单: DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,而热敏电阻103不能,必须要有辅助电路的处理,才能达到目的,测温精度高:对温度的测量精确值达0.5度.比热敏电阻103要精确.稳定性好:由于方案二电路结构简单,与方案一相比,少了很多附带电路,所以系统的稳定性就要高些.1能用数码

6、管显示环境温度2设定一固定温度,当环境温度达到固定温度时,启动报警。综上所述,我们选择方案二。2.2方案二的总体设计框图温度计电路设计总体设计方框图如图一所示,控制器采用ATMEGA16L单片机,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。M16 单片机控制器4个独立按键时钟震荡复位电路蜂鸣器发光二极管4位数码管温度显示声光报警18B20温度采集图一总体设计方框图2.2.1 主控制器Atmega16性能指标1) 高性能、低功耗的 8 位AVR 微处理器2) 先进的RISC 结构 131 条指令 大多数指令执行时间为单个时钟周期 32个8 位通用工作寄存器 全静态

7、工作 工作于16 MHz 时性能高达16 MIPS 只需两个时钟周期的硬件乘法器3) 非易失性程序和数据存储器 16K 字节的系统内可编程Flash擦写寿命: 10,000 次 具有独立锁定位的可选Boot 代码区通过片上Boot 程序实现系统内编程真正的同时读写操作 512 字节的EEPROM擦写寿命: 100,000 次 1K字节的片内SRAM 可以对锁定位进行编程以实现用户程序的加密4) JTAG 接口( 与IEEE 1149.1 标准兼容) 符合JTAG 标准的边界扫描功能 支持扩展的片内调试功能 通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程5) 外设特点 两

8、个具有独立预分频器和比较器功能的8 位定时器/ 计数器 一个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器 具有独立振荡器的实时计数器RTC 四通道PWM 8路10 位ADC8 个单端通道TQFP 封装的7 个差分通道2 个具有可编程增益(1x, 10x, 或200x)的差分通道 面向字节的两线接口 两个可编程的串行USART 可工作于主机/ 从机模式的SPI 串行接口 具有独立片内振荡器的可编程看门狗定时器 片内模拟比较器6) 特殊的处理器特点 上电复位以及可编程的掉电检测 片内经过标定的RC 振荡器 片内/ 片外中断源 6种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、

9、掉电模式、Standby 模式以及扩展的Standby 模式7) I/O 和封装 32 个可编程的I/O 口 40引脚PDIP 封装, 44 引脚TQFP 封装, 与44 引脚MLF 封装8) 工作电压: ATmega16L:2.7 - 5.5V ATmega16:4.5 - 5.5V9) 速度等级 0 - 8 MHz ATmega16L 0 - 16 MHz ATmega1610) ATmega16L 在1 MHz, 3V, 25C 时的功耗 正常模式: 1.1 mA 空闲模式: 0.35 mA 掉电模式: 1 AAtmega16引脚配置 图二Atmega16引脚配置2.2.2 数码管显示电

10、路采用4位共阳LED数码管。 2.2.3温度传感器 图三 18B20引脚图 图四 应用电路DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; 表一DS18

11、B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新

12、被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累表2一部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0

13、101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H2.3 各个电路模块电路图 2.3.1 DS18B20与单片机的接口电路图五 DS18B20与单片机的接口电路(注:DQ接口是单片机的PA0)DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A

14、/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。2.3.2 声光报警电路 图六 蜂鸣器驱动电路 图七 发光二极管驱动电路 蜂鸣器是由三极管驱动的,由于单片机的驱动负载能力比较差,R9是限流电阻,蜂鸣器和单片机的PC6连接,4个发光二极管分别接单片机的PA1PA5 D1是设置上限值时指示灯,D2是每按一次按键的加0.1,D3加1,D4加10,D5是设置下限值时指示灯。当超出设定值D1和D2会同时报警。2.3.3 LED显示电路 图八 数码管显示电路 此数码管驱动是由8550PNP三极管来驱动的,

15、用到四路共阳数码管,其位选端分别接PC4PC7段选端分别接单片机的PB0PB7,数码管显示是由单片机不停的对其动态扫描来实现的,注意数码管的电流不要过大。2.3.4 单片机系统电源设计 图九 电源电路根据单片机ATmega16 及其接口电路电源的要求,需要5V的稳定电源。P1脚只要接大于6V的直流电压就可以,再用三端稳压器、7805稳压并用小容量电容虑除高频纹波后得到系统所需电源。2.3.5 按键电路设计 图十 按键电路此键盘电路一端与地相连,另一端和单片机相连,单片机不停的检测各个键盘是否被拉低即被按下。S1S4接单片机的PD4PD7.最好在每个按键和单片机连接的端口加上拉电阻,增强稳定性。

16、2.3.6单片机ATmega16最小系统电路 图十一 单片机ATmega16最小系统电路单片机是用到Atmega16,晶振是8MHZ 电源5V,有按键复位2.4 系统整体硬件电路2.4.1 主板电路系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,如图1 所示。图十二中有4个独立式按键可以分别调整温度计的上下限报警设置,发出声光报警,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。图十二 中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。 表

17、三 元件清单(Alitium Designer Summer 8.0直接生成) 图十二 系统整体原理图2.5 数字温度计简要使用说明 首先接通电源,就会看到数码管显示此时的温度,若要设定上限下限值,按S1键进行设置,每按一次S2键数值就会增加,增加的幅度要看D2 D3 D4发光管哪一个亮 D2代表0.1;D3代表1;D4代表10;幅度切换键是S4,同理S3是减少键。设置完成后 按S1键就可以运行了。3系统软件算法分析系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。3.1主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的

18、当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图十四所示Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY初始化调用显示子程序1S到?初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令NYNY图十四 主程序流程图 图8读温度流程图 4总结与体会 通过这次课程设计,我更加深入的了解了单片机。虽然自己设计的电路是正确的但做出来的板子就不一定很顺利,本来我用单片机的PA6口来控制蜂鸣器的,当给低电平时三极管就会饱和导通进而驱动蜂鸣器,但是当我把它拉高是时还是会有轻微的声音,我

19、仔细查了芯片手册才知道PA口的驱动能力差 于是我换了就好了,呵呵真的在实践中能学到好多东西的。经过这两周的课程设计明白不能眼高手低。5附录1程序代码/* 主控芯片:ATmega16*晶振 8MHZ*DS18B20数据端口 DQ 接 单片机PC6*数码管的位接单片机PC47*数码管的段接单片机PB07;*蜂鸣器 接单片机的PC3;*按键S1S4 接单片机PD47;*s1 上限 下限设置*S2 数值递减*S3 数值递增*S4 数值切换编写人:张庆钢时间 :2008 12.30*/#include #include #define uchar unsigned char#define uint un

20、signed int#define DS18b20POR PORTA#define DS18b20PIN PINA#define DS18b20DDR DDRA#define DQ 0uchar shu10=0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/09 double temp, T_min=0,q=0,T_max=200,num=25,xiao=0,m=0; uchar flag=0, i,l=0,n=0; /显示延时/ void dalay(uchar k)/延时 uchar i,j; for(i=0;i0;j-);/端口出示化/

21、void port_init(void)/初始化 DDRA=0xff;PORTA=0xff; DDRB=0xff; PORTB=0xff; DDRC=0xff; PORTC=0xff;/显示函数/ void display(double tem)/显示函数 uint data_int ; double data_put,data_get; uchar i_data,j_data,k_data,l_data; data_get=tem; data_put=data_get; if(data_put1000) data_put*=10; if(data_put1000) data_put*=10;

22、 if(data_put1000) data_put*=10; else data_put=data_get; data_int=data_put; PORTC|=BIT(7); i_data=data_int/1000;/千位及小数点 PORTC&=BIT(4); PORTB=shui_data; if(data_get10) PORTB&=BIT(7); else PORTB|=BIT(7); dalay(20); PORTC|=BIT(4); j_data=data_int%1000/100; PORTC&=BIT(5); PORTB=shuj_data;/百位及小数点 if(10=da

23、ta_get&data_get100) PORTB&=BIT(7); else PORTB|=BIT(7); dalay(20); PORTC|=BIT(5); k_data=data_int%1000%100/10; PORTC&=BIT(6); PORTB=shuk_data;/十位及小数点 if(100=data_get&data_get1000) PORTB&=BIT(7); else PORTB|=BIT(7); dalay(20); PORTC|=BIT(6); l_data=data_int%10; PORTC&=BIT(7); PORTB=shul_data;/个位及小数点 i

24、f(1000=data_get&data_get9999) data_get=0; /void delay1(uint ms)/精确延时1ms uint i,j;for(i=0;ims;i+) for(j=0;j1141;j+); /判断是否有键按下/uchar key_press()/判断是否有键按下 uchar j; DDRD|=0XF0;PORTD|=0XF0;DDRD&=0XF0;j=PIND;j=j&0XF0;/if(j=0XF0) return 0;else return 1;/判断哪个键被按下的函数/uchar key_scan()/判断哪个键被按下的函数 uchar key;

25、delay1(1);/消抖if(key_press()key=PIND;key&=0XF0;switch(key) case 0XE0: key=1; break; case 0XD0: key=2; break; case 0XB0: key=3; break; case 0X70: key=4; break; default: DDRB=0xff; while(key_press();/等待按键松开else DDRB=0xff;return key;/DS18B201us延时函数void delay_(uint ms) uint i,j;for(i=0;ims;i+) for(j=0;j0

26、;i-)DS18b20DDR|=BIT(DQ); /设置为输出 DS18b20POR&=BIT(DQ); / 给脉冲信号 dat=1; DS18b20DDR|=BIT(DQ); /设置为输出 DS18b20POR|=BIT(DQ); /置高给脉冲信号 DS18b20DDR&=BIT(DQ); /设置为输入 temp=DS18b20PIN&(BIT(DQ) ; if(temp) dat|=0x80; delay_(4);return(dat);/DS18B20写一个字节/ void WriteOneChar(unsigned char dat)unsigned char i=0,j;for (i

27、=8; i0; i-)DS18b20DDR|=BIT(DQ); /设置为输出 DS18b20POR&=BIT(DQ); /置低 j = dat&0x01; if(j=1) DS18b20DDR|=BIT(DQ); /设置为输出 DS18b20POR|=BIT(DQ); /置高 else if(j=0) DS18b20DDR|=BIT(DQ); /设置为输出 DS18b20POR&=BIT(DQ); /置低 delay_(5); DS18b20DDR|=BIT(DQ); /设置为输出 DS18b20POR|=BIT(DQ); /置高 dat=1; /AVR 单片机读取温度void ReadTem

28、perature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float t1=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t=4) /*xiao=0; POR

29、TA|=BIT(2); PORTA|=BIT(3); PORTA|=BIT(4); */ n=1; T_min=num-q; display(T_min); if (flag=2) /温度上限设置 PORTA|=BIT(1); PORTA&=BIT(5); if(n=1) xiao=0.1; PORTA&=BIT(4); PORTA|=BIT(2); PORTA|=BIT(3); else if(n=2) xiao=1; PORTA&=BIT(3); PORTA|=BIT(2); PORTA|=BIT(4); else if(n=3) xiao=10; PORTA&=BIT(2); PORTA

30、|=BIT(3); PORTA|=BIT(4); if(n=4) /* xiao=0; PORTA|=BIT(2); PORTA|=BIT(3); PORTA|=BIT(4);*/ n=1; T_max=num;display(T_max);q=T_max-T_min; if(flag2) flag=0;if (flag=0) PORTA=0xFF; display(temp);if(tempT_max) /判断是否超过限定值 PORTC|=BIT(3); PORTA|=BIT(1);PORTA|=BIT(5); delay1(100); PORTC&=BIT(3); /开启蜂鸣器报警 POR

31、TA&=BIT(1);PORTA&=BIT(5); delay1(100);else PORTC|=BIT(3);PORTA|=BIT(1);PORTA|=BIT(5); void main(void) port_init(); while(1) ReadTemperature();/读温度 temp=m;/ display(temp);/显示温度 kong_zhi(); 参考文献1李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,19982李广弟.单片机基础.北京:北京航空航天大学出版社,19943阎石.数字电子技术基础(第三版). 北京:高等教育出版社,19894廖常初.现场总线概述J.电工技术,19995 马 潮. ATMEGA8原理及应用手册.北京:清华大学出版社,02.86 沈 文. AVR单片机C语言开发入门指导.北京:清华大学出版社,03.5

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁