分享

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

 共同成长888 2019-12-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<<>< p=""><>

           //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);

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约