×
单片机 > 单片机程序设计 > 详情

基于51单片机的温度采集系统(Labview做上位机)

发布时间:2020-06-17 发布时间:
|

做该设计的初衷是为自己的毕设打基础,因为我的毕设要做一个探测机器人,需要对某一地区的各种环境参数进行检测,然后通过WIFI返回到上位机。所以为了搞懂温度传感器以及练习上位机的设计,花了几天时间做了一个很简单的采集系统。今天把它拿出来跟各位小伙伴们分享,希望对各位有所帮助,同时也希望大佬们指出不足,起到一个相互学习,相互促进的作用。该系统原理是:51单片机把ds18b20传感器将采集到的温度值(十六进制)通过串口发送到labview,labview对单片机发来的数据做简单的处理然后显示。

上位机界面

上位机(接受程序)

简单的硬件连接

数据纪录

串口部分:

void main()                

{

                          

        

               if(flag==1||flag1==1)

                           {

                            S=test/10;

                                Y=test%10;

                            ES=0;

                                flag=0;

                                SBUF=S;

                            while(!TI);

                                TI=0;

                                SBUF=Y;

                            while(!TI);

                                TI=0;

                                if(temperature!=test)

                                 flag1=1;

                                ES=1;          

                              }         

}  

//串口中断

void ser() interrupt 4

{

   if(RI==1)

        {

         RI=0;

         a=SBUF;

         if(a=='1') P1=0x55;

         if(a=='0') P1=0xaa;

         flag=1;

        }

}

温度采集部分:

#include

#include "ds18b20.h"

#include "delay.h"


sbit DQ=P2^2; //温度传感器 I/O 口


uchar reset_ds18b20()

{

   uchar presence;

   DQ=0;

   delay_ds18b20(29);      //延时480 - 960  us

   DQ=1;                                                  

   delay_ds18b20(3);      //延时 15 - 60   us

   presence=DQ;

   delay_ds18b20(25);          //延时 60 - 240  us

   return(presence);


}


uchar read_bit_ds18b20()

{

        uchar i;

        DQ=1;

        delay_ds18b20(1);

        DQ=0;

        //delay(1);    //延时 15us  也可以不延时

        DQ=1;

        //delay(3);         //延时 1 - ∞  us

        for(i=0;i<3;i++);

        return(DQ);

void write_bit_ds18b20(uchar dat)

{

        DQ=0;        //置0 无需延时

        if(dat==1)

          DQ=1;

        delay_ds18b20(1);         //延时 60 - 120  us

        DQ=1;

        delay_ds18b20(1);         //延时 1 - ∞  us

}




void write_byte_ds18b20(uchar dat)

{

     uchar i,j;

         for(i=0;i<8;i++)

         {

             j=((dat>>i)&0x01);

                 write_bit_ds18b20(j);

                 //delay(1);      //延时 1 - ∞  us

         }



}  



uchar read_byte_ds18b20()

{

        uchar dat=0;

        uchar i;

        for(i=0;i<8;i++)

         {

           if(read_bit_ds18b20())

             dat|=0x01<

           //delay(1);           //延时 1 - ∞  us

         

         }

         return(dat);           

}




int read_temp_ds18b20()

{

   uchar templ=0,temph=0;

   int temp=0;

   reset_ds18b20();//复位

   write_byte_ds18b20(0xcc); //跳过ROM

   write_byte_ds18b20(0x44); //跳过温度采集

   delay_ds18b20(10);     //750ms

   reset_ds18b20();

   write_byte_ds18b20(0xcc); //跳过ROM

   write_byte_ds18b20(0xbe); //准备好数据(开始温度转换采集)

   templ=read_byte_ds18b20();//读低字节温度值

   temph=read_byte_ds18b20();//读低字节温度值

   temp=(templ+(temph*256));

   return(temp);

}

关键字:51单片机  温度采集系统  Labview  上位机

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法