分享
分销 收藏 举报 申诉 / 11
播放页_导航下方通栏广告

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

  • 上传人:精****
  • 文档编号:2991832
  • 上传时间:2024-06-12
  • 格式:DOC
  • 页数:11
  • 大小:37KB
  • 下载积分:8 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    基于 DS18B20 数字 温度计 语言程序设计
    资源描述:
    看了好多天单片机,找了好多资料想自己利用实验板上的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--)      {}  } 
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:转基于DS18B20数字温度计C语言程序设计.doc
    链接地址:https://www.zixin.com.cn/doc/2991832.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


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

    自信网络  |  ZixinNetwork