📄 freesalead.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 + -