网站大量收购闲置独家精品文档,联系QQ:2885784924

温度传感器工作原理.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
温度传感器工作原理

温度传感器设计总体设计框图本方案设计的系统由单片机系统、数字温度传感器、数码管显示模块组成,其总体架构如下图。单片机测温电路显示电路驱动电路单片机系统本设计采用STC89C52单片机作为控制器,完成所有功能的控制,包括:DS18B20数字温度传感器的初始化和读取温度值LED数码管显示驱动与控制数字温度传感器模块DS18B20性能测温范围-55~+125℃,以0.5℃递增可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字DS18B20外形及引脚说明DS18B20外形及引脚GND:地DQ:单线运用的数据输入/输出引脚VD:可选的电源引脚软件设计主程序模块主程序需要调用1个子程序为:实时温度显示子程序:驱动数码管把实时温度值送出在LED数码管显示读温度值模块读温度值模块需要调用4个子程序,分别为:DS18B20初始化子程序:让单片机知道DS18B20在总线上且已准备好操作DS18B20写字节子程序:对DS18B20发出命令DS18B20读字节子程序:读取DS18B20存储器的数据延时子程序:对DS18B20操作时的时序控制DS18B20测温流程按照此步骤,程序设计时首先就要执行初始程序化程序 INI10,其次将要跳过ROM匹配命令(代码CCH)写入到DS18B20中,此时需根据数字温度传感器写时序编写对DS18B20一个写入字节程序WRITE,将跳过ROM匹配命令写入DS18B20。为了完成温度启动转换,需要将启动转换命令写入DS18B20中。用延时750ms等待转换完成。随后再按照初始化时序执行初始化程序INI10,用写入一个字节程序将匹配ROM命令(代码为55h)写入到DS18B20中。为了完成读便笺式存储器操作,需要先结合数字温度传感器写时序将读便笺式存储器命令(代码为BEH)写入到DS18B20中,再用温度传感器读时序编写的每一个字节程序READ,连续读取DS18B20便笺式存储器中9个字节的内容。由此可见。结合上述所介绍的初始化时序,温度传感器写时序和温度传感器读时序,才可以将所需的命令写入与读出,完成温度的正确读取。软件程序数码管显示温度程序://头文件:#include reg51.h#include ds18b20.h//引入DS18B20头文件//变量定义:unsigned char ly_dis[4];//定义显示缓冲区code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//表:共阳数码管 0-9 unsigned char l_posit=0;//显示位置//引脚定义:sbit SMG_q = P1^0;//定义数码管阳级控制脚(千位)sbit SMG_b = P1^1;//定义数码管阳级控制脚(百位)sbit SMG_s = P1^2;//定义数码管阳级控制脚(十位)sbit SMG_g = P1^3;//定义数码管阳级控制脚(个位)//函数声明:void display(void);//显示函数,显示缓冲区内容void delay(void); //主函数,C语言的入口函数:void main(){unsigned int i=0;float tt;int ltemp;while(1){if(i==0)tmpchange();//温度转换if(i==100){tt=tmp()*0.0625; //得到真实十进制温度值,因为DS18B20//可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度。 ltemp=tt*10+0.5;//放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。if(ltemp0){//判断第一位显示整数还是负号ly_dis[0]=0xbf;ltemp=0-ltemp;}elsely_dis[0]=ltemp/1000;//显示百位值ltemp=ltemp%1000;ly_dis[1]=ltemp/100;//显示温度十位值ltemp=ltemp%100;ly_dis[2]=ltemp/10;//显示温度个位值ly_dis[3]=ltemp%10;//显示小数点后一位}i++;if(i==3000)i=0;display();//调用显示delay();}}//显示函数,参数为显示内容void display(){P0=0XFF;//switch(l_posit){case 0://选择千位数码管,关闭其它位SMG_q=0;SMG_b=1;SMG_s=1;SMG_g=1;P0=table[ly_dis[0]]

文档评论(0)

juhui05 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档