久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2584|回復(fù): 0
收起左側(cè)

基于SHT11溫濕度傳感器測(cè)量實(shí)驗(yàn)

[復(fù)制鏈接]
ID:244920 發(fā)表于 2017-11-1 13:45 | 顯示全部樓層 |閱讀模式
#include <reg52.h>  //頭文件
#include <intrins.h>
#include <stdio.h> //
#include <math.h>    //Keil library  
//**************************************
#define uchar unsigned char //定義一下方便使用
#define uint  unsigned int //定義一下方便使用
#define ulong unsigned long //定義一下方便使用
#define TEMP_ML 0x03   //000  0001    1 溫度命令
#define HUMI_ML 0x05   //000  0010    1 溫度命令
unsigned char error  ;//全局錯(cuò)誤變量
unsigned char ack  ;//全局應(yīng)答變量
//float temp_zi  ;//全局應(yīng)答變量
//float humi_zi  ;//全局應(yīng)答變量
unsigned char temp_h  ;//全局應(yīng)答變量
unsigned char temp_LL  ;//全局應(yīng)答變量
unsigned int  xianzhi_t=0;//溫度顯值
unsigned int  xianzhi_h=0;//濕度顯值
ucharsetzhi_h,setzhi_l;
bit   setbz_h,setbz_l,setkey;
sbitDATA =P2^6;//數(shù)據(jù)
sbitSCK=P2^7;//時(shí)鐘
sbithot =P2^0;// 加熱
sbitmotor =P2^1;// 電機(jī)
sbitspeek =P2^2;// 聲音
sbitset =P0^0;//  設(shè)置
sbitsetup =P0^1;//  設(shè)置+
sbitsetdown =P0^2;//  設(shè)置-
sbit       gwei =P3^4;//個(gè)位
sbit       swei =P3^3;//十位
sbit       bwei =P3^2;//百位
sbit       qwei =P3^1;//千位
unsigned char codedispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共陽(yáng)
//*******************************基本驅(qū)動(dòng)程
char read() //讀一個(gè)字節(jié) 返回應(yīng)答信號(hào)
// reads a byte form the Sensibus and givesan acknowledge in case of "ack=1"
{
unsigned char i,val=0;
temp_LL=0;
temp_h=0;
DATA=1;                          //釋放數(shù)據(jù)總線
  for(i=0x80;i>0;i/=2)             //位移8
  { SCK=1;                          //上升沿讀入
   if (DATA) val=(val | i);        //確定值
   SCK=0;                                    
  }
  DATA=0;                        //讀應(yīng)答信號(hào),有應(yīng)答為1,為應(yīng)答為0 通過(guò)CPU下拉為應(yīng)答
SCK=1;                           //9個(gè)脈沖
  _nop_(); _nop_(); _nop_();         //pulswith approx. 5 us
SCK=0;                                             
DATA=1;                          //釋放數(shù)據(jù)總線
temp_h=val;
val=0;
////8/////////////////////////////
   DATA=1;                          //釋放數(shù)據(jù)總線
  for(i=0x80;i>0;i/=2)             //位移8
  {SCK=1;                          //上升沿讀入
   if (DATA) val=(val | i);        //確定值
   SCK=0;                                    
  }
  DATA=1;//0;                       //不需要應(yīng)答 通過(guò)CPU下拉為應(yīng)答
SCK=1;                           //9個(gè)脈沖
  _nop_(); _nop_(); _nop_();         //pulswith approx. 5 us
SCK=0;                                             
DATA=1;                          //釋放數(shù)據(jù)總線
temp_LL=val;
}
char write(unsigned char value) //寫一個(gè)字節(jié)返回應(yīng)答信號(hào)
{
unsigned char i ;
  ack=0;  
  for(i=0x80;i>0;i/=2)             //釋放數(shù)據(jù)總線
  {if (i & value) DATA=1;          //寫入值
    else DATA=0;                        
   SCK=1;                          //上升沿寫入
    _nop_(); _nop_(); _nop_();       //延時(shí)     
   SCK=0;
  }
DATA=1;                          //釋放數(shù)據(jù)總線
SCK=1;                           //9個(gè)脈沖
if  (DATA==1) ack=1;
                        //讀應(yīng)答信號(hào)
SCK=0;        
return ack;                    //error=1 表示沒(méi)有應(yīng)答
}
void start_sht11(void)  //啟動(dòng)
{  
  DATA=1; SCK=0;                  //數(shù)據(jù)為1SCK=0
   _nop_();
  SCK=1;                          //第一個(gè)脈沖
   _nop_();
   DATA=0;                         //數(shù)據(jù)跌落
   _nop_ ();
  SCK=0;                         //完成一個(gè)脈沖
   _nop_(); _nop_(); _nop_();
  SCK=1;                         //再一個(gè)脈沖
   _nop_();
  DATA=1;                        //數(shù)據(jù)變?yōu)?/font>1            
   _nop_();
  SCK=0;                         //完成該脈沖            
}
void sht_rest(void)  //復(fù)位
{  
unsigned char i;
DATA=1; SCK=0;                   //數(shù)據(jù)為1 時(shí)鐘為0
for(i=0;i<9;i++)                 //9 個(gè)脈沖為 復(fù)位
  {SCK=1;
   SCK=0;
  }
start_sht11();                  //啟動(dòng)
}
//測(cè)量溫度或者是溫度,返回校驗(yàn)值
text_a(unsigned char ml)
       {
              unsigned int i;
              start_sht11();                   //啟動(dòng)
              write(ml);//寫入測(cè)溫度
               if (ack==1)
                  {
                         sht_rest() ;//復(fù)位
                    write(ml);//寫入測(cè)溫度
            }
         //判斷是否處于忙
       //      DATA=1;//釋放數(shù)據(jù)總線
     //for (i=0;i<65535;i++) if(DATA==0) break;
        for (i=0;i<55535;i++){ if(DATA==0)break;else     {xianshi();} }
              read();//讀溫度
  }
/////////溫濕度處理//////
   text_jishuan_temp11()
       {
          error=0;
          ack=0;
     sht_rest() ;//復(fù)位
        text_a(TEMP_ML);
     text_jishuan_temp();
         key();
        text_a(HUMI_ML);
     text_jishuan_humi();
         }
//////////計(jì)算溫度////
text_jishuan_temp()
{
   float aa=0,bb=0,temp_zi;
       int   abcd=0;
aa=(float)temp_h*256+(float)temp_LL;
temp_zi=0.01*aa-40;
if  (temp_zi<0)
    {
        temp_zi=0;
    }
   temp_zi=temp_zi*10;
   xianzhi_t=(int)temp_zi;//給顯示值
   }
  ///////計(jì)算濕度//////
  text_jishuan_humi()
{
    float aa=0,bb=0,humi_zi;
       int   abcd=0;
aa=(float)temp_h*256+(float)temp_LL;
bb=aa*aa*2.8/1000000;
aa=0.0405*aa;
aa=aa-4-bb;
humi_zi=aa;
    humi_zi=humi_zi*10;
   xianzhi_h=(int)humi_zi;
   }
///////延時(shí)///////
delay(inti)
{
   while(--i);      
}     
///////顯示處理///////
xianshi()
{   
    int  abcd=0;
    int i;
  for(i=0;i<1;i++)
{  
abcd=xianzhi_h;
gwei=1;
swei=1;
bwei=1;
qwei=1;
P1=dispcode[abcd/100];
  qwei=0;
delay(40);
  qwei=1;
  abcd=abcd%100   ;
P1=dispcode[abcd/10];
bwei=0;
delay(40);
bwei=1;
if(setbz_h^setbz_l)
{
   if(setbz_h) abcd=setzhi_h;
   if(setbz_l) abcd=setzhi_l;
      P1=dispcode[abcd/10];
     swei=0;
      delay(40);
     swei=1;
      P1=dispcode[abcd%10];
      gwei=0;
      delay(40);
      gwei=1;  
  }
  else
  {
      abcd=xianzhi_t;
      P1=dispcode[abcd/100];
     swei=0;
      delay(40);
     swei=1;
     abcd=abcd%100    ;
      P1=dispcode[abcd/10];
      gwei=0;
      delay(40);
      gwei=1;  
   }
}
}
  doing()
  {
  char xianzhi_mi;
   xianzhi_mi=xianzhi_t/10;
  if((xianzhi_mi<setzhi_h)&(xianzhi_t>setzhi_l)) {motor=0;hot=0;speek=0;}
   if(xianzhi_mi>setzhi_h)  { motor=1;hot=0;speek=1;}
  if(xianzhi_mi<setzhi_l)  {motor=0;hot=1;speek=1;}
  }
key()
{
if(set&setkey)
  {
    setkey=0;
    if(setbz_l) {setbz_l=0;setbz_h=0;}
        else
        { if(!setbz_h) setbz_h=1;
          else {setbz_h=0;setbz_l=1;}
         }
   }
  if(!set)  setkey=1;
if(setup==0)
  {
     if(setbz_h==1)
              { if (setzhi_h<=99) setzhi_h++;}
     if(setbz_l==1)
              { if((setzhi_l<setzhi_h)&(setzhi_l<=99)) setzhi_l++;}
  }         
if(setdown==0)
  {
     if(setbz_h==1)
              { if((setzhi_h>setzhi_l)&(setzhi_h>=1)) setzhi_h--;}
      if(setbz_l==1)
              { if (setzhi_l>=1) setzhi_l--;}
  }         
}
//系統(tǒng)初始化///
csh()
{
  P0=0XFF;
  P1=1;
  P2=0;
  P3=0XFF;
}
main()
{
setzhi_h=22;//設(shè)置高溫
setzhi_l=20;//設(shè)置低溫
  csh();//系統(tǒng)初始化
   while(1)
  {
  text_jishuan_temp11();//測(cè)溫濕度
  //xianshi();//顯示
  doing();//處理
  key();//鍵處理
// xianshi();//顯示   
  }
}

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在线不卡 | 国产精品日日摸夜夜添夜夜av | 欧美国产中文字幕 | 久久综合入口 | 色婷婷亚洲一区二区三区 | 欧美亚洲国产精品 | 国产成人精品一区二区三区 | 国产伦精品一区二区三区四区视频 | 免费在线视频一区二区 | 国产精品国产精品国产专区不片 | 人人做人人澡人人爽欧美 | 99久久国产免费 | 午夜专区| 一级片免费网站 | 中文字幕 国产 | 丁香婷婷在线视频 | 中文字幕在线视频免费视频 | 久久大香| 天天射色综合 | 日韩精品免费 | 色视频一区二区 | 麻豆一区一区三区四区 | 国产福利资源在线 | 美女在线一区二区 | 欧美一区二区在线免费观看 | 欧美乱人伦视频 | 国产高清一区二区 | 理论片87福利理论电影 | 日韩欧美三级电影 | 中国一级特黄毛片大片 | 欧美电影在线 | 国产人成在线观看 | 999国产精品视频 | 97精品一区二区 | 国产精选一区 | 日韩在线小视频 | 一道本在线 | 亚洲国产精品久久久 | 亚洲成人免费电影 | 亚洲成人一区二区 | 色视频在线免费观看 |