单片机C语言基础编程源码八则
1.某单片机系统的P2口接一数模转换器DAC0832输出模拟量,现在要求从DAC0832输出连续的三角波,实现的方法是从P2口连续输出按照三角波变化的数值,从0开始逐渐增大,到某一最大值后逐渐减小,直到0,然后再从0逐渐增大,一直这样输出。试编写一函数,使从P2口输出的值产生三角波,并且使三角波的周期和最大值通过入口参数能够改变。
#includeabsacc.h>
#define DAC0832 XBYTE[0x7FFF]
void san(unsigned char max1,unsigned char zhou1)
{
unsigned char i,j,max,zhou;
max=max1;
zhou=zhou1;
while(1)
{
for(i=0;i=max,i++)
{
DAC0832=i;
for(j=0;jzhou/max;j++)
delay();
}
for(i=max-1;i>0,i--)
{
DAC0832=i;
for(j=0;jzhou/max;j++)
delay();
}
}
2.在数字滤波中有一种叫做“中值滤波”技术,就是对采集的数据按照从大到小或者从小到大进行排序,然后取其中在中间位置的数作为采样值。试编写一函数,对存放在片内数据存储器中从0x50开始的20个单元的采样数据用冒泡法排序进行中值滤波,把得到的采样数据存放到0x4f单元中。
void midf()
{
unsigned char data temp,i,j,*ptr,*ptr1;
ptr=0x50;
ptr1=0x4f;
for(j=20;j>1,j--)
{
for(i=0;ij;i++)
{
if(*(ptr+i)>*(ptr+i+1))
{
temp=*(ptr+i+1);
*(ptr+i+1)=*(ptr+i);
*(ptr+i)=temp;
}
}
}
*ptr1=*(ptr+20/2);
}
3.在数字滤波中有一种叫做“去极值平均滤波”技术,就是对采集的数据按照从大到小或者从小到大进行排序,然后去掉相同数目的极大值和极小值,对中间部分数据求算术平均值作为采样值。试编写一函数,对存放在片外数据存储器中从0x150开始的16个单元的采样数据,用选择法进行“去极值平均滤波”,把得到的采样数据存放到0x14f单元中。
void teaf()
{
unsigned char xdata *ptr;
unsigned char data temp,i,j,*ptr1;
ptr=0x150;
ptr1=0x4f;
for(j=16;j>1,j--)
{
for(i=0;ij;i++)
{
if(*(ptr+i)>*(ptr+i+1))
{
temp=*(ptr+i+1);
*(ptr+i+1)=*(ptr+i);
*(ptr+i)=temp;
}
}
}
temp=0;
for(i=0;i16-2;i++)
temp=temp+*(ptr+i+1);
*ptr1=temp/(16-2);
}
评论