|
楼主 |
发表于 2010-4-14 22:37:45
|
显示全部楼层
这是我的主要程序,也是仿照别人写的
while(1)
{
//DataValue=ADC_GetConversionValue(ADC1);
//DispNum24(0,216,DataValue*324/409600); //3.3V*100除以2的12次
for(aa=0;aa<400;aa++)
{
//K=compare(da,320);
da[aa]=180-(60*(ADC_GetConversionValue(ADC1))*324/409600+0.5); // ADC_GetConversionValue(ADC1)/10; //采集AD数据,放在da[]数组中。
for(bb=0;bb<100;bb++); //??????????用于调节水平灵敏度
}
cc=1;
aa=0;
while(cc)
{
if(da[aa]<100&da[aa+1]>100) //显示波形的起始点 ,使显示的波形稳定
{
/*****************************************************************
波形的显示程序,一共显示320个点
*******************************************************************/
dd=aa; //从稳定的采样点开始采样,dd是为了获取采样点的数据,以便清屏的时候使用
for(bb=0;bb<320;bb++) //显示程序
{
SetPoint(bb,da[aa],0x07ff); //显示波形初级波形
if(da[aa+1]-da[aa]>0)
{
ee=da[aa+1]-da[aa]; //获取两次采样的差值
gg=ee>>1;
for(ff=1;ff<= gg;ff++)
{
SetPoint(bb,da[aa]+ff,0x07ff);
SetPoint(bb+1,da[aa]+ee-ff,0x07ff);
}
}
if(da[aa+1]-da[aa]<0)
{
ee=da[aa]-da[aa+1];
gg=ee>>1;
for(ff=1;ff<= gg;ff++)
{
SetPoint(bb,da[aa]-ff,0x07ff);
SetPoint(bb+1,da[aa]-(ee-ff),0x07ff);
}
}
aa++;
//for(ee=0;ee<100;ee++);
}
Delay_nms(100);
//for(ee=0;ee<1000;ee++);
/*****************************************************************
波形的显示程序,一共显示320个点
*******************************************************************/
aa=dd; //擦除程序
for(bb=0;bb<320;bb++) //显示程序
{
SetPoint(bb,da[aa],0x0000); //显示波形初级波形
if(da[aa+1]-da[aa]>0)
{
ee=da[aa+1]-da[aa]; //获取两次采样的差值
gg=ee>>1;
for(ff=1;ff<= gg;ff++)
{
SetPoint(bb,da[aa]+ff,0x0000);
SetPoint(bb+1,da[aa]+ee-ff,0x0000);
}
}
if(da[aa+1]-da[aa]<0)
{
ee=da[aa]-da[aa+1];
gg=ee>>1;
for(ff=1;ff<= gg;ff++)
{
SetPoint(bb,da[aa]-ff,0x0000);
SetPoint(bb+1,da[aa]-(ee-ff),0x0000);
}
}
aa++;
}
cc=1;
//清屏以后令CC=0,以便再跳出循环再进行一次采样
putline(); //显示完一屏和擦除完一屏以后,将CC赋0,然后重新画分格线
}
else
{
aa++;
if(aa>30) break; //进行50次数据的比较,如果没有满足条件da[aa]<100&da[aa+1]>100的采样点则重新开始采样
//可以保证波形的稳定性
}
}
} |
|