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

📄 freesalead.c

📁 这是一个飞思卡而单片机的模拟数字转换程序,它含有三个子函数
💻 C
字号:
/*-----------------------------------------------------*
*文件描述:本文件包含了A/D转换的3个子函数,分别为:       *  
*(1)advalue:获取1路A/D转换结果                         *
*   unsigned char advalue(unsigned char channel)       *
*(2)admid:获取中值滤波后的A/D转换结果                  *
*   unsigned char admid(unsigned char channel)         *
*(3)adave:获取均值滤波后的A/D转换结果                  *
*   unsigned char adave(unsigned char n,               *
*   unsigned char channel)                             *
*-------------《嵌入式应用技术基础教程》--------------*/
//[以下为子程序源代码]
//[包含头文件]
#i nclude "GP32C.H"
#define COCOBit  7           //转换完成标志位
/*advalue:1路A/D转换函数-------------------------------*
*功能:获取通道channel的A/D转换结果                     *
*参数:channel=通道号                                   *
*返回:该通道的A/D转换结果                              *
*-----------------------------------------------------*/ 
unsigned char advalue(unsigned char channel)
  { 
   //选取通道号ADCH4-ADCH0=00000-00111
 unsigned char tmp;
 channel&=0b00011111;
 tmp=ADSCR&0b11100000;
 tmp=tmp|channel;
 ADSCR=tmp;
 //取A/D转换结果  
  while(1)
     if((ADSCR&(1<<COCOBit))!=0)
          {tmp=ADR; break;}
 return  tmp;
  }
/*admid:1路A/D转换函数(中值滤波)-----------------------*
*功能:获取通道channel中值滤波后的A/D转换结果           *
*参数:channel=通道号                                   *
*返回:该通道中值滤波后的A/D转换结果                    *
*-----------------------------------------------------*/ 
unsigned char admid(unsigned char channel) 
  {
     unsigned char i,j,k,tmp;
     //取三次A/D转换结果
     i=advalue(channel);
     j=advalue(channel);
     k=advalue(channel);
     //从三次A/D转换结果中取中值
     if (i>j) 
         { tmp=i; i=j; j=tmp; }
     if (k>=j)
           tmp=j;
     else
           if (k>=i)  tmp=k;
           else       tmp=i;
     return tmp;
 }
/*adave:1路A/D转换函数(均值滤波)-----------------------*
*功能:对通道channel的A/D转换结果求n次平均值            *
*参数:n=平均次数,channel=通道号                       *
*返回:该通道均值滤波后的A/D转换结果                    *
*-----------------------------------------------------*/ 
unsigned char adave(unsigned char n,unsigned char channel) 
  {
     //求n次A/D转换的平均值
     unsigned char i;
     unsigned int j;
     j=0;
     for (i=0;i<n;i++)         
          j+=admid(channel);
     j=j/n;
     return (unsigned char)j;
  }

⌨️ 快捷键说明

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