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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

DS18B20课程设计Word格式.docx

1、在芯片匹配完成后,接下来就是存储器操作。指令共8为6条,指令代表着芯片将进行什么样的工作,是芯片的关键。5 执行读写:指令和温度数据都是通过对芯片的读写操作进行的,应严格按照数据手册时序图。温度传感器硬件连接:DS18B20为单总线连接,只需接电源和地,将数据线连接在单片机IO口即可,因为DS18B20内部开漏,所以需加10K的上拉电阻,以保证温度传感器正常工作。也可以连接寄生电源模式,此处不用不做详细介绍。操作时序图:1 复位及应答时序:2 写时序:3 读时序:注:未尽说明详见达拉斯官方英文数据手册。一、 单片机单片机介绍:单片机采用STC89C52,PDIP-40封装。该单片机是STC推出

2、的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟和6时钟可任意选择,HD版本和90C版本内部集成MAX810专用复位电路。单片机参数: 型号:STC89C52RC PDIP-40 工作电压:5.5-3.3V 最高时钟频率:0-80M Flash:8K SRAM:512 定时器:3个 UART串口:1个 DPTR:2EEPRM:4K看门狗:有中断源:8个中断优先级:4级IO:35/39掉电唤醒中断:4个内置复位:封装:40-Pin PDIP 44-Pin LQFP/PLCC引脚图:电路连接图:最小系统:更多详细资料参考STC官网数据手册三、晶振 介绍: 此系

3、统采用12M高精度晶振,接与单片机18、19脚,并接30pf电容对地,帮助晶振起振,使系统更稳定。 电路:四、 复位电路系统正常工作必要条件,上电自动复位。五、 继电器控制电路因为单片机IO端口输出电流较小,故需三极管对其驱动,为缩小体积三极管使用贴片型S8550。当控制端输出低电平,三极管饱和导通使继电器吸合,继电器在断电时会产生感应电动势,为防止冲击损坏单片机和三极管,在继电器两端反向并联IN4148二极管以吸收感应电流。继电器采用10A大功率继电器,可控制大功率电器,工作电压5V。六、 声光报警电路声音报警使用采用5V有源蜂鸣器,使用S8550驱动发生,当温度达到上限和下限时均可报警,发

4、出滴滴声。光报警电路使用两只发光二极管分别显示上下限,报警时为常量,单片机IO直接驱动。实际电路图:蜂鸣器二极管七、 键盘按键使用4个5*5微动,功能分别是设置、加、减,第四个按键暂时不用,为日后系统升级预留,连接方式为独立按键。电路图八、 电源一个单片机系统离不开电源。本系统有两种供电方式,一种使用5V USB直接供电,一种使用9V叠层电池供电,经7805芯片稳压后,为系统提供5V电源,此为移动需求。用一个双刀双掷开关切换。九、 显示部分为实现人机交换离不开显示部分,此系统采用两个三位八段的数码管显示,显示方式为动态扫描,用两片74HC573锁存器分别驱动位和段,数码管为共阴数码管。一十、

5、整机电路:第二部分、软件系统/*程序名: DS18B20温度计设计者:高鹏展单位:河南工业职业技术学院编写时间: 2012年04月28日硬件支持: STC89C52RC系统时钟: 12MHz接口说明: DS18B20总线接MCU的P22口修改日志: 2012/4/29 22:00:00 实现小数-50.0125.0 测温功能下一步实现温度报警功能 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 取消蜂鸣器,定时器 201

6、2/5/02 21:41:00 程序编写完毕 实现上下限温度设定,包括负温度 快速温度转换 精确小数点后一位 等 2012/5/16 13:55:00 制作实物修改接口定义 2012/5/04 21:00 功能完美实现 下一步计划使用EEPROM 2012/5/17 14:06:00 取消温度误差调整BUG:开机会显示85c 2012/5/01 此BUG解决 开机读一次温度并延时 小数点过亮 2012/4/30 17: 小数点过亮 2012/4/30 19:10:00 小数点后加空显示问题完美解决 数码管还需要消影 2012/4/30 19:00 解决 开定时器0会乱码 不使用定时器实现蜂鸣器

7、间隔响备注: 版本V1.0 2012/5/2 默认上限26 下限25 基于Keil 4开发环境*/#includeintrins.h#define uint unsigned int#define uchar unsigned char sbit led1=P10; /下限指示灯sbit led2=P11; /上限指示灯sbit JDQ1=P20; /下限继电器sbit JDQ2=P21; /上限继电器sbit FM=P25; /蜂鸣器sbit SET=P34; /设置键sbitjian=P35; /减键sbitjia=P36; /加键sbit DQ=P22; /定义总线接口sbitwela=

8、P27; /定义位锁存端sbitdula=P26; /定义段锁存端void init(); /初始化总程序void delay_18B20(uint t); /延时uchar init_DS18B20(); /初始化void write_DS18B20(uchardat);/写数据uchar read_DS18B20(); /读数据intreadtemp(); /读取温度有符号型void tempp_18B20(); /主程序温度处理void SET_alarm(); /报警温度设置inttempp; /定义运算变量void temp_alarm(); /温度报警uintbai,shi,ge,

9、dian; /定义温度位ucharzf; /定义显示正负intshangxian=500; /定义默认上限数值 26Cintxiaxian=200; /定义默认下限数值 25Cuchar MODE=0; /模式uint t0; /用于蜂鸣器void MODE_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 0x3

10、8 /显示L 19;void display(uintaa,uintbb,uintcc,uintbai,uintshi,uintge); /数码管显示函数void delay(uint z); /延时函数void yunsuan(); /运算出温度各位的数值void main() /主函数 init(); /程序初始化 while(1) /进入大循环 MODE_SET(); if(MODE=0) tempp_18B20(); /读回温度,判断温度正负,并进行处理 temp_alarm(); yunsuan(); /运算出要显示各位的数值 display(zf,bai,shi,ge,dian,1

11、2); /显示数值 else SET_alarm(); /报警温度设定 /*主程序初始化*/voidinit() dula=0; wela=0; zf=17; /默认显示正,即空 jia=1; jian=1; tempp_18B20(); /读取一次温度跳过85C wela=1; /初始化屏幕 P0=0xc0; dula=1; P0=0x40; delay(1500); /转换温度延时大于750MS/*函数:精准延时函数功能:DS18B20延时函数,实现15uS倍数精准延时参数:z为定时时间长度说明:延时公式:15(t+1)uS,晶振12MHz 需要加入头文件#include0;t-) _no

12、p_();_nop_(); _nop_();/*DS18B20初始化函数*/uchar init_DS18B20() uchar a; DQ=1; /尽量短的延时 DQ=0; delay_18B20(45); /延时700 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; delay_18B20(0);

13、 /延时15 1以上 if(DQ) dat|=0x80; delay_18B20(2); /延时45 /高电平恢复期 return dat; /返回dat/*读取温度*/intreadtemp() intx,y,temp; float tt=0; /定义浮点运算 init_DS18B20(); write_DS18B20(0xcc); /跳过ROM write_DS18B20(0x44); /温度转换 write_DS18B20(0xbe); /读出寄存器值 x=read_DS18B20(); /读出低八位 y=read_DS18B20(); /读出高八位 temp=y; /高八位赋给temp

14、 tempx-) for(y=50;yy-);/*温度处理*/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);/*报警温度设置*/voidSET_alarm() intsx,xx; sx=shangxian; xx=xiaxian; if(MODE=1) if(shangxian=

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

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

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

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