单片机应用技术-基于STC15系列单片机 课件 6.3多路温度计_第1页
单片机应用技术-基于STC15系列单片机 课件 6.3多路温度计_第2页
单片机应用技术-基于STC15系列单片机 课件 6.3多路温度计_第3页
单片机应用技术-基于STC15系列单片机 课件 6.3多路温度计_第4页
单片机应用技术-基于STC15系列单片机 课件 6.3多路温度计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多路测温系统演示任务分析多路测温程序包括循环读取四片温度传感器的温度值函数、每个温度值的格式处理及液晶显示等函数,因为系统中每个DS18B20的序列号不同,首先必须读取DS18B20的序列号,在进行温度采集前每次还要发序列号匹配命令读取DS18B20序列号编写一段readid()函数得到温度传感器序列号在ProteµsS环境用鼠标指向该器件,先右键后左键,分别打开各传感器的属性设置窗口,将“ROMSerialNumber”中的默认值“B8C530”改为其它十六进制数,然后运行读序列号函数,读出8个字节的序列号读取DS18B20序列号编写一段readid()函数得到温度传感器序列号4个传感器的序列号设置为{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}读序列号函数//4个传感器的序列号放在二维数组ucharcodeid[4][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}};voidreadid(ucharid[])//读取序列号{ ucharn;reset(); //复位DS18B20wrbyte(0x33); //发READROM命令for(n=0;n<=8;n++) //读取8个字节的序列号

复位id[n]=rdbyte();}多路测温方法1、复位所有传感器,跳过ROM,发启动温度转换命令,所有DS18B20开始转换2、转换结束后,单片机依次发匹配ROM命令,将预先存储的各传感器的序列号通过单总线送出,选中指定的DS18B20读入温度值多路测温程序voidgettemp(inttemp[])//检测4个传感器温度值送数组temp{ ucharm,n;ucharh,l;reset(); //复位所有DS18B20wrbyte(0xcc);wrbyte(0x44);//跳过ROM启动所有DS18B20转换late(); //延时750msfor(m=0;m<4;m++) //循环检测各DS18B20{reset(); //复位wrbyte(0x55); //发匹配ROM命令for(n=0;n<8;n++) wrbyte(id[m][n]);//发8字节的序列号wrbyte(0xbe); //发读暂存器命令l=rdbyte(); //读取温度低字节、高字节h=rdbyte();temp[m]=h*256+l;

}}多路测温主程序1、LCD初始化2、巡回检测各测温点的温度值并将其转换成字符串3、在LCD显示屏的对应位置显示温度值多路测温主程序main(){ inttemp[4];//用来存放四个传感器的温度值ucharstr[6]={0,0,0,0,0,0};//用于将温度值转换为字符串bitzf; //正负标记

温度在0度以下为1,否则为0uchari;init_lcd(); //液晶屏初始化str[1]=':'; //在屏幕指定位置显示

for(i=0;i<4;i++) {str[0]=0x41+i; disp_str(i/2,(i%0x02)*9,str);}多路测温主程序while(1){gettemp(temp); //巡回检测出4个传感器的温度值送数组tempfor(i=0;i<4;i++)//依次显示数组temp中的温度值{zf=0;if(temp[i]<0) //如果温度小于0{zf=1; //正负标志置1temp[i]=-temp[i]; //求出温度的绝对值 }str[4]=dp[temp[i]&0x0f]+0x30;//求出一位小数的ASCII码temp[i]=temp[i]>>4; //舍去小数部分str[0]=temp[i]/100+0x30; //求出百位的ASCII码temp[i]=temp[i]%100;str[1]=temp[i]/10+0x30; //求出十位的ASCII码str[2]=temp[i]%10+0x30; //求出个位的ASCII码str[3]='.'; //填上小数点

多路测温主程序if(zf==1) //如果是负数{if(str[1]=='0') //如果十位为0{str[0]=''; //显示格式为'-x.x'str[1]='-'; }else str[0]='-'; //如果十位不为0

显示格式为'-xx.x'}else //如果是正数{if(str[0]=='0') //如果百位、十位都是0{if(str[1]=='0')//显示格式为'x.x'str[1]=''; //如果只有百位为0str[0]='';//显示格式为'xx.x'}}disp_str(i/2,(i%0x02)*9+2,str);}}}多路测温系统调试如果某个传感器的温度值总是为0,应检查它的序列号是否与二维数组id中所定义的值一致注意4个传感器的序列号为ucharcodeid[4][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论