收藏 分销(赏)

转基于DS18B20数字温度计C语言程序设计.doc

上传人:精**** 文档编号:2991832 上传时间:2024-06-12 格式:DOC 页数:11 大小:37KB 下载积分:8 金币
下载 相关 举报
转基于DS18B20数字温度计C语言程序设计.doc_第1页
第1页 / 共11页
转基于DS18B20数字温度计C语言程序设计.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
看了好多天单片机,找了好多资料想自己利用实验板上的DS18B20做个温度计(最近温度实在是太热了)。在网上找了好多关于这个的程序,结果发现对我的板子来说就这个好用,温度三十度不算高,因为我把它放到风扇下面了,现在和大家分享一下吧,不过里面我自己也改了一点点。希望高手不要见笑,红色的部分是我改的或者是后加上的。如果还有什么更好的建议或意见请 记得给我留言哦…… #include <reg52.h>  #include <intrins.h>  #define uchar unsigned char  #define uint unsigned int  sbit PS2=P2^6; //数码管十位,位选 sbit PS1=P2^7; //数码管个位,段选 sbit P_L=P1^0; //测量指示 sbit DQ=P2^2; //DS18B20数据接口 void delay(uint); //延时函数 void DS18B20_init(void); //DS18B20初始化 void get_temper(void); //读取温度程序 void DS18B20_write(uchar in_data); //DS18B20写数据函数 uchar DS18B20_read(void); ////读取数据程序 uchar htd(uchar a); //进制转换函数 void display(void); //显示函数 uchar temp; //温度寄存器 bit DS18B20; // 18B20存在标志,1---存在 0---不存在 uchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //字段转换表 void main(void)  {      uint a;      while(1)      {          get_temper(); //测量温度         for(a=0;a<200;a++) ;//显示,兼有延时的作用         display();      }  }  /****************************DS18B20读取温度函数**************************/ /*函数原型:void get_temper(void) /*函数功能:DS18B20读取温度 /*输入参数:无 /*输出参数:无 /*调用模块: /*建立时间:2005/11/14 /*作者:站长 /**********************************************************************/ void get_temper(void)  {      uchar k,T_sign,T_L,T_H;      DS18B20_init(); //DS18B20初始化     if(DS18B20) //判断DS1820是否存在?若DS18B20不存在则返回     {          DS18B20_write(0xcc); // 跳过ROM匹配         DS18B20_write(0x44); //发出温度转换命令         DS18B20_init(); //DS18B20初始化         if(DS18B20) //判断DS1820是否存在?若DS18B20不存在则返回         {              DS18B20_write(0xcc); //跳过ROM匹配             DS18B20_write(0xbe); //发出读温度命令             T_L=DS18B20_read(); //数据读出             T_H=DS18B20_read();              k=T_H&0xf8;              if(k==0xf8)              T_sign=1; //温度是负数             else              T_sign=0; //温度是正数             T_H=T_H&0x07;              temp=(T_H*256+T_L)*0.0625; //温度转换常数         }      }  }  /****************************DS18B20写数据函数**************************/ /*函数原型:void DS18B20_write(uchar in_data) /*函数功能:DS18B20写数据 /*输入参数:要发送写入的数据 /*输出参数:无 /*调用模块:_cror_() /*建立时间:2005/11/14 /*作者:站长 /**********************************************************************/ void DS18B20_write(uchar in_data) //写DS18B20的子程序(有具体的时序要求) {      uchar i,out_data,k;      out_data=in_data;      for(i=1;i<9;i++) //串行发送数据     {          DQ=0;          DQ=1;          _nop_();          _nop_();          k=out_data&0x01;          if(k==0x01) //判断数据 写1         {              DQ=1;          }          else //写0         {              DQ=0;          }          delay(4); //延时62us         DQ=1;          out_data=_cror_(out_data,1); //循环右移1位     }  }  /**************************DS18B20读函数**************************/ /*函数原型:void DS18B20_read() /*函数功能:DS18B20读数据 /*输入参数:无 /*输出参数:读到的一字节内容 /*调用模块:delay() /*建立时间:2005/11/14 /*作者:站长 /******************************************************************/ uchar DS18B20_read()  {      uchar i,in_data,k;      in_data=0;      for(i=1;i<9;i++) //串行发送数据     {          DQ=0;          DQ=1;          _nop_();          _nop_();          k=DQ; //读DQ端         if(k==1) //读到的数据是1         {              in_data=in_data|0x01;          }          else          {              in_data=in_data|0x00;          }          delay(3); //延时51us         DQ=1;          in_data=_cror_(in_data,1); //循环左移1位     }      return(in_data);  }  /**************************DS18B20初始化函数**************************/ /*函数原型:void DS18B20_init(void) /*函数功能:DS18B20初始化 /*输入参数:无 /*输出参数:无 /*调用模块:delay() /*建立时间:2005/11/14 /*作者:站长 /******************************************************************/ void DS18B20_init(void)  {      uchar a;      DQ=1; //主机发出复位低脉冲     DQ=0;      delay(44); //延时540US     DQ=1;      for(a=0;a<0x36&&DQ==1;a++)      { //等待DS18B20回应         a++;          a--;      }      if(DQ)      DS18B20=0; //18B20不存在     else      {          DS18B20=1; // 18B20存在         delay(120); //复位成功!延时240US     }  }  /**************************数码管显示函数**************************/ /*函数原型:void display(void) /*函数功能:数码管显示 /*输入参数:无 /*输出参数:无 /*调用模块:delay() /*建立时间:2005/11/14 /*作者:站长 /******************************************************************/ void display(void)  {     PS1=1; P0=0x01; PS1=0;      PS2=1;     P0=tab[htd(temp)>>4]; //转换成十进制输出 PS2=0;           delay(200);  PS1=1; P0=0x02; PS1=0; PS2=1;     P0=tab[htd(temp)&0x0f]; //转换成十进制输出   PS2=0;     delay(200);       P_L=~DS18B20;  }  /*********************原显示函数*********************************** void display(void) { P0=tab[htd(temp)>>4]; //转换成十进制输出 PS2=1; PS1=0; delay(200); P0=tab[htd(temp)&0x0f]; //转换成十进制输出 PS1=1; PS2=0; delay(200); P_L=~DS18B20; } *******************************************************/ /**************************十六进制转十进制函数**************************/ /*函数原型:uchar htd(uchar a) /*函数功能:十六进制转十进制 /*输入参数:要转换的数据 /*输出参数:转换后的数据 /*调用模块:无 /*建立时间:2005/11/14 /*作者:站长 /******************************************************************/ uchar htd(uchar a)  {      uchar b,c;      b=a%10;      c=b;      a=a/10;      b=a%10;      c=c|b<<4;      return c;  }  /*******************************延时函数*********************************/ /*函数原型:delay(unsigned int delay_time) /*函数功能:延时函数 /*输入参数:delay_time (输入要延时的时间) /*输出参数:无 /*调用模块:无 /*建立时间:2005/10/21 /*作者:站长 /**********************************************************************/ void delay(unsigned int delay_time) //延时子程序 {for(;delay_time>0;delay_time--)      {}  } 
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服