ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:204.09KB ,
资源ID:4019447      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4019447.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程方案设计书简易数字温度报警系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程方案设计书简易数字温度报警系统.docx

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数码管以串口传送数据实现温度显示。图一总体设计方框图2.2.1 主控制器Atmega16性能指标1) 高性能、低功耗的 8 位AVR 微处理器2) 先进的RISC 结构 131 条指令 大多数指令执行时间为单个时钟周期 32个8 位通用工作寄存器 全静态工作 工作于16 MHz 时性能高达16 MIPS 只需两个时钟周期的硬件乘法器3) 非易失性程序和数据存

7、储器 16K 字节的系统内可编程Flash擦写寿命: 10,000 次 具有独立锁定位的可选Boot 代码区通过片上Boot 程序实现系统内编程真正的同时读写操作 512 字节的EEPROM擦写寿命: 100,000 次 1K字节的片内SRAM 可以对锁定位进行编程以实现用户程序的加密4) JTAG 接口( 与IEEE 1149.1 标准兼容) 符合JTAG 标准的边界扫描功能 支持扩展的片内调试功能 通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程5) 外设特点 两个具有独立预分频器和比较器功能的8 位定时器/ 计数器 一个具有预分频器、比较功能和捕捉功能的16 位定时

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

9、口 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 数码管显示电路采用4位共阳LED数码管。2.2.3温度传感器 图三 18B20引脚图 图四 应用电路DS18B20温度

10、传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; 表一DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减

11、法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,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 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1

13、100 1001 0000FC90H2.3 各个电路模块电路图 2.3.1 DS18B20与单片机的接口电路图五 DS18B20与单片机的接口电路(注:DQ接口是单片机的PA0)DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单

14、线制只有一根线,因此发送接口必须是三态的。2.3.2 声光报警电路 图六 蜂鸣器驱动电路 图七 发光二极管驱动电路 蜂鸣器是由三极管驱动的,由于单片机的驱动负载能力比较差,R9是限流电阻,蜂鸣器和单片机的PC6连接,4个发光二极管分别接单片机的PA1PA5 D1是设置上限值时指示灯,D2是每按一次按键的加0.1,D3加1,D4加10,D5是设置下限值时指示灯。当超出设定值D1和D2会同时报警。2.3.3 LED显示电路 图八 数码管显示电路 此数码管驱动是由8550PNP三极管来驱动的,用到四路共阳数码管,其位选端分别接PC4PC7段选端分别接单片机的PB0PB7,数码管显示是由单片机不停的对

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

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

17、 数字温度计简要使用说明 首先接通电源,就会看到数码管显示此时的温度,若要设定上限下限值,按S1键进行设置,每按一次S2键数值就会增加,增加的幅度要看D2 D3 D4发光管哪一个亮 D2代表0.1;D3代表1;D4代表10;幅度切换键是S4,同理S3是减少键。设置完成后 按S1键就可以运行了。3系统软件算法分析系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。3.1主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图十四所示图十四 主程序

18、流程图 图8读温度流程图 4总结与体会 通过这次课程设计,我更加深入的了解了单片机。虽然自己设计的电路是正确的但做出来的板子就不一定很顺利,本来我用单片机的PA6口来控制蜂鸣器的,当给低电平时三极管就会饱和导通进而驱动蜂鸣器,但是当我把它拉高是时还是会有轻微的声音,我仔细查了芯片手册才知道PA口的驱动能力差 于是我换了就好了,呵呵真的在实践中能学到好多东西的。经过这两周的课程设计明白不能眼高手低。5附录1程序代码/* 主控芯片:ATmega16*晶振 8MHZ*DS18B20数据端口 DQ 接 单片机PC6*数码管的位接单片机PC47*数码管的段接单片机PB07;*蜂鸣器 接单片机的PC3;*

19、按键S1S4 接单片机PD47;*s1 上限 下限设置*S2 数值递减*S3 数值递增*S4 数值切换编写人:张庆钢时间 :2008 12.30*/#include #include #define uchar unsigned char#define uint unsigned 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 t

20、emp, 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-)。/端口出示化/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

21、_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。 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)

22、 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=data_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&

23、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。/个位及小数点 if(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。 DD

24、RD|=0XF0。 PORTD|=0XF0。 DDRD&=0XF0。 j=PIND。 j=j&0XF0。/11110000 if(j=0XF0) return 0。 else return 1。 /判断哪个键被按下的函数/uchar key_scan()/判断哪个键被按下的函数 uchar key。 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: k

25、ey=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。j7。j+)。 /DS18B20初始化函数/ void Init_DS18B20(void)unsigned char x=0。DS18b20DDR|=BIT(DQ)。 /设置为输出 DS18b20POR|=BIT(DQ)。 /置高 复位delay_(8)。 /稍做延时DS18b20POR&=BIT(DQ)。 /单片机将DQ拉低delay_(80)。 /精确延时 大于 480usDS18b20POR|=BIT(DQ)。 /拉高总线delay_(14)。 DS18b20DDR&=BIT(DQ)。 /设置为输入x=DS18b20PIN&(BIT(DQ) 。 /稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay_(20)。 /DS18B20读一个字节/ReadOneChar(void)unsigned char i=0。unsigned char dat = 0,temp。for

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1