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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2022|回復: 2
收起左側

DHT11+BMP180測量溫度、壓力、濕度傳感器

[復制鏈接]
ID:478130 發表于 2019-3-18 14:45 | 顯示全部樓層 |閱讀模式
#include <reg51.h>
#include <intrins.h>
#include <math.h>   
#include <stdlib.h>  
#include <stdio.h>   
long  temperature;   
long  pressure;      
#define uchar unsigned char
#define uint unsigned int
#define BMP180_SlaveAddress 0xee                              
#define OSS 0
sbit   DataPort=P0;  
sbit  SCL=P1^0;      
sbit   SDA=P1^1;      
sbit Data=P3^6;   
uchar rec_dat[9];
sbit lcdrs=P2^6;
sbit lcdrw=P2^5;
sbit lcden=P2^7;
typedef unsigned char  BYTE;
typedef unsigned short WORD;
long  pressure;
short ac1;
short ac2;
short ac3;
unsigned short ac4;
unsigned short ac5;
unsigned short ac6;
short b1;
short b2;
short mb;
short mc;
short md;
void delay(uint n)
{  uint x,y;
   for(x=n;x>0;x--)
       for(y=110;y>0;y--);
}

void write_com(uchar com)
{
        lcdrs=0;                        
        P0=com;
        delay(5);
        lcden=1;                        
        delay(5);
        lcden=0;                       
}
void write_dat(uchar dat)
{
        lcdrs=1;                        
        P0=dat;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void init_lcd()
{
        lcden=0;
        lcdrw=0;
        write_com(0x38);         
        write_com(0x0c);         
        write_com(0x06);         
        write_com(0x01);
}
void DHT11_delay_us(uchar n)
{
    while(--n);
}
void DHT11_delay_ms(uint z)
{
   uint i,j;
   for(i=z;i>0;i--)
      for(j=110;j>0;j--);
}
void DHT11_start()
{
   Data=1;
   DHT11_delay_us(2);
   Data=0;
   DHT11_delay_ms(30);  
   Data=1;
   DHT11_delay_us(30);
}
uchar DHT11_rec_byte()      
{
   uchar i,dat=0;
  for(i=0;i<8;i++)   
   {         
      while(!Data);   
      DHT11_delay_us(8);     
      dat<<=1;           
      if(Data==1)   
         dat+=1;
      while(Data);  
    }  
    return dat;
}
void DHT11_receive()      
{
    uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);        
        DHT11_delay_us(40);
        R_H=DHT11_rec_byte();      
        R_L=DHT11_rec_byte();   
        T_H=DHT11_rec_byte();     
        T_L=DHT11_rec_byte();   
        revise=DHT11_rec_byte();
        DHT11_delay_us(25);   
        if((R_H+R_L+T_H+T_L)==revise)      
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;
        }
      
        rec_dat[0]='0'+(RH/10);
        rec_dat[1]='0'+(RH%10);
        rec_dat[2]='R';
        rec_dat[3]='H';
        rec_dat[4]=' ';
        rec_dat[5]=' ';
        rec_dat[6]='0'+(TH/10);
        rec_dat[7]='0'+(TH%10);
        rec_dat[8]='C';
    }
}

                                 
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{                                                
Y&=1;                                                
X&=15;                                                
if(Y)X|=0x40;                                       
X|=0x80;                        
write_com(X);               
write_dat(DData);               
}                                                
void Delay5us()
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
void Delay5ms()
{
    WORD n = 560;
    while (n--);
}
void BMP180_Start()
{
    SDA = 1;                  
    SCL = 1;                  
    Delay5us();              
    SDA = 0;                  
    Delay5us();               
    SCL = 0;                  
}
void BMP180_Stop()
{
    SDA = 0;                  
    SCL = 1;                    
    Delay5us();                 
    SDA = 1;                    
    Delay5us();               
}

void BMP180_SendACK(bit ack)
{
    SDA = ack;               
    SCL = 1;            
    Delay5us();               
    SCL = 0;                    
    Delay5us();               
}
bit BMP180_RecvACK()
{
    SCL = 1;               
    Delay5us();              
    CY = SDA;               
    SCL = 0;               
    Delay5us();              
    return CY;
}
void BMP180_SendByte(BYTE dat)
{
    BYTE i;
    for (i=0; i<8; i++)         
    {
        dat <<= 1;              
        SDA = CY;               
        SCL = 1;               
        Delay5us();         
        SCL = 0;           
        Delay5us();      
    }
    BMP180_RecvACK();
}
BYTE BMP180_RecvByte()
{
    BYTE i;
    BYTE dat = 0;
    SDA = 1;                    
    for (i=0; i<8; i++)         
    {
        dat <<= 1;
        SCL = 1;              
        Delay5us();           
        dat |= SDA;                        
        SCL = 0;     
        Delay5us();         
}
    return dat;
}
short Multiple_read(uchar ST_Address)
{
    uchar msb, lsb;
    short _data;
    BMP180_Start();                        
    BMP180_SendByte(BMP180_SlaveAddress);   
    BMP180_SendByte(ST_Address);            
    BMP180_Start();                          
    BMP180_SendByte(BMP180_SlaveAddress+1);
    msb = BMP180_RecvByte();                 
    BMP180_SendACK(0);                       
    lsb = BMP180_RecvByte();   
    BMP180_SendACK(1);                       
    BMP180_Stop();                          
    Delay5ms();
    _data = msb << 8;
    _data |= lsb;
    return _data;
}
long bmp180ReadTemp(void)
{
    BMP180_Start();                 
    BMP180_SendByte(BMP180_SlaveAddress);   
    BMP180_SendByte(0xF4);         
    BMP180_SendByte(0x2E);      
    BMP180_Stop();                  
    delay(10);
    return (long) Multiple_read(0xF6);
}
long bmp180ReadPressure(void)
{
    long pressure ;
    BMP180_Start();                  
    BMP180_SendByte(BMP180_SlaveAddress);   
    BMP180_SendByte(0xF4);         
    BMP180_SendByte(0x34);         
    BMP180_Stop();                  
    delay(10);                     
    pressure = Multiple_read(0xF6);
    pressure &= 0x0000FFFF;
    return pressure;
}

void Init_BMP180()
{
    ac1 = Multiple_read(0xAA);
    ac2 = Multiple_read(0xAC);
    ac3 = Multiple_read(0xAE);
    ac4 = Multiple_read(0xB0);
    ac5 = Multiple_read(0xB2);
    ac6 = Multiple_read(0xB4);
    b1 =  Multiple_read(0xB6);
    b2 =  Multiple_read(0xB8);
    mb =  Multiple_read(0xBA);
    mc =  Multiple_read(0xBC);
    md =  Multiple_read(0xBE);
}
void bmp180Convert()
{
    long ut;
    long up;
    long x1, x2, b5, b6, x3, b3, p;
    unsigned long b4, b7;
   
     
    ut = bmp180ReadTemp();
    ut = bmp180ReadTemp();     
    up = bmp180ReadPressure();
    up = bmp180ReadPressure();
    x1 = ((long)ut - ac6) * ac5 >> 15;         
    x2 = ((long) mc << 11) / (x1 + md);
    b5 = x1 + x2;
     temperature = (b5 + 8) >> 4;
    b6 = b5 - 4000;     
    x1 = (b2 * (b6 * b6 >> 12)) >> 11;
    x2 = ac2 * b6 >> 11;
    x3 = x1 + x2;
    b3 = (((long)ac1 * 4 + x3) + 2)/4;
    x1 = ac3 * b6 >> 13;
    x2 = (b1 * (b6 * b6 >> 12)) >> 16;
    x3 = ((x1 + x2) + 2) >> 2;
    b4 = (ac4 * (unsigned long) (x3 + 32768)) >> 15;
    b7 = ((unsigned long) up - b3) * (50000 >> OSS);
   if (b7 < 0x80000000)
    p = (b7<<1)/b4;
  else
    p = (b7/b4)<<1;
    x1 = (p >> 8) * (p >> 8);
    x1 = (x1 * 3038) >> 16;
    x2 = (-7357 * p) >> 16;
    pressure = 2*(p + ((x1 + x2 + 3791) >> 4));

DisplayOneChar(0,1,pressure/100000+48);  
  DisplayOneChar(1,1,pressure%100000/10000+48);
  DisplayOneChar(2,1,pressure%10000/1000+48);
  DisplayOneChar(3,1,'.');
  DisplayOneChar(4,1,pressure%1000/100+48);
  DisplayOneChar(5,1,'K');
  DisplayOneChar(6,1,'p');
}


void main()
{
   uchar i;   
   init_lcd();
   Init_BMP180();  
   while(1)
   {   
       DHT11_delay_ms(100);   
       DHT11_receive();
       write_com(0x80);
       for(i=0;i<9;i++)
       write_dat(rec_dat[i]);
     bmp180Convert();
        delay(100);
  }

   
}


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:96218 發表于 2019-7-23 22:00 | 顯示全部樓層
請求版主發硬件連接圖
回復

使用道具 舉報

ID:658240 發表于 2019-12-10 19:47 | 顯示全部樓層
bmp180怎么和單片機連接
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久综合九九 | 91人人澡人人爽 | 黄色网址av| 电影91久久久 | a级在线免费观看 | 日日夜夜免费精品 | 色综合一区二区 | 国产精品18久久久久久白浆动漫 | 高清黄色网址 | 亚洲欧美在线一区 | 色黄网站| 日韩精品在线观看视频 | 欧美精 | 91av在线视频观看 | 波霸ol一区二区 | 国产欧美日韩一区 | 国产精品一区二区三级 | 久久最新| 日韩在线视频免费观看 | 国产福利小视频 | 欧美一区二区成人 | 国产91丝袜在线18 | 国产精品久久久久久久久久妞妞 | 一区二区高清不卡 | 国产超碰人人爽人人做人人爱 | 国产一区二区在线91 | 91精品国产手机 | 午夜天堂精品久久久久 | 九九九精品视频 | wwwxx在线观看| 精品麻豆剧传媒av国产九九九 | 在线国产精品一区 | 日韩欧美高清 | 看av在线| 天天天久久久 | 99久久夜色精品国产亚洲96 | 在线免费观看视频你懂的 | 天堂在线1 | 精品视频一区二区三区 | 午夜精品久久久久久久99黑人 | 欧洲色|