微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 真心求助 PM2.5传感器GP2Y1010AU0F模数转换结果为0

真心求助 PM2.5传感器GP2Y1010AU0F模数转换结果为0

时间:10-02 整理:3721RD 点击:
/**********定时器0中断服务程序***************/
void timer0(void) interrupt 1
{
        uint j;
        TI=1;
        TH0=(65536-9174)/256;//定时10ms
        TL0=(65536-9174)%256;
        SBUF='a';while(!TI);TI=0;
        LED=1;
        Delay280us();//延时0.28ms
        abc=Read_AD_Data(0xe4);   //开启ADC采集
        FlagStar=1;
        for(j=0;j<5;j++);                       
        TR0=0;
        EA=0;       
        LED=0;  //关闭传感器LED
}
/**************************************************************
中值滤波  算法:先进行排序,然后将数组的中间值作为当前值返回。
**************************************************************/
uchar Error_Correct(uchar *str,uchar num)
{
                uchar i=0;
                uchar j=0;
                uchar Temp=0;
               
                //排序
                        for(i=0;i<num-1;i++)
                        {
                                for(j=i+1;j<num;j++)
                                {
                                        if(str[i]<str[j])
                                        {
                                        Temp=str[i];
                                        str[i]=str[j];
                                        str[j]=Temp;
                                }
                        }
                }
                //去除误差,取中间值
                return str[num/2];
}
void pm()          //加入主循环
{               
                uint Temp;
                if(FlagStar==1)
                {
                        num++;
                        ADC_Get[num]=abc;
                    SBUF=ADC_Get[num];while(!TI);TI=0;
                        if(num>9)
                        {
                                num=0;
                                DUST=Error_Correct(ADC_Get,10);//求取10次AD采样的值
                                DUST_Value=(DUST/256.0)*5000;   //转化成电压值mv
                                DUST_Value=DUST_Value*0.17-0.1; //固体悬浮颗粒浓度计算 Y=0.17*X-0.1  X--采样电压
                                //        if(DUST_Value<0)  DUST_Value=0;
                                //        if(DUST_Value>19600)  DUST_Value=760;  //限位
                                DUST=(uint)DUST_Value;
                                         
                                Temp=Data%10000;
                                TxBuf[0]=Temp/1000+0x30;//千位
                                SBUF=TxBuf[0];while(!TI);TI=0;                           
                                Temp%=1000;                      
                                TxBuf[1]='.';SBUF=TxBuf[1];while(!TI);TI=0;                      
                                TxBuf[2]=Temp/100+0x30;//百位
                                SBUF=TxBuf[2];while(!TI);TI=0;
                                Temp%=100;
                                TxBuf[3]=Temp/10+0x30;//十位
                            SBUF=TxBuf[3];while(!TI);TI=0;
                                TxBuf[4]=Temp%10+0x30;//龌
                                SBUF=TxBuf[4];while(!TI);TI=0;
                       
                        }
                                 TH0=(65536-9174)/256;//定时10ms
                                 TL0=(65536-9174)%256;
                                 TR0=1;  //开启定时器0
                                 EA=1;
                                 FlagStar=0;                  
                }
                 
}

AD转换用的是XPT2046 12位转换芯片

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top