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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

DS18B20课程设计.docx

1、DS18B20课程设计基于DS18B20的温度测量及双限控制器单片机把我们带入了智能化的电子领域,许多繁琐的系统若由单片机进行设计,便能收到电路更简单、功能更齐全的良好效果。若把经典的电子系统当作一个僵死的电子系统,那么智能化的现代电子系统则是一个具有“生命”的电子系统。本人就温度自动化控制,设计了这款DS18B20温度控制器。实现功能:对温度进行测量,并在数码管上显示。测量范围-55125摄氏度。显示精度0.1摄氏度,自定义上下限报警温度,(默认值,上限:50摄氏度,下限20摄氏度)声音报警提示,指示灯报警提示,分别控制上限和下限继电器。上下限温度可显示。温度控制精度0.1摄氏度。系统分为硬

2、件系统和软件系统第一部分、硬件系统一、温度传感器本设计中使用的温度传感器是达拉斯公司生产的DS18B20,他具有超小的体积,超低的硬件开销,抗干扰能力强,精度高,全数字输出。主要参数:1 单总线数据通信。2 最高12位分辨率,精度可达0.5摄氏度。3 测量温度范围-55摄氏度125摄氏度。4 64位光刻ROM,内置序列号。5 有 TO-92封装、SO封装、uSOP封装6 工作电压5V。芯片引脚:本设计采用TO-92封装,引脚关系如下GND:电源地DQ:单总线数据线VDD:电源正RAM及EEPROM结构操作过程:1 复位:首先我们必须对DS18B20进行复位操作,就是单片机给芯片数据线至少480

3、us的低电平,当DS18B20收到复位信号后,会给单片机1560us的存在脉冲。2 存在脉冲:在进行完复位操作后,应立即将电平拉高,以便接收存在脉冲,存在脉冲时间为60200us的低电平信号。至此建立基本通信。3 ROM操作:本设计暂时不用,不做详细介绍。4 存储器操作指令:在芯片匹配完成后,接下来就是存储器操作。指令共8为6条,指令代表着芯片将进行什么样的工作,是芯片的关键。5 执行读写:指令和温度数据都是通过对芯片的读写操作进行的,应严格按照数据手册时序图。温度传感器硬件连接:DS18B20为单总线连接,只需接电源和地,将数据线连接在单片机IO口即可,因为DS18B20内部开漏,所以需加1

4、0K的上拉电阻,以保证温度传感器正常工作。也可以连接寄生电源模式,此处不用不做详细介绍。操作时序图:1 复位及应答时序:2 写时序:3 读时序:注:未尽说明详见达拉斯官方英文数据手册。一、 单片机单片机介绍:单片机采用STC89C52,PDIP-40封装。该单片机是STC推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟和6时钟可任意选择,HD版本和90C版本内部集成MAX810专用复位电路。单片机参数: 型号:STC89C52RC PDIP-40 工作电压:5.5-3.3V 最高时钟频率:0-80M Flash:8K SRAM:512 定时器:3个 U

5、ART串口:1个 DPTR:2EEPRM:4K看门狗:有中断源:8个中断优先级:4级IO:35/39掉电唤醒中断:4个内置复位:有封装:40-Pin PDIP 44-Pin LQFP/PLCC引脚图:电路连接图:最小系统:注:更多详细资料参考STC官网数据手册三、晶振 介绍: 此系统采用12M高精度晶振,接与单片机18、19脚,并接30pf电容对地,帮助晶振起振,使系统更稳定。 电路:四、 复位电路系统正常工作必要条件,上电自动复位。五、 继电器控制电路因为单片机IO端口输出电流较小,故需三极管对其驱动,为缩小体积三极管使用贴片型S8550。当控制端输出低电平,三极管饱和导通使继电器吸合,继电

6、器在断电时会产生感应电动势,为防止冲击损坏单片机和三极管,在继电器两端反向并联IN4148二极管以吸收感应电流。继电器采用10A大功率继电器,可控制大功率电器,工作电压5V。六、 声光报警电路声音报警使用采用5V有源蜂鸣器,使用S8550驱动发生,当温度达到上限和下限时均可报警,发出滴滴声。光报警电路使用两只发光二极管分别显示上下限,报警时为常量,单片机IO直接驱动。实际电路图:蜂鸣器二极管七、 键盘按键使用4个5*5微动,功能分别是设置、加、减,第四个按键暂时不用,为日后系统升级预留,连接方式为独立按键。电路图八、 电源一个单片机系统离不开电源。本系统有两种供电方式,一种使用5V USB直接

7、供电,一种使用9V叠层电池供电,经7805芯片稳压后,为系统提供5V电源,此为移动需求。用一个双刀双掷开关切换。九、 显示部分为实现人机交换离不开显示部分,此系统采用两个三位八段的数码管显示,显示方式为动态扫描,用两片74HC573锁存器分别驱动位和段,数码管为共阴数码管。一十、 整机电路:第二部分、软件系统/*程序名: DS18B20温度计设计者:高鹏展单位:河南工业职业技术学院编写时间: 2012年04月28日硬件支持: STC89C52RC系统时钟: 12MHz接口说明: DS18B20总线接MCU的P22口修改日志: 2012/4/29 22:00:00 实现小数-50.0125.0

8、测温功能下一步实现温度报警功能 2012/4/30 17:19:00 小数点BUG解决通过调整点的显示时间 2012/4/30 19:18:00 实现上下限温度设定 2012/4/30 22:00:00 上限蜂鸣报警 2012/5/01 10:05:00 取消蜂鸣器,定时器 2012/5/02 21:41:00 程序编写完毕 实现上下限温度设定,包括负温度 快速温度转换 精确小数点后一位 等 2012/5/16 13:55:00 制作实物修改接口定义 2012/5/04 21:00:00 功能完美实现 下一步计划使用EEPROM 2012/5/17 14:06:00 取消温度误差调整BUG:开

9、机会显示85c 2012/5/01 此BUG解决 开机读一次温度并延时 小数点过亮 2012/4/30 17:19:00 小数点BUG解决通过调整点的显示时间 小数点过亮 2012/4/30 19:10:00 小数点后加空显示问题完美解决 数码管还需要消影 2012/4/30 19:00:00 解决 开定时器0会乱码 不使用定时器实现蜂鸣器间隔响备注: 版本V1.0 2012/5/2 默认上限26 下限25 基于Keil 4开发环境*/#include#include#define uint unsigned int#define uchar unsigned char sbit led1=P

10、10; /下限指示灯sbit led2=P11; /上限指示灯sbit JDQ1=P20; /下限继电器sbit JDQ2=P21; /上限继电器sbit FM=P25; /蜂鸣器sbit SET=P34; /设置键sbitjian=P35; /减键sbitjia=P36; /加键sbit DQ=P22; /定义总线接口sbitwela=P27; /定义位锁存端sbitdula=P26; /定义段锁存端void init(); /初始化总程序void delay_18B20(uint t); /延时uchar init_DS18B20(); /初始化void write_DS18B20(uch

11、ardat);/写数据uchar read_DS18B20(); /读数据intreadtemp(); /读取温度有符号型void tempp_18B20(); /主程序温度处理void SET_alarm(); /报警温度设置inttempp; /定义运算变量void temp_alarm(); /温度报警uintbai,shi,ge,dian; /定义温度位ucharzf; /定义显示正负intshangxian=500; /定义默认上限数值 26Cintxiaxian=200; /定义默认下限数值 25Cuchar MODE=0; /模式uint t0; /用于蜂鸣器void MODE_

12、SET(); /模式设定uchar code shu= /数码管表 0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,/C 0x5e,0x79,0x71, 0x40, /显示-号 16 0x00, /显示空,表示+ 17 0x76, /显示H 18 0x38 /显示L 19;void display(uintaa,uintbb,uintcc,uintbai,uintshi,uintge); /数码管显示函数void delay(uint z); /延时函数void yunsuan(); /运算出温度各位的数值v

13、oid main() /主函数 init(); /程序初始化 while(1) /进入大循环 MODE_SET(); if(MODE=0) tempp_18B20(); /读回温度,判断温度正负,并进行处理 temp_alarm(); /温度报警 yunsuan(); /运算出要显示各位的数值 display(zf,bai,shi,ge,dian,12); /显示数值 else SET_alarm(); /报警温度设定 /*主程序初始化*/voidinit() dula=0; wela=0; zf=17; /默认显示正,即空 jia=1; jian=1; tempp_18B20(); /读取一

14、次温度跳过85C wela=1; /初始化屏幕 P0=0xc0; wela=0; dula=1; P0=0x40; dula=0; /初始化屏幕 delay(1500); /转换温度延时大于750MS/*函数:精准延时函数功能:DS18B20延时函数,实现15uS倍数精准延时参数:z为定时时间长度说明:延时公式:15(t+1)uS,晶振12MHz 需要加入头文件#include*/void delay_18B20(uint t) for(t;t0;t-) _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();/*DS18B20初始化函数*/uchar

15、 init_DS18B20() uchar a; DQ=1; _nop_(); /尽量短的延时 DQ=0; delay_18B20(45); /延时700 DQ=1; delay_18B20(2); /延时45 a=DQ; delay_18B20(11); /延时180 return a; /返回a的值/*写数据一个字节*/void write_DS18B20(uchardat) uchar x; for(x=0;x=1; /*读数据一个字节*/uchar read_DS18B20() ucharx,dat; DQ=1; _nop_(); for(x=0;x=1; DQ=1; if(DQ) d

16、at|=0x80; delay_18B20(2); /延时45 DQ=1; _nop_(); /高电平恢复期 return dat; /返回dat/*读取温度*/intreadtemp() intx,y,temp; float tt=0; /定义浮点运算 init_DS18B20(); /初始化 write_DS18B20(0xcc); /跳过ROM write_DS18B20(0x44); /温度转换 init_DS18B20(); /初始化 write_DS18B20(0xcc); /跳过ROM write_DS18B20(0xbe); /读出寄存器值 x=read_DS18B20();

17、/读出低八位 y=read_DS18B20(); /读出高八位 temp=y; /高八位赋给temp temp0;x-) for(y=50;y0;y-);/*温度处理*/void tempp_18B20() tempp=readtemp(); /将温度值赋给tempp调整误差0.3C 此处不在调整误差 if(tempp=shangxian|tempp=shangxian) /上限 led2=0; JDQ2=0; led1=1; JDQ1=1; if(tempp=3) MODE=0; while(SET=0); delay(20); while(SET=0); /*报警温度设置*/voidSET

18、_alarm() intsx,xx; sx=shangxian; xx=xiaxian; if(MODE=1) if(shangxian=0) display(18,shangxian/1000,shangxian%1000/100,shangxian%100/10,shangxian%10,12); /上限设置H最后显示C else sx=0-sx; display(18,16,sx/100,sx%100/10,sx%10,12); /上限设置H最后显示C if(MODE=2) if(xiaxian=0) display(19,xiaxian/1000,xiaxian%1000/100,xi

19、axian%100/10,xiaxian%10,12); /下限设置L最后显示C else xx=0-xx; display(19,16,xx/100,xx%100/10,xx%10,12); /下限设置L最后显示C if(jia=0) /加键 delay(30); if(jia=0) if(MODE=1) /模式1时,上限加 shangxian+=10; if(shangxian=1250) shangxian=1250; while(jia=0); delay(10); while(jia=0); if(MODE=2) /模式2时,上限加 xiaxian+=10; if(xiaxian=s

20、hangxian) xiaxian=shangxian; while(jia=0); delay(10); while(jia=0); if(jian=0) /减键 delay(30); if(jian=0) if(MODE=1) /模式1时,上限减 shangxian-=10; if(shangxian=xiaxian) shangxian=xiaxian; while(jian=0); delay(10); while(jian=0); if(MODE=2) /模式2时,上限减 xiaxian-=10; if(xiaxian=-500) xiaxian=-500; while(jian=0); delay(10); while(jian=

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

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