找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ds18b20温度采集上位机(vc)和下位机(单片机)程序源码

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




上位机程序,用vc写的,带有源代码

ds18b20温度采集下位机程序(51单片机)
  1. #include<at89x51.h>
  2. #include"intrins.h"
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit  DQ=P3^2;         
  6. unsigned int j=0;   
  7. uchar flag,a;                                                
  8.                     
  9.                                           //  延时子函数
  10. //**************************************************************/
  11. void delay(uint t)
  12. {        for (; t>0 ; t--)  ;
  13. }


  14. /************************************************************
  15. /* 产生复位脉冲初始化DS18B20 */
  16. void  ow_reset(void)
  17. {  char presence=1;
  18.    while(presence)
  19.    {
  20.       while(presence)
  21.      {
  22.         DQ=1;_nop_();_nop_();//从高拉倒低
  23.             DQ=0;                                       
  24.             delay(50);           //550 us
  25.             DQ=1;                                       
  26.             delay(6);            //66 us
  27.              presence=DQ;         //presence=0 复位成功,继续下一步
  28.      }
  29.      delay(45);            //延时500 us
  30.      presence=~DQ;         
  31.    }
  32.    DQ=1;                   //拉高电平
  33. }
  34.               

  35. /************************************************************
  36. 向 1-WIRE 总线上写一个字节**数据线从高电平拉至低电平,产生写起始信号。
  37.              15ms之内将所需写的位送到数据线上
  38. **************************************************************/
  39. void write_byte(uchar val)
  40. {
  41.   uchar i;
  42.   for (i=8; i>0; i--) //在15~60ms之间对数据线进行采样,如果是高电平就写1,低写0发生。           
  43.   {
  44.     DQ = 1;_nop_(); _nop_();  //在开始另一个写周期前必须有1Us以上的高电平恢复期。               
  45.            DQ = 0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //5us
  46.         DQ = val&0x01;   //最低位移出
  47.         delay(6) ;  //66us
  48.         val = val/2; //右移1位
  49.   }
  50.         delay(1);
  51. }
  52. /************************************************************
  53. //读1字节 //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
  54. **************************************************************/
  55. uchar read_byte (void)
  56. {
  57.   uchar i;
  58.   uchar value = 0;
  59.   for(i = 8;i>0;i--)
  60.   {        
  61.           DQ = 1;         // 给脉冲信号
  62.     _nop_(); _nop_();
  63.           value>>= 1;
  64.           DQ = 0;          // 给脉冲信号
  65.           _nop_(); _nop_(); _nop_(); _nop_();_nop_(); //4us
  66.           DQ = 1; _nop_();_nop_();_nop_();_nop_();_nop_();//5us
  67.           if(DQ)
  68.      {        value|= 0x80 ; }                                          
  69.                  delay(13); //66us 注意延时的长短,如果是delay(6) 会造成LED闪烁
  70.   }                                                                                                
  71.   DQ = 1;
  72.   return(value)        ;
  73. }



  74.   
  75. void Setting_DS18B20(void)
  76. {
  77.    ow_reset();
  78.   write_byte(0xCC);    // 跳过读序号列号的操作
  79.   write_byte(0x4e);
  80.   
  81.   write_byte(0x64);   //100不使用DS18B20本身的温度告警设置,为进行转换精度设定,凑两个写寄存器操作
  82.   write_byte(0x8a);   //-10
  83.   write_byte(0x7f);   //设置DS18B20 为12位转换精度         R1,R0的值决定转换精度         R1=R0=1对应12位
  84. }

  85. /*--------------------------------------------------------------------------------------
  86.                               读取温度并完成转化,
  87. -----------------------------------------------------------------------------------------*/
  88.    Read_Temperature()
  89. {
  90.     uchar tplsb,tpmsb;                // 温度值低位、高位字节
  91.     uchar flag=0;
  92.    // unsigned int j=0; //暂存计算得温度的整数部分
  93.     float tt;
  94.     ow_reset();
  95.     write_byte(0xCC); // 跳过读序号列号的操作
  96.     write_byte(0x44); // 启动温度转换
  97.     ow_reset();
  98.     write_byte(0xCC); //跳过读序号列号的操作
  99.     write_byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  100.    
  101.     tplsb=read_byte();         // 温度值低位字节(其中低4位为二进制的“小数”部分)
  102.     tpmsb=read_byte();          // 高位值高位字节(其中高5位为符号位
  103.     //转换温度

  104.     j=tpmsb;
  105.     j<<=8;
  106.     j+=tplsb;          //写为j=j|tplsb;也可以。// 两字节合成一个整型变量。
  107.         if(tpmsb>7)
  108.         {        
  109.                 j=(j^0xffff);//异或
  110.         j=j+1;        //如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。
  111.     }
  112.     tt=(j*0.0625);
  113.   
  114.               
  115.         
  116.    return tt;
  117. }




  118. /*------------------------------------------------------------------------
  119.                                                         主函数
  120. --------------------------------------------------------------------*/




  121. void main()
  122. {  Setting_DS18B20();   
  123.   TMOD=0x20;
  124.   TH1=0xfd;
  125.   TL1=0xfd;
  126.   TR1=1;
  127.   REN=1;
  128.   SM0=0;
  129.   SM1=1;
  130.   EA=1;
  131.   ES=1;
  132.   while(1)
  133.   {           if(flag==1)
  134.      {         ES=0;
  135.             flag=0;
  136.             SBUF=Read_Temperature();

  137.            while(!TI);
  138.            TI=0;
  139.                 ES=1;
  140.                  
  141.          
  142.          }
  143.   
  144.   }        

  145. }
  146. void ckzd() interrupt 4
  147. {
  148.          RI=0;
  149.          P0=SBUF;
  150.          a=SBUF;
  151.          flag=1;
  152.          if(a=='b')P1=~P1;
  153.          else P1=0xff;

  154.         
  155. }

复制代码



18b20温度传感器测试程序,包涵上位机源程序很下位机源程序,将18b20采集的温度值发送给上位机显示

18B20upanddown.rar (4.93 MB, 下载次数: 225)

评分

参与人数 2黑币 +15 收起 理由
abcymda + 10
dcs + 5 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:56331 发表于 2016-7-1 15:51 | 只看该作者
下载看看,不错
回复

使用道具 举报

板凳
ID:135860 发表于 2016-8-3 11:20 | 只看该作者
学习学习了
回复

使用道具 举报

地板
ID:96218 发表于 2016-12-23 21:09 | 只看该作者
不错学习一下
回复

使用道具 举报

5#
ID:185829 发表于 2017-5-17 16:23 | 只看该作者
下载学习一下,谢谢
回复

使用道具 举报

6#
ID:218141 发表于 2017-7-8 17:05 | 只看该作者
谢谢大佬Orz
回复

使用道具 举报

7#
ID:161033 发表于 2018-1-15 22:20 | 只看该作者
感谢分享,先下来学习。
回复

使用道具 举报

8#
ID:260557 发表于 2018-5-9 09:26 | 只看该作者
赞一个!
回复

使用道具 举报

9#
ID:734666 发表于 2020-4-24 10:32 | 只看该作者
上位机的呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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