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

📄 main.c

📁 SHT10资料和C例程
💻 C
📖 第 1 页 / 共 3 页
字号:




void Delay(uint n)
{
    uint i;
    for(i=0;i<n;i++);
    for(i=0;i<n;i++);
    for(i=0;i<n;i++);
    for(i=0;i<n;i++);
    for(i=0;i<n;i++);
}


/****************************************************************
*函数功能 :初始化ADC       				*
*入口参数 :无                          	*
*返 回 值 :无          				*
*说    明 :参考电压AVDD,转换对象是1/3AVDD     	*
****************************************************************/
void InitialADwater(void)
{
    //P1 out
    //P1DIR = 0x03;       //P1控制LED
    //led1 = 1;
    //led2 = 1;     //关LED

    ADCH &= 0X00;       //清EOC标志	
    ADCCFG=0X02;
        ADCCON3=0xb1;       //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
                    	//14位分辨率
    ADCCON1 = 0X30;       //停止A/D

    ADCCON1 |= 0X40;  //启动A/D

}



/****************************************************************
*函数功能 :主函数          			*
*入口参数 :无          				*
*返 回 值 :无          				*
*说    明 :无          				*
****************************************************************/
void measurewater(void)
{   
    char temp[2];                                        
    InitialADwater();                                    //初始化ADC

    //led1 = 1;
    Delay(30000);
        if(ADCCON1>=0x80)
    	{
            //led1 = 0;         //转换完毕指示
            temp[1] = ADCL;
            temp[0] = ADCH;
            //ADCCON1 |= 0x40;      //开始下一转换
                        //ADCCFG=0X02;
                        //ADCCON3=0xb1;
    		
            temp[1] = temp[1]>>2;
            temp[1] |= temp[0]<<6;

                        temp[0] = temp[0]>>2;   //数据处理
                        temp[0] &= 0x3f;
                        data[10]=temp[0];
                        data[11]=temp[1];
                        //num = ((float)(temp[0]*256+temp[1]))*3.3/8192;  //有一位符号位,取2^13;
                        //num -= 0.2;
                            
            }
       
}
////////////处理数据部分/////////////////








/****************************************************
5、 CO2函数 
****************************************************/
void InitialADco2(void)
{
    //P1 out
    //P1DIR = 0x03;       //P1控制LED
    //led1 = 1;
    //led2 = 1;     //关LED

    ADCH &= 0X00;       //清EOC标志	
    //P0=0X01;
    ADCCFG=0X01;
        ADCCON3=0xb0;       //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
                    	//14位分辨率
        
    ADCCON1 = 0X30;       //停止A/D

    ADCCON1 |= 0X40;  //启动A/D

}



/****************************************************************
*函数功能 :主函数          			*
*入口参数 :无          				*
*返 回 值 :无          				*
*说    明 :无          				*
****************************************************************/
void measureco2(void)
{   
    char temp[2]; 
    //P0INP=0X01;
    
    InitialADco2();                                    //初始化ADC

    //led1 = 1;
    Delay(30000);
        if(ADCCON1>=0x80)
    	{
            //led1 = 0;         //转换完毕指示
            temp[1] = ADCL;
            temp[0] = ADCH;
            //ADCCON1 |= 0x40;      //开始下一转换
                        //ADCCFG=0X02;
                        //ADCCON3=0xb1;
    		
            temp[1] = temp[1]>>2;
            temp[1] |= temp[0]<<6;

                        temp[0] = temp[0]>>2;   //数据处理
                        temp[0] &= 0x3f;
                        data[8]=temp[0];
                        data[9]=temp[1];
                        //num = ((float)(temp[0]*256+temp[1]))*3.3/8192;  //有一位符号位,取2^13;
                        //num -= 0.2;
                            
            }
       
}






/****************************************************
6、 氨气函数 
****************************************************/
void InitialADNH3(void)
{
    //P1 out
    //P1DIR = 0x03;       //P1控制LED
    //led1 = 1;
    //led2 = 1;     //关LED

    ADCH &= 0X00;       //清EOC标志	
    ADCCFG=0X20;
        ADCCON3=0xb5;       //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
                    	//14位分辨率
    ADCCON1 = 0X30;       //停止A/D

    ADCCON1 |= 0X40;  //启动A/D

}



/****************************************************************
*函数功能 :主函数          			*
*入口参数 :无          				*
*返 回 值 :无          				*
*说    明 :无          				*
****************************************************************/
void measureNH3(void)
{   
    char temp[2];                                        
    InitialADNH3();                                    //初始化ADC

    //led1 = 1;
    Delay(30000);
        if(ADCCON1>=0x80)
    	{
            //led1 = 0;         //转换完毕指示
            temp[1] = ADCL;
            temp[0] = ADCH;
            //ADCCON1 |= 0x40;      //开始下一转换
                        //ADCCFG=0X02;
                        //ADCCON3=0xb1;
    		
            temp[1] = temp[1]>>2;
            temp[1] |= temp[0]<<6;

                        temp[0] = temp[0]>>2;   //数据处理
                        temp[0] &= 0x3f;
                        data[14]=temp[0];
                        data[15]=temp[1];
                        //num = ((float)(temp[0]*256+temp[1]))*3.3/8192;  //有一位符号位,取2^13;
                        //num -= 0.2;
                            
            }
       
}

/****************************************************
7、 电导函数 
****************************************************/
void InitialADdiandao(void)
{
    //P1 out
    //P1DIR = 0x03;       //P1控制LED
    //led1 = 1;
    //led2 = 1;     //关LED

    ADCH &= 0X00;       //清EOC标志	
    ADCCFG=0X10;
        ADCCON3=0xb4;       //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
                    	//14位分辨率
    ADCCON1 = 0X30;       //停止A/D

    ADCCON1 |= 0X40;  //启动A/D

}



/****************************************************************
*函数功能 :主函数          			*
*入口参数 :无          				*
*返 回 值 :无          				*
*说    明 :无          				*
****************************************************************/
void measurediandao(void)
{   
    char temp[2];                                        
    InitialADdiandao();                                    //初始化ADC

    //led1 = 1;
    Delay(30000);
        if(ADCCON1>=0x80)
    	{
            //led1 = 0;         //转换完毕指示
            temp[1] = ADCL;
            temp[0] = ADCH;
            //ADCCON1 |= 0x40;      //开始下一转换
                        //ADCCFG=0X02;
                        //ADCCON3=0xb1;
    		
            temp[1] = temp[1]>>2;
            temp[1] |= temp[0]<<6;

                        temp[0] = temp[0]>>2;   //数据处理
                        temp[0] &= 0x3f;
                        data[16]=temp[0];
                        data[17]=temp[1];
                        //num = ((float)(temp[0]*256+temp[1]))*3.3/8192;  //有一位符号位,取2^13;
                        //num -= 0.2;
                            
            }
       
}
/****************************************************
8、 电量函数 
****************************************************/
void InitialADelectric(void)
{
    //P1 out
    //P1DIR = 0x03;       //P1控制LED
    //led1 = 1;
    //led2 = 1;     //关LED

    ADCH &= 0X00;       //清EOC标志	
    ADCCFG=0X80;
        ADCCON3=0xb7;       //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
                    	//14位分辨率
    ADCCON1 = 0X30;       //停止A/D

    ADCCON1 |= 0X40;  //启动A/D

}



/****************************************************************
*函数功能 :主函数          			*
*入口参数 :无          				*
*返 回 值 :无          				*
*说    明 :无          				*
****************************************************************/
void measureelectric(void)
{   
  uint x;
    char temp[2];                                        
    InitialADelectric();                                    //初始化ADC
//float num;
    //led1 = 1;
    Delay(30000);
        if(ADCCON1>=0x80)
    	{
            //led1 = 0;         //转换完毕指示
            temp[1] = ADCL;
            temp[0] = ADCH;
            //ADCCON1 |= 0x40;      //开始下一转换
                        //ADCCFG=0X02;
                        //ADCCON3=0xb1;
    		
            temp[1] = temp[1]>>2;
            temp[1] |= temp[0]<<6;

                        temp[0] = temp[0]>>2;   //数据处理
                        temp[0] &= 0x3f;
                        x=temp[0]*256+temp[1];
                        //num = ((float)(temp[0]*256+temp[1]))*3.3/8192;  //有一位符号位,取2^13;
                        //num -= 0.2;
                     if(x<10000&x>=4592)
                       data[18]=3;
                     else if (x>4344&x<4592)
                       data[18]=2;
                     else if (x<=4344&x>=4096)
                       data[18]=1;
                     else
                      data[18]=0; 
                            
            }
       
}
void main()
{
  data[0]=0x00;
 data[1]=0x00;
 measuretemphumi();
  
  measurelight();
    read_data();// 读取温度
   measurewater();
   measureco2();
   measureNH3();
   measurediandao();
   measureelectric();
   
   int i;
   for(i=0;i<20;i++)
   {
     if(data[i]==0xFF)
     {P1DIR=0x01;
       P1_0=0;
       Delay(30000);
       P1_0=1;
       Delay(30000);
     }
     
   }
}


⌨️ 快捷键说明

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