找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2186|回复: 2
打印 上一主题 下一主题
收起左侧

DS18B20应用,模数转换显示温度

[复制链接]
跳转到指定楼层
楼主

通过DS18B20的温度检测,模数转化显示相对应的温度。

仿真图,如图所示。





代码源程序如下:
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define out P0

  6. sbit smg1=out^4;
  7. sbit smg2=out^5;
  8. sbit DQ=P3^7;
  9. void delay5(uchar);
  10. void init_ds18b20(void);
  11. uchar readbyte(void);
  12. void writebyte(uchar);
  13. uchar retemp(void);

  14. void main(void)                                              
  15. {
  16.         uchar i,temp;
  17.         delay5(1000);
  18.         while(1)
  19.         {
  20.                  temp=retemp();       
  21.                  for(i=0;i<10;i++)                       
  22.                  {
  23.                          out=(temp/10)&0x0f;
  24.                          smg1=0;
  25.                          smg2=1;
  26.                          delay5(1000);                       
  27.                          out=(temp%10)&0x0f;
  28.                          smg1=1;
  29.                          smg2=0;
  30.                          delay5(1000);                       
  31.                  }
  32.         }
  33. }

  34. void delay5(uchar n)                       
  35. {
  36.          do
  37.          {
  38.                  _nop_();
  39.                  _nop_();
  40.                  _nop_();
  41.                  n--;
  42.          }
  43.          while(n);
  44. }

  45. void init_ds18b20(void)               
  46. {
  47.          uchar x=0;
  48.          DQ =0;   
  49.          delay5(120);
  50.          DQ =1;   
  51.          delay5(16);
  52.          delay5(80);
  53. }

  54. uchar readbyte(void)                        
  55. {
  56.         uchar i=0;
  57.         uchar date=0;
  58.         for (i=8;i>0;i--)
  59.         {
  60.                   DQ =0;
  61.                   delay5(3);       
  62.                         DQ =1;
  63.                   date>>=1;
  64.                   if(DQ)
  65.                   date|=0x80;       
  66.                   delay5(11);
  67.          }
  68.         return(date);
  69. }
  70. void writebyte(uchar dat)                        
  71. {
  72. uchar i=0;
  73. for(i=8;i>0;i--)
  74. {
  75.           DQ =0;
  76.           DQ =dat&0x01;                               
  77.           delay5(12);                                  
  78.           DQ = 1;          
  79.           dat>>=1;
  80.           delay5(5);
  81.           }
  82. }
  83. uchar retemp(void)                       
  84. {
  85.         uchar a,b,tt;
  86.         uint t;
  87.         init_ds18b20();
  88.         writebyte(0xCC);
  89.         writebyte(0x44);
  90.         init_ds18b20();
  91.         writebyte(0xCC);
  92.         writebyte(0xBE);
  93.         a=readbyte();
  94.         b=readbyte();
  95.         t=b;
  96.         t<<=8;
  97.         t=t|a;
  98.         tt=t*0.0625;
  99.         return(tt);
  100. }
复制代码

所有文件在下方,需要自取。
DS18B20应用.zip (83.46 KB, 下载次数: 16)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:557582 发表于 2019-6-8 10:19 | 只看该作者
谢谢了 这个正好需要
回复

使用道具 举报

板凳
ID:122829 发表于 2019-6-8 12:12 | 只看该作者
我做的能显示小数点后1位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表