微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机常用函数(滤波、字符处理等)

单片机常用函数(滤波、字符处理等)

时间:11-18 来源:互联网 点击:

//函数名:filter
//功能描述:平均值滤波
//输入参数:
//int iput:要滤波的数据
//int buf[]:滤波缓存数组指针
//uint *count:滤波计数器指针
//uint lenght:滤波深度
//long int *sum:缓存数组中所有数据的和指针
//返回值:滤波后的平均值
//==================================================================================
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*count=*count+1;
*sum=*sum+iput-adtemp;
return (int)(*sum/(*count));
}
//==============================End filter==========================================

//==============================Start ftostr=========================================
/*
// 函数名:ftostr
// 输入参数:待转换数字,存放字符串,浮点小数后边位数
// 描述:将浮点型数据转换为字符串
// 返回值:字符串大小
*/
//===================================================================================
int ftostr(float fNum,char str[],int dotsize)
{
// 定义变量
int iSize=0;//记录字符串长度的数
int n=0;//用作循环的临时变量
char *p=str;//做换向时用的指针
char *s=str;//做换向时用的指针
char isnegative=0;//负数标志
unsigned long int i_predot;//小数点前的数
unsigned long int i_afterdot;//小数点后的数
float f_afterdot;//实数型的小数部分

//判断是否为负数
if(fNum<0)
{
isnegative=1;//设置负数标志
fNum=0-fNum;//将负数变为正数
}

i_predot=(unsigned long int)fNum;//将小数点之前的数变为整数
f_afterdot=fNum-i_predot;//单独取出小数点之后的数
//根据设定的要保存的小数点后的位数,将小数点后相应的位数变到小数点之前
for(n=dotsize;n>0;n--)
{
f_afterdot=f_afterdot*10;
}
i_afterdot=(unsigned long int)f_afterdot;//将小数点后相应位数的数字变为整数

//先将小数点后的数转换为字符串
n=dotsize;
while(i_afterdot>0|n>0)
{
n--;
str[iSize++]=i_afterdot%10+0;//对10取余并变为ASCII码
i_afterdot=i_afterdot/10;//对10取商
}
str[iSize++] =.;//加上小数点
//处理小数点前为0的情况。
if(i_predot==0)
str[iSize++]=0;
//再将小数点前的数转换为字符串
while(i_predot>0)
{
str[iSize++]=i_predot%10+0;//对10取余并变为ASCII码
i_predot=i_predot/10;//对10取商
}

if(isnegative==1)
str[iSize++]=-;//如果是负数,则在最后加上负号
str[iSize] =\0;//加上字符串结束标志

p=str+iSize-1;//将P指针指向字符串结束标志之前

for(;p-s>0;p--,s++)//将字符串中存储的数调头
{
*s^=*p;
*p^=*s;
*s^=*p;
}
// 返回指针字符串大小
return iSize;
}
//==============================End ftostr===========================================

//==============================Start itostr=========================================
/*
// 函数名:itostr
// 输入参数:待转换数字,存放字符串
// 描述:将整型数据转换为字符串
// 返回值:字符串大小
*/
//===================================================================================
int itostr(int iNum,char str[])
{
int iSize=0;
char isnegative=0;
char *p=str;//做换向时用的指针
char *s=str;//做换向时用的指针
if(iNum<0)
{
isnegative=1;
iNum=0-iNum;
}
if(iNum==0)
str[iSize++]=0;
while(iNum>0)
{
str[iSize++]=iNum%10+0;//对10取余并变为ASCII码
iNum=iNum/10;//对10取商
}
if(isnegative)
str[iSize++]=-;
str[iSize]=\0;
p=str+iSize-1;//将P指针指向字符串结束标志之前

for(;p-s>0;p--,s++)//将字符串中存储的数调头
{
*s^=*p;
*p^=*s;
*s^=*p;
}
// 返回指针字符串大小
return iSize;
}
//==============================End itostr===========================================

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

网站地图

Top