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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

多路温度采集系统.docx

1、多路温度采集系统 小型多路温控采集系统设计 一 系统说明本系统采用51单片机作为控制器,控制温度采集及显示。温度传感器选用DS18B20,其单总线的通信方式可以减少系统的线路连接。DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路。内温范围55125,在-10+85时精度为0.5可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。同时本系统选用LCD1602作为显示器件,能够同时显示16x02即32个字

2、符(16列2行)。其显示清晰,并可以显示阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,满足了系统要求。二系统电路图三、程序流程图四、程序解读注:程序分两部分。可以先用程序二读出各个器件的序列号,再将序列号填入程序一的SN48数组中,若要加入更多的器件可以扩大数组,并在程序中增加读显的循环次数。1.程序一:已知各个器件序列号读取温度 #include#define uchar unsigned char#define uint unsigned intuchar TMP4; /读取后的4个温度值uchar SN48=0x28,0x44,0x30,0xc5,0xb8,0x00,0x00,

3、0x12, 0x28,0x15,0x30,0xc5,0xb8,0x00,0x00,0x0b, 0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e, 0x28,0x05,0x30,0xc5,0xb8,0x00,0x00,0x50;/4个器件的序列号,先读出单个序列号后填上才可以读取温度uint f4; /结果是否为负温,“0”为正温,“1”为负温。 sbit DQ=P37;/ds18b20与单片机连接口sbit RS=P30;sbit RW=P31;sbit EN=P32;unsigned char code str0=temperature:U ;unsigned

4、char code str5= ;uchar data disdata5;uint tvalue;/温度值uchar tflag4;/温度正负标志/*LCD1602程序*/void delay1ms(unsigned int ms)/延时1毫秒(不够精确的)unsigned int i,j; for(i=0;ims;i+) for(j=0;j0;i-) DQ = 0; /给脉冲信号 dat=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*写数据*/unsig

5、ned char i=0; for (i=8; i0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata=1; /*发送ds1820 开始转换/*/tmstart (void) / /ds1820rst(); /复位 /delay1ms(1); /延时 /ds1820wr (0xcc); /跳过序列号命令,对所有器件有效 /ds1820wr (0x44); /发转换命令 44H, / /*/read_temp()/*读取温度值并转换*/ /uchar i,j; /uchar a,b; /for(j=0;j4;j+) / /d

6、s1820rst(); /复位 /delay1ms(1); /延时 /ds1820wr(0x55); /发送ROM匹配命令 /for(i=0;i8;i+) / /ds1820wr(SNji); /发送64位序列号 / /ds1820wr(0xbe);/*读取温度*/ a = ds1820rd (); /连续读取两位温度 /b = ds1820rd (); /tvalue=b;tvalue=8;tvalue=tvalue|a;if(tvalue0xf800) tflagj=0; else tvalue=tvalue+1; tflagj=1; fj=tvalue*(0.625);/温度值扩大10倍

7、,精确到1位小数/return(f4);/*/void ds1820disp()/温度值显示 uchar flagdat,i; for(i=0;i4;i+) tvalue=fi ; disdata0=tvalue/1000+0x30;/百位数 disdata1=tvalue%1000/100+0x30;/十位数 disdata2=tvalue%100/10+0x30;/个位数 disdata3=tvalue%10/1+0x30;/小数位 if(tflagi=0) flagdat=0x20;/正温度不显示符号 else flagdat=0x2d;/负温度显示负号:- if(disdata0=0x

8、30) disdata0=0x20;/如果百位为0,不显示 if(disdata1=0x30) disdata1=0x20;/如果百位为0,十位为0也不显示 if(i=0)wr_com(0x8d); /第一个传感器在LCD第一行第14字符显示“1” wr_dat(1);if(i=1)wr_com(0x8d); /第二个传感器在LCD第一行第14字符显示“2” wr_dat(2);if(i=2)wr_com(0x8d); /第三个传感器在LCD第一行第14字符显示“3” wr_dat(3);if(i=3)wr_com(0x8d); /第四个传感器在LCD第一行第14字符显示“4” wr_dat(

9、4); wr_com(0xc0); /在LCD第二行第1个字符显示温度正负号 wr_dat(flagdat); /显示符号位 wr_com(0xc1); /在LCD第二行第2个字符显示百位温度值 wr_dat(disdata0);/显示百位 wr_com(0xc2); /在LCD第二行第3个字符显示十位温度值 wr_dat(disdata1);/显示十位 wr_com(0xc3); /在LCD第二行第4个字符显示个位温度值 wr_dat(disdata2);/显示个位 wr_com(0xc4); /在LCD第二行第5个字符显示小数点 wr_dat(0x2e); /显示小数点 wr_com(0x

10、c5); /在LCD第二行第6个字符显示小数位温度值 wr_dat(disdata3);/显示小数位 delay1ms(1500); /*主程序*/void main() init_play();/初始化显示 while(1) tmstart();/开始转换 read_temp();/读取温度 ds1820disp();/显示/2.程序二:读取DS18B20序列号程序注:读ROM时,只能有一个器件与单片机通信。可以逐个相连来读出其ROM#include#define uchar unsigned char#define uint unsigned intuint sn8=0x00,0x00,0

11、x00,0x00,0x00,0x00,0x00,0x10;sbit DQ=P37;/ds18b20与单片机连接口sbit RS=P30;sbit RW=P31;sbit EN=P32;void delay1ms(unsigned int ms)/延时1毫秒(不够精确的)unsigned int i,j; for(i=0;ims;i+) for(j=0;j0;i-) DQ = 0; /给脉冲信号 dat=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*写数据*

12、/unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata=1; /读取器件序列号子程序/rom(void)ds1820rst(); /复位 /delay1ms(1); /延时 /ds1820wr(0x33); /发送读序列号子程序 /sn0=ds1820rd(); /连续读出64位ROMsn1=ds1820rd(); /sn2=ds1820rd(); /sn3=ds1820rd(); /sn4=ds1820rd(); /sn5=ds1820rd(); /sn6=ds1820rd(); /sn7=ds1820rd(); / /*主程序*/void main() while(1) rom(); /调用读序列号子程序 / 本文档部分内容来源于网络,如有内容侵权请告知删除,感谢您的配合!

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

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