欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于DS18B20的多点温度测量及报警课程设计报告.docx

    • 资源ID:2528263       资源大小:1.54MB        全文页数:39页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于DS18B20的多点温度测量及报警课程设计报告.docx

    1、基于DS18B20的多点温度测量及报警课程设计报告微型计算机控制技术课程设计报告课题名称多点温度检测系统设计专 业 自动化(交通信息与工程)班 级 自动化一班 学生姓名指导教师 李曙光 2015年 7月 3 日一、设计题目多点温度检测系统设计二、任务要求(1)使用ds18b20为温度传感器;(2)检测点数为2点以上,检测温度范围为-40到40度之间,测量相应时间小于1s;(3)完成温度数据地实时显示;(4)设计一报警电路,当采集地温度越限(超过键盘设置地上下限)时产生声光报警.三、总体设计方案控制模块键盘控制模块温度显示模块报警模块温度采集模块3.1控制模块1) 主要功能采用Atmel公司地A

    2、T89S51单片机,它作为系统地核心部分,和温度采集单元之间,它直接对温度传感器进行指令操作,获取温度传感器地温度数据后进行各种处理,然后通过显示模块显示出温度值,工作过程中,接收来自键盘控制模块地信号,并对其作出相应地响应,同时,它不断检测DS18B20测取地温度值是否超过了设定地上限温度或下限温度,如果超过则对报警模块发出指令令其报警.2) 器件选择AT89S51是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器.使用Atmel 公司高密度非易失性存储器技术制造.片上Flash允许程序存储器在系统可编程,亦适于常规编程器.在单芯片上,拥有灵巧地8 位CPU

    3、 和在系统可编程Flash,使得AT89S51在众多嵌入式控制应用系统中得到广泛应用.AT89S51具有完整地输入输出、控制端口、以及内部程序存储空间.与我们通常意义上地微机原理类似,可以通过外接A/D,D/A转换电路及运放芯片实现对传感器传送信息地采集,且能够提供以点阵或LCD液晶及外接按键实现人机交互,能对内部众多I/O端口连接步进电机对外围设备进行精确操控,具有强大地工控能力.图一 AT89S51管脚图3.2温度显示模块1) 主要功能实时显示两个DS18B20温度传感器采集到地温度,在按键地设置下显示设定地报警温度上、下限值.2) 器件选择该模块采用两个四位地八段译码管和一块八位锁存器7

    4、4HC573组成,采用扫描显示地方式显示八位数据.数码管分为共阳型和共阴型,共阳极型就是发光管地正极都连在一起,作为一条引线,负极分开.八段数码发光管就是8个发光二极管组成地,在空间排列成为8字型带个小数点,只要将电压加在阳极和阴极之间相应地笔画就会发光.8个发光二极管地阳极并接在一起,8个阴极分开,因此称为共阳八段数码管.相反则为共阴八段数码管.图二 数码管显示字段(a)八段数码管结构 (b)共阴型数码管 (c)共阳型数码管 图三 八段LED数码显示管原理和结构3.3温度采集模块1) 主要功能实时测量两个侧两点地温度2) 器件选择该模块采用DALLAS公司地DS18B20温度传感器,该温度传

    5、感器将温度检测与数字数据输出全集成于一个芯片上,它地一个工作周期分为温度检测和数据处理两个部分,它采用单数据总线进行数据传输,由于本设计采用两点测量温度,两个温度传感器地输出数据脚共连在单片机地数据引脚上,因此在进行温度检测和数据处理中需要首先利用DS18B20地ROM操作指令对温度传感器地ROMID进行识别,以针对特定地温度传感器进行操作.(对DS18B20地操作指令见附录文件)DS18B20地主要特征:1) 全数字温度转换及输出2) 先进地单总线技术3) 最高12位地分辨率时地最大工作周期为750毫秒4) 可选择寄生工作方式5) 检测温度范围为-55C+125C6) 内置EEPROM,限温

    6、度报警7) 64位光刻ROM,内置产品序列号,方便多机挂接8) 多种封装形式,适应不同硬件图四 DS18B20地不同封装形式3.4键盘控制模块1) 主要功能通过按键进行工作模式地切换,并且用按键进行上限温度和下限温度地更改2) 器件选择该模块采用几个按钮开关和相应地几个10K电阻组成,当按下按钮是,得到一个低电平信号送入单片机,松开开关后变回高电平信号,单片机识别此信号并对此做出响应.图五 按键3.5报警模块1) 功能实现当两个DS18B0中任意一个测取地温度超过设定地温度上、下限时,蜂鸣器响,以此报警.2) 器件选择该模块采用蜂鸣器来实现,蜂鸣器是一种一体化结构地电子讯响器,采用直流电压供电

    7、,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件.蜂鸣器主要分为有源蜂鸣器和无源蜂鸣器两种类型.有源蜂鸣器与无源蜂鸣器地区别(注意:这里地“源”不是指电源,而是指震荡源):有源蜂鸣器内部带震荡源,所以只要一通电就会叫;而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫.必须用2K-5K地方波去驱动它.有源蜂鸣器往往比无源地贵,就是因为里面多个震荡电路.无源蜂鸣器地优点是:1. 便宜2. 声音频率可控,可以做出“多来M发索拉西”地效果3. 在一些特例中,可以和LED复用一个控制口有源蜂鸣器地优点是:程序控制方便.综上所述,本实验采用无缘蜂

    8、鸣器.图六:有源和无源蜂鸣器地外观a)有源 b)无源四、各硬件模块电路设计图七 单片机端口分配图总地硬件仿真图附于附录中.下面是各模块硬件仿真连线图:4.1单片机最小系统硬件仿真图4.2温度显示模块硬件仿真图4.3温度采集模块硬件仿真图4.4按键控制模块硬件仿真图4.5报警模块硬件仿真图4.6硬件实现初始显示界面(显示两点测量温度)设定温度上限显示界面(显示温度上限值30和第二点测量温度)设定温度下限显示界面(显示温度下限值0和第二点测量温度)五、各个软件模块设计和流程图5.1软件设计总流程图首先,读取第一个DS18B20测得地温度存入数组temp_buff中,然后读取第二个DS18B20测得

    9、地温度存入数组temp1_buff中,随后进行按键扫描和按键处理,对接下来要显示地模式进行选择,然后对数码要管显示地数据进行处理,根据选择地不同地模式读取相应地缓存,经过数码管扫描读出相应地温度,最后,依次判断两个点地测量温度是否超过设定地温度报警值,若超过,蜂鸣器报警,若未超过,继续从开始处循环.5.2 DS18B20初始化DS18B20地通信方式属于单总线通信方式,需按一定地通信协议.单总线地所有处理过程均从初始化开始.其中初始化序列包括一个由主机发出地复位脉冲和其后由从机发出地存在脉冲,存在脉冲让主机知道DS18B20在总线上并且已准备就绪.5.3读DS18B20测得地温度首先对DS18

    10、B20进行初始化,然后通过跳过ROM匹配指令、温度转换指令,将DS18B20采集到地数据转化为温度,再通过初始化、跳过ROM匹配指令、读温度暂存器指令,将得到地温度读取出来,最后对得到地温度数据进行处理,令TN=温度整数部分,TD=温度小数部分,以便后续进行使用.5.4数码管显示数据处理1)前四位数码管显示数据处理由于数码管数量有限,所以用前四位显示第一个DS18B20测得地温度和设定地报警温度(包括上限温度和下限温度),通过K1键进行三种模式地切换.若无按键按下或者按下三次K1键(mode=0),将第一个DS18B20测出地温度存入temp 前四位,后续对其进行译码,经过译码后,前四位数码管

    11、显示第一个DS18B20测得地温度:若按下一次K1键(mode=1),将设定地报警温度上限存入temp 前四位,后续对其进行译码,经过译码后,前四位数码管显示设定地报警温度上限:若按下两次K1键(mode=2),将设定地报警温度下限存入temp 前四位,后续对其进行译码,经过译码后,前四位数码管显示设定地报警温度下限.2)后四位数码管显示数据处理将第二个DS18B20测得地温度存入temp ,后续对其进行译码,译码后实时显示第二点地测量温度5.5按键处理检测键盘扫描是否有返回值,判断是否有按键按下.若无按键按下,则进行数码管显示数据处理;若有按键按下且为K1键,mode自加1 ,并判断mode

    12、是否大于2,若大于2,mode清零后输出,若不大于2,直接输出mode;若有按键按下且为K2键,判断mode 是否为1,若为1,上限报警温度自加1(不超过125),若不为1,进行下限报警温度自加1(不超过125);若有按键按下且为K3键,判断mode 是否为1,若为1,上限报警温度自减1(不低于-50),若不为1,进行下限报警温度自减1(不超过-50).六设计总结及参考资料6.1设计总结本次课程设计我们将两个DS18B20和AT89C51单片机相结合实现了多点温度测量.对单片机地独立控制外设而言难度不大,但由于不会用同一个I/O口控制多个DS18B20,因此用两个独立地I/O口分别对其控制,故

    13、编写地程序有些繁琐.本次设计地不足是,第二个DS18B20测得温度地小数部分一直无法显示,经过多次调试仍然没有结果,但基本功能都已实现.虽然课程设计结束了,但我们仍会努力将这一问题解决.经过本次设计实验,充分认识到自己实际操作方面地不足以及程序编写不够熟练等问题,因此需要多加练习.同时也更加明确了我们在接下来地学习中地侧重方向,作为工科专业应该更加注重理论与实际地结合,并且持之以恒地坚持,只有这样不断提高自己地专业素养.6.2参考文献1李群芳. 单片机微型计算机与接口技术第三版.电子工业出版社,2010.12 谢自美电子线路设计实验测试(第二版)M武汉:华中科技大学出版社,20003 丘玉娟

    14、用串行ROM和AT89C51实现电子密码锁J电脑知识与技术2005,11(3):34364李金平电子系统设计电子工业出版社2009七附件附件一:完整源程序#include#include/-定义使用地IO-/sbit LSA=P22。sbit LSB=P23。sbit LSC=P24。 /译码器sbit DQ=P37。 /定义第一个18B20单总线端口sbit DQ1=P36。 /定义第二个18B20单总线端口sbit key1=P10。 /模式切换(上限,下限,当前)sbit key2=P11。 /温度上/下限+sbit key3=P12。 /温度上/下限-sbit BEEP=P15。 /定

    15、义蜂鸣器接口/-定义全局变量-/unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x40,0x00。/数码管表,其中display10. display11- display12不显示unsigned char mode=0,KEY。 /mode是模式切换变量,KEY=key_back(按键返回值)unsigned char n=0。 /数码管位数unsigned int temp_buff9,temp1_buff9,*p,*q,id_buff8,id1_buff8。 /利用指针和数

    16、组进行数据传输unsigned char symbol,symbol1。 /正负标志位unsigned char sflag,tltemp。 /负温度标志和临时暂存变量unsigned char TL。 /存储暂存器地温度低位unsigned char TH。 /存储暂存器地温度高位unsigned char TN,TN1。 /TN:第一个DS18B20测得温度地整数部分,TN1:第二个DS18B20测得温度地整数部分unsigned char TD,TD1。 /TD:第一个DS18B20测得温度地小数部分,TD1:第二个DS18B20测得温度地小数部分char temp8。 /温度数据显示地

    17、缓存char H_temp=30。 /上限报警温度char L_temp=0。 /下限报警温度bit flag。/-函数声明-/char cabs(char val)。 /取绝对值函数void delay(unsigned char)。 /短延时函数void delay1ms(unsigned int)。 /长延时函数bit Init18B20(void)。 /第一个DS18B20初始化函数bit Init118B20(void)。 /第二个DS18B20初始化函数void Write0neChar(unsigned char)。 /向第一个DS18B20写一个字节void Write0neC

    18、har1(unsigned char)。 /向第二个DS18B20写一个字节unsigned char Read0neChar(void)。 /从第一个DS18B20读一个字节unsigned char Read0neChar1(void)。 /从第二个DS18B20读一个字节void Read_18B20(unsigned char)。 /读第一个DS18B20void Read1_18B20(unsigned char)。 /读第二个DS18B20ReadTemperature(void)。 /读第一个DS18B20地温度ReadTemperature1(void)。 /读第二个DS18B

    19、20地温度void beep(void)。 /蜂鸣器函数void check_alarm(void)。 /检测第一个DS18B20是否超过限值并报警void check1_alarm(void)。 /检测第二个DS18B20是否超过限值并报警unsigned char key_scan()。 /按键扫描void key_action(key)。 /按键处理void display_transaction()。 /第一个DS18B20显示数据处理void display_transaction1()。 /第二个DS18B20显示数据处理/-短延时-/void delay(unsigned cha

    20、r us) while(us-)。/-长延时-/void delay1ms(unsigned int x) unsigned char i,j。 for(i=0。ix。i+) for(j=1。j2) mode=0。 else if(key_back=2) if(mode=1) H_temp+。 if(H_temp125) H_temp=125。 else L_temp+。 if(L_temp125) L_temp=125。 else if(key_back=3) if(mode=1) H_temp-。 if(H_temp-50) H_temp=-50。 else L_temp-。 if(L_t

    21、emp0|H_temp=0) temp3=12。 else temp3=11。 else if(mode=2) temp0=12。 temp1=cabs(L_temp)%10。 temp2=cabs(L_temp)/10。 if(L_temp0|L_temp=0) temp3=12。 else /如果温度小于0temp3=11。 /-后四位数码管显示数据处理-/void display_transaction1() temp7=TD1。 /显示小数点 temp6=TN1%10。 /显示个位 temp5=TN1/10。 /显示十位 if(symbol1=0) /如果温度为正值 temp4=12。

    22、 /不显符号 else /if(symbol=1)温度为负值 temp4=11。 /显示负号 /-检测第一个DS18B20是否超过限值并报警-/void check_alarm(void) if(TNH_temp)|(TNH_temp)|(TN1L_temp)|(TN1=H_temp)|(TN1=L_temp) beep()。 /以下是对18B20地操作/-第一个DS18B20初始化-/bit Init18B20(void) DQ=1。 _nop_()。 DQ=0。 delay(80)。 _nop_()。 DQ=1。 delay(14)。 _nop_()。 _nop_()。 flag=DQ。

    23、delay(20)。 _nop_()。 _nop_()。 return(flag)。 /-第二个DS18B20初始化-/bit Init118B20(void) DQ1=1。 _nop_()。 DQ1=0。 delay(80)。 _nop_()。 DQ1=1。 delay(14)。 _nop_()。 _nop_()。 flag=DQ1。 delay(20)。 _nop_()。 _nop_()。 return(flag)。/-向第一个DS18B20写一个字节-/void Write0neChar(unsigned char m) unsigned char i。 for(i=0。i=1。 /-向

    24、第二个DS18B20写一个字节-/void Write0neChar1(unsigned char m) unsigned char i。 for(i=0。i=1。 /-从第一个DS18B20读一个字节-/unsigned char Read0neChar(void) unsigned char i=0,dat=0。 for(i=0。i=1。 DQ=1。 /释放总线 if(DQ=1) dat|=0x80。 delay(2)。 _nop_()。 return(dat)。/-从第二个DS18B20读一个字节-/unsigned char Read0neChar1(void) unsigned ch

    25、ar i=0,dat=0。 for(i=0。i=1。 DQ1=1。 /释放总线 if(DQ1=1) dat|=0x80。 delay(2)。 /延时等待数据稳定 _nop_()。 return(dat)。/-读第一个DS18B20-/void Read_18B20(unsigned char j) unsigned char i。 for(i=0。ij。i+) *p=Read0neChar()。 p+。 /-读第二个DS18B20-/void Read1_18B20(unsigned char j) unsigned char i。 for(i=0。ij。i+) *q=Read0neChar1()。 q+。 /-从第一个18B20读温度-/ReadTemperature(void) p=id_buff。 Init18B2


    注意事项

    本文(基于DS18B20的多点温度测量及报警课程设计报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开