單片機(jī)常用函數(shù)(濾波、字符處理等)
//函數(shù)名:filter
//功能描述:平均值濾波
//輸入?yún)?shù):
//int iput:要濾波的數(shù)據(jù)
//int buf[]:濾波緩存數(shù)組指針
//uint *count:濾波計(jì)數(shù)器指針
//uint lenght:濾波深度
//long int *sum:緩存數(shù)組中所有數(shù)據(jù)的和指針
//返回值:濾波后的平均值
//==================================================================================
int filter(int iput,int buf[],uint *count,uint lenght,long int *sum)
{
int a=0;
int adtemp=0;
adtemp = buf[lenght-1];
for (a=lenght-1;a>0;a--)
{
buf[a]=buf[a-1];
}
buf[0]=iput;
if (*count
*sum=*sum+iput-adtemp;
return (int)(*sum/(*count));
}
//==============================End filter==========================================
//==============================Start ftostr=========================================
/*
// 函數(shù)名:ftostr
// 輸入?yún)?shù):待轉(zhuǎn)換數(shù)字,存放字符串,浮點(diǎn)小數(shù)后邊位數(shù)
// 描述:將浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)換為字符串
// 返回值:字符串大小
*/
//===================================================================================
int ftostr(float fNum,char str[],int dotsize)
{
// 定義變量
int iSize=0;//記錄字符串長(zhǎng)度的數(shù)
int n=0;//用作循環(huán)的臨時(shí)變量
char *p=str;//做換向時(shí)用的指針
char *s=str;//做換向時(shí)用的指針
char isnegative=0;//負(fù)數(shù)標(biāo)志
unsigned long int i_predot;//小數(shù)點(diǎn)前的數(shù)
unsigned long int i_afterdot;//小數(shù)點(diǎn)后的數(shù)
float f_afterdot;//實(shí)數(shù)型的小數(shù)部分
//判斷是否為負(fù)數(shù)
if(fNum<0)
{
isnegative=1;//設(shè)置負(fù)數(shù)標(biāo)志
fNum=0-fNum;//將負(fù)數(shù)變?yōu)檎龜?shù)
}
i_predot=(unsigned long int)fNum;//將小數(shù)點(diǎn)之前的數(shù)變?yōu)檎麛?shù)
f_afterdot=fNum-i_predot;//單獨(dú)取出小數(shù)點(diǎn)之后的數(shù)
//根據(jù)設(shè)定的要保存的小數(shù)點(diǎn)后的位數(shù),將小數(shù)點(diǎn)后相應(yīng)的位數(shù)變到小數(shù)點(diǎn)之前
for(n=dotsize;n>0;n--)
{
f_afterdot=f_afterdot*10;
}
i_afterdot=(unsigned long int)f_afterdot;//將小數(shù)點(diǎn)后相應(yīng)位數(shù)的數(shù)字變?yōu)檎麛?shù)
//先將小數(shù)點(diǎn)后的數(shù)轉(zhuǎn)換為字符串
n=dotsize;
while(i_afterdot>0|n>0)
{
n--;
str[iSize++]=i_afterdot%10+0;//對(duì)10取余并變?yōu)锳SCII碼
i_afterdot=i_afterdot/10;//對(duì)10取商
}
str[iSize++] =.;//加上小數(shù)點(diǎn)
//處理小數(shù)點(diǎn)前為0的情況。
if(i_predot==0)
str[iSize++]=0;
//再將小數(shù)點(diǎn)前的數(shù)轉(zhuǎn)換為字符串
while(i_predot>0)
{
str[iSize++]=i_predot%10+0;//對(duì)10取余并變?yōu)锳SCII碼
i_predot=i_predot/10;//對(duì)10取商
}
if(isnegative==1)
str[iSize++]=-;//如果是負(fù)數(shù),則在最后加上負(fù)號(hào)
str[iSize] =