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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(基于DSB温度传感器温控系统的Proteus仿真.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于DSB温度传感器温控系统的Proteus仿真.docx

1、基于DSB温度传感器温控系统的Proteus仿真基于DS18B20温度传感器温控系统的Proteus仿真DS18B20温度传感器是美国DALLAS半导体公司推出的支持“一线总线”接口的传感器。具有功耗低、性能高、抗干扰能力强的特点,可以直接将温度转化为串行数字信号供处理器处理。DS18B20传感器具有以下一些特性:(1) 测温范围-55至+125,在-10至+85时的精度为正负0.5;(2) 适应电压的范围在3.0至5.5V;(3) 单线接口,只用一条口线就可以与微处理器的双向通信;(4) 支持多点组网,多个DS18B20并接在一根口线上就可实现多点测温;(5) 测量结果直接输出数字温度信号,

2、通过单线串行传输给微处理器;(6) 具有负压特性,电源极性接反芯片不会烧坏,只是不能正常工作;(7) 可编程分辨率为9至12位,对应的分辨温度分别是0.5,0.25,0.125,0.0625,能够实现高精度测温。(8) 在9位分辨率时可在93.75ms内把温度值转换为数字;在12位分辨率时可在750us内把温度值转换为数字;(9) 传送数据时可传送CRC校验码,抗干扰纠错能力强。DS18B20的引脚封装图如下:各引脚定义如下:GND:电源地DQ:信号输入输出VDD:电源正极NC:空DS18B20单总线技术:DS18B20采用单条信号线,既可以传输数据,也可以传输时钟。其数据传输是双向的,这种单

3、总线技术线路简单,硬件开销小,成本低廉,便于总线扩展与维护。单总线通常需要外接一个4.7K的上拉电阻。它与处理器的连接非常简单,通常连接方式如下图:DQ端外接一个上拉电阻,与处理器的任一端口连接。DS18B20工作原理1 ROM功能命令(1)33H Read ROM读ROM。把DS18B20传感器的ROM中编码读出来。(2)55H Match ROM匹配ROM。发出该命令接着会发送64位包含具体DS18B20序列号的ROM编码,与该编码序列号相同的DS18B20就会做出响应,序列号不匹配的DS18B20继续等待,不做响应。由于不同的DS18B20序列号不一样,所以通过该命令可以访问控制具体的D

4、S18B20。(3)F0H Search ROM搜索ROM。用于识别各个DS18B20的64位ROM。(4)CCH Skip ROM跳过ROM。当只有一个DS18B20时,使用该命令可以忽略64位ROM地址,直接向DS18B20发送温度变换命令。(5)ECH Alarm Search 告警搜索。执行后,温度超出上限或者下限的芯片做出响应。主机与多个DS18B20连接,要对众多在线DS18B20的某一个进行通信,首先要逐个与DS18B20连接,读出其序列号;然后将所有的DS18B20挂接到总线上,单片机发出匹配指令55H,接着主机提供64位序列,之后就可以与序列号相应的DS18B20进行数据交换

5、。主机与单个DS18B20连接时,不需要读取或者匹配ROM,只要使用跳过指令CCH,就可以进行数据转换和读取操作。(1)44H Convert T 温度转换。启动DS18B20进行温度转换。12位精度转换时最长为750ms,转换结束后将数据存入内部9字节的RAM。(2)4EH Write Scratchpad 写暂存器。发出该命令后,将两字节的数据写入内部RAM的第2、3字节,作为上、下限温度数据。(3)BEH Read Scratchpad 读暂存器。读取内部9字节的温度数据。(4) 48H Copy Scratchpad 复制暂存器。将RAM中的第2、3字节的内容复制到E2PROM。(5)

6、B8H Recall E2 重调E2PROM。将E2PROM内容恢复到RAM中的第3、4字节。(6)B4H Read Power Supply 读供电方式。读取DS18B20的供电模式。2工作时序图(1)初始化Step1:数据线置低电平Step2:延时800us左右(时间范围为480us至960us)Step3:数据线拉高电平Step4:延时40us左右(时间范围为15us至60us)(2)读数据逐位读取数据,然后把8位数据组成1个字节。编写程序时分为两个部分,一个实现读取一位数据,另一个实现读取一个字节数据。读取数据步骤:Step1:数据线置低电平Step2:延时5us左右(大于1us即可)

7、Step3:数据线拉高电平Step4:延时10us左右(这次延时和第一次延时之和接近15us左右)Step5:读取一位数据Step6:延时60us左右(大于45us即可)Step7:重复上面步骤,直到读完一个字节(3)写数据写数据分为写数据位1和数据位0。写数据位1步骤:Step1:数据线置低电平Step2:延时5us左右(大于1us即可)Step3:数据线拉为高电平Step4:延时70us左右(大于55us即可)写数据位0步骤:Step1:数据线置低电平Step2:延时70us左右(大于60us即可)Step3:数据线拉高电平Step4:延时5us左右(不要太小)根据DS18B20的结构和性

8、能,在Proteus中构建仿真工程,电路连接图如下:上面的电路要实现的功能是,把传感器测量的温度显示到1602液晶上。温度变化的范围是0至99.9,温度传感器通过设置可以设定温度调节的步长,这里取温度变化的步长为0.1,设置如下图:设置好之后,就可以根据DS18B20的特性和控制方式编写程序。参考程序如下: #include #define uchar unsigned char #define uint unsigned int uchar code disp2=Tempreture; uchar code disp3=C; sbit lcden=P20; sbit lcdrw=P21; s

9、bit lcdrs=P22; sbit tempt=P23; uint u_temp; /定义无符号整型形参 float f_temp; /定义浮点型形参 void delay(uint x) /延时500ms程序 uint i,j; for(i=0;ix;i+) for(j=0;j0)i-; tempt=1; i=4; /延时 while(i0)i-; bit read_bit() /读一位DS18B20数据 uint i; bit dat; tempt=0; i+; /延时 tempt=1; i+; /延时 i+; dat=tempt; i=8; /延时 while(i0)i-; retu

10、rn dat; uchar read_tempt() /读一个字节DS18B20数据 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=read_bit(); dat=(j1); /将读取的数据位按读取先后顺序, /从低位到高位(从右往左)排列保存到dat return dat; void write_byte(uchar dat) /写一个字节数据到DS18B20 uint i; uchar j; bit testbit; for(j=1;j1; if(testbit) tempt=0; i+; /延时 tempt=1; i=8; /延时 while(i0)i-

11、; else tempt=0; i=8; /延时 while(i0)i-; tempt=1; i+; /延时 i+; void convert_tempt() /DS18B20开始获取温度并进行转换 reset_tempt(); delay(1); write_byte(0xcc); write_byte(0x44); uint get_tempt() /读取DS18B20寄存器中的温度数据 uchar a,b; reset_tempt(); delay(1); write_byte(0xcc); write_byte(0xbe); a=read_tempt(); b=read_tempt()

12、; u_temp=b; u_temp=8; u_temp=u_temp|a; f_temp=u_temp*0.0625; /精度为12位,所以分辨率为0.0625 u_temp=f_temp*10 ; /乘以10,将实际温度扩大10倍 return u_temp; /返回的u_temp是整型数据 void display() /静态文字显示 uchar i,j; write_com(0x80+3); for(i=0;i10;i+) write_data(disp2i); write_com(0x80+0x40+10); for(j=0;j2;j+) write_data(disp3j); void main() /主函数 uchar i; lcd_init(); display(); while(1) convert_tempt(); for(i=0;i10;i+) display_tempt(get_tempt(); 谨供参考学习使用,如有错误欢迎指正。

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

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