⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 SHT10资料和C例程
💻 C
📖 第 1 页 / 共 3 页
字号:
      light_waitack(); 
      asm("NOP");asm("NOP");asm("NOP");
      asm("NOP");asm("NOP");asm("NOP");
      light_stop();
      asm("NOP");asm("NOP");asm("NOP");
      asm("NOP");asm("NOP");asm("NOP");
      return 1;
  
    }
}
char readdiagram(unsigned char regadr)
{       unsigned char a;
        light_start();
        light_writebyte(0x88);
        asm("NOP");asm("NOP");asm("NOP");
         asm("NOP");asm("NOP");asm("NOP");
        light_waitack();
        
        asm("NOP");asm("NOP");asm("NOP");
        asm("NOP");asm("NOP");asm("NOP");
        light_writebyte(regadr);//所写的寄存器地址
        asm("NOP");asm("NOP");asm("NOP");
        asm("NOP");asm("NOP");asm("NOP");
        light_waitack();
        light_stop();
        asm("NOP");asm("NOP");asm("NOP");
        asm("NOP");asm("NOP");asm("NOP");
        light_start();
        light_writebyte(0x89);
        asm("NOP");asm("NOP");asm("NOP");
        asm("NOP");asm("NOP");asm("NOP");
        light_waitack2();
        asm("NOP");asm("NOP");asm("NOP");
        asm("NOP");asm("NOP");asm("NOP");
        a=readbyte();
        asm("NOP");asm("NOP");asm("NOP");
        asm("NOP");asm("NOP");asm("NOP");
        notack();
        light_stop();
        return a;
}
void sync_I2C(void)
{
   light_start();
   light_writebyte(0x88);
   asm("NOP");asm("NOP");asm("NOP");
   asm("NOP");asm("NOP");asm("NOP");
   light_waitack();
   asm("NOP");asm("NOP");asm("NOP");
   asm("NOP");asm("NOP");asm("NOP");
   light_writebyte(0x80);
   light_waitack();
   light_stop();
   
}
char measurelight(void)
{
  
  int y;
  //unsigned char lsb,msb;
  y=writediagram(0x01,0x0c);//侧量范围128000
  if(y==0)
  {
    data[7]=0xFF;  
    data[6]=0xFF;
    return 0;
  }
  else
  {
    writediagram(0x00,0x00);//复位ADC
    writediagram(0x00,0x80);//启动ADC,且为16位
    DELAY(20000);
    //readdiagram(0x01);
    writediagram(0x00,0x08);//将ADC数据放出
 
    //readdiagram(0x00);
    // writediagram(0x00,0x88);//16位计数器
    // writediagram(0x00,0x08);
    data[7]=readdiagram(0x04);  
    data[6]=readdiagram(0x05);
  }
}
 







/****************************************************
3、空气温湿度函数
****************************************************/

/*void DELAY(uint n)
{
    uint tt;
    for(tt = 0;tt<n;tt++);
        for(tt = 0;tt<n;tt++);
    for(tt = 0;tt<n;tt++);
        for(tt = 0;tt<n;tt++);
        for(tt = 0;tt<n;tt++);
    for(tt = 0;tt<n;tt++);
        for(tt = 0;tt<n;tt++);
        for(tt = 0;tt<n;tt++);
    for(tt = 0;tt<n;tt++);
}*/

//******************************************************************************



char s_write_byte(unsigned char value)
//----------------------------------------------------------------------------------
// writes a byte on the Sensibus and checks the acknowledge 
{ 
  //P0DIR=0x08;
  P0DIR=0x0c;
  unsigned char i,error=0;  
  for (i=0x80;i>0;i/=2)             //shift bit for masking
  { if (i & value)
    DATA=1;          //masking value with i , write to SENSI-BUS
    else 
    DATA=0; 
    asm("NOP");asm("NOP");asm("NOP");
    SCK=1;                          //clk for SENSI-BUS
    asm("NOP");asm("NOP");asm("NOP");        //pulswith approx. 5 us    
    SCK=0;
  }
  //DATA=1; 
  //release DATA-line
   asm("NOP");asm("NOP");asm("NOP");
  P0DIR=0x08;
  asm("NOP");asm("NOP");asm("NOP");
  SCK=1;                            //clk #9 for ack 
  error=DATA; 
  asm("NOP");asm("NOP");asm("NOP");//此处error为0,check ack (DATA will be pulled down by SHT11)
  SCK=0;  
  asm("NOP");asm("NOP");asm("NOP");
  P0DIR=0x0c;
  DATA=1;
  return error;                     //error=1 in case of no acknowledge
}

//----------------------------------------------------------------------------------
unsigned char s_read_byte(unsigned char ack)
//----------------------------------------------------------------------------------
// reads a byte form the Sensibus and gives an acknowledge in case of "ack=1" 
{ 
  unsigned char i,val=0;
  //P0DIR=0x08;
  P0DIR=0x08;
  //DATA=1;                           //release DATA-line
  for (i=0x80;i>0;i/=2)             //shift bit for masking
  { SCK=1;                          //clk for SENSI-BUS
    if (DATA) val=(val | i);        //read bit  
    asm("NOP");asm("NOP");asm("NOP");
    SCK=0; 
    asm("NOP");asm("NOP");asm("NOP");
  }
  P0DIR=0x0c;
  DATA=!ack;                        //in case of "ack==1" pull down DATA-Line
  asm("NOP");asm("NOP");asm("NOP");
  SCK=1;                            //clk #9 for ack
 asm("NOP");asm("NOP");asm("NOP");         //pulswith approx. 5 us 
  SCK=0;                    	    
  //DATA=1;                           //release DATA-line
  DELAY(5000);
  return val;
}

//----------------------------------------------------------------------------------
void s_transstart(void)
//----------------------------------------------------------------------------------
// generates a transmission start 
//       _____         ________
// DATA:      |_______|
//           ___     ___
// SCK : ___|   |___|   |______
{  
   //P0DIR=0x08;
   P0DIR=0x0c;                   //设置I/O口方向
   DATA=1; 
   SCK=0;                   //Initial state
   asm("NOP");asm("NOP");asm("NOP");
   SCK=1;
   asm("NOP");asm("NOP");asm("NOP");
   DATA=0;
   asm("NOP");asm("NOP");asm("NOP");
   SCK=0;  
   asm("NOP");asm("NOP");asm("NOP");
   SCK=1;
   asm("NOP");asm("NOP");asm("NOP");
   DATA=1;         
   asm("NOP");asm("NOP");asm("NOP");
   SCK=0;          
}

//----------------------------------------------------------------------------------
void s_connectionreset(void)
//----------------------------------------------------------------------------------
// communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart
//       _____________________________________________________         ________
// DATA:                                                      |_______|
//          _    _    _    _    _    _    _    _    _        ___     ___
// SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______|   |___|   |______
{  
  unsigned char i; 
  //P0DIR=0x08;
  P0DIR=0x0c;
  DATA=1; 
  SCK=0;                    //Initial state
  for(i=0;i<9;i++)                  //9 SCK cycles
  { SCK=1;
  asm("NOP");asm("NOP");asm("NOP");
  SCK=0;
  asm("NOP");asm("NOP");asm("NOP");
  }
  //s_transstart();                   //transmission start
}

//----------------------------------------------------------------------------------
char s_softreset(void)
//----------------------------------------------------------------------------------
// resets the sensor by a softreset 
{ 
  unsigned char error=0;  
  s_connectionreset();              //reset communication
  error+=s_write_byte(RESET);       //send RESET-command to sensor
  return error;                     //error=1 in case of no response form the sensor
}


                    		   
//----------------------------------------------------------------------------------

//----------------------------------------------------------------------------------
char s_measuretemp(void)
//----------------------------------------------------------------------------------
// makes a measurement (humidity/temperature) with checksum
{ 
  unsigned error;
  unsigned int i;

  s_transstart();                   //transmission start
                       //send command to sensor
s_write_byte(MEASURE_TEMP);



  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  DELAY(50000);
  P0DIR=0x08;
  for (i=0;i<65535;i++)
  {
    if(DATA==0) break; //wait until sensor has finished the measurement
 
  }
  
   if(DATA)
   {
  data[2]=0xFF;
  data[3]= 0xFF ;
  return 0;
  } 

  
  // or timeout (~2 sec.) is reached
  data[2]=s_read_byte(ACK);    //read the first byte (MSB)
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  DELAY(10000);
  data[3]=s_read_byte(noACK);    //read the second byte (LSB)
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
//data[25]=s_read_byte();
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");

}

char s_measurehumi(void)
//----------------------------------------------------------------------------------
// makes a measurement (humidity/temperature) with checksum
{ 
  unsigned error;
  unsigned int i;

  s_transstart();                   //transmission start
                   //send command to sensor

  s_write_byte(MEASURE_HUMI);


  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  DELAY(50000);
  P0DIR=0x08;
  for (i=0;i<65535;i++)
  {
    if(DATA==0) break; //wait until sensor has finished the measurement
 
  }
  
   if(DATA)
    {
  data[4]=0xFF;
  data[5]= 0xFF ;
  return 0;
  } 

  
  // or timeout (~2 sec.) is reached
  data[4] =s_read_byte(ACK);    //read the first byte (MSB)
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
  
  data[5]=s_read_byte(noACK);    //read the second byte (LSB)
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");
//data[26]=s_read_byte();
  asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");


}
//----------------------------------------------------------------------------------
      void measuretemphumi()
//----------------------------------------------------------------------------------
// sample program that shows how to use SHT11 functions
// 1. connection reset 
// 2. measure humidity [ticks](12 bit) and temperature [ticks](14 bit)
// 3. calculate humidity [%RH] and temperature [癈]
// 4. calculate dew point [癈]
// 5. print temperature, humidity, dew point  

{     //DELAY(10000);
      s_connectionreset();
      //DELAY(50000);
      s_measuretemp();  
      s_connectionreset();
      //DELAY(50000); 
      s_measurehumi(); 
      //DELAY(50000);
      //s_connectionreset();
  
} 

 



/****************************************************
4、 土壤水分函数 
****************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -