打印

如何解决动态波形显示程序出现断续的问题?

[复制链接]
1302|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zh9091y|  楼主 | 2012-9-8 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主程序中while部分while{for(circle_cnt=0;circle_cnt<128;circle_cnt++)//circle_cnt<2也是效果也是一样的不知道怎么回事。{     A[circle_cnt] =(int16_t)((*(data_DMA+(3*circle_cnt)) & ADC1_value_mask) )*3.3*25/4096;//将AD转换的数据存到A[]中,在显示的时候用此来表示纵坐标。      }circle_cnt=1;/*判断当两个纵坐标之差的绝对值是否大于1,如果大于1则在此中间插入相差的点*/if(A[circle_cnt]-A[circle_cnt-1]>1){  unsigned short k; for(k=1;A[circle_cnt-1]+k<A[circle_cnt];k++) { Line(x+10,150-A[circle_cnt-1],x+10,150-A[circle_cnt-1]+k); A[circle_cnt-1]=A[circle_cnt-1]+1; }} else if(A[circle_cnt]-A[circle_cnt-1]<-1){  unsigned short k; for(k=1;A[circle_cnt]+k<A[circle_cnt-1];k++) { Line(x+10,150-A[circle_cnt-1],x+10,150-A[circle_cnt-1]-k); A[circle_cnt-1]=A[circle_cnt-1]-1; }}else //从左往右依次两个点两个点的画线{SetPaintMode(2,COLOR_Blue);Line(x+10,150-A[circle_cnt-1],x+10+1,150-A[circle_cnt]);SetPaintMode(2,COLOR_White);Line(x+10,150-B[circle_cnt-1],x+10+1,150-B[circle_cnt]);x++;circle_cnt++;     if(circle_cnt==126) //发现这个用不用无所谓,而且circle_cnt的值总是1不变的,请指教?        {     Line(x+10,150-A[circle_cnt+1],x+10+1,150-A[0]);circle_cnt=0;    }if(x+10>610) //超屏时从原先的坐标显示,并清除显示区域的波形{x=0;WaveFormInitial(10,10,610,230,1);    WaveFormSetGrid(20,20,COLOR_Red,COLOR_Yellow,COLOR_Black);    WaveFormReDraw();}}}发现在前面用的判断两个纵坐标之差的绝对值是否大于1,根本没有作用。而且circle_cnt的值似乎总是1,请高手帮忙修改,或者有没有相应的参考程序。。

相关帖子

沙发
zh9091y|  楼主 | 2012-9-8 10:22 | 只看该作者
主程序中
while部分
while{
for(circle_cnt=0;circle_cnt<128;circle_cnt++)//circle_cnt<2也是效果也是一样的不知道怎么回事。
{
     A[circle_cnt] =(int16_t)((*(data_DMA+(3*circle_cnt)) & ADC1_value_mask) )*3.3*25/4096;//将AD转换的数据存到A[]中,在显示的时候用此来表示纵坐标。
     
}
circle_cnt=1;
/*判断当两个纵坐标之差的绝对值是否大于1,如果大于1则在此中间插入相差的点*/
if(A[circle_cnt]-A[circle_cnt-1]>1)
{
unsigned short k;
for(k=1;A[circle_cnt-1]+k<A[circle_cnt];k++)
{
Line(x+10,150-A[circle_cnt-1],x+10,150-A[circle_cnt-1]+k);
A[circle_cnt-1]=A[circle_cnt-1]+1;
}
}
else if(A[circle_cnt]-A[circle_cnt-1]<-1)
{
unsigned short k;
for(k=1;A[circle_cnt]+k<A[circle_cnt-1];k++)
{
Line(x+10,150-A[circle_cnt-1],x+10,150-A[circle_cnt-1]-k);
A[circle_cnt-1]=A[circle_cnt-1]-1;
}
}
else //从左往右依次两个点两个点的画线
{
SetPaintMode(2,COLOR_Blue);
Line(x+10,150-A[circle_cnt-1],x+10+1,150-A[circle_cnt]);
SetPaintMode(2,COLOR_White);
Line(x+10,150-B[circle_cnt-1],x+10+1,150-B[circle_cnt]);
x++;
circle_cnt++;
     if(circle_cnt==126) //发现这个用不用无所谓,而且circle_cnt的值总是1不变的,请指教?
        {
     Line(x+10,150-A[circle_cnt+1],x+10+1,150-A[0]);
circle_cnt=0;
    }
if(x+10>610) //超屏时从原先的坐标显示,并清除显示区域的波形
{
x=0;
WaveFormInitial(10,10,610,230,1);
    WaveFormSetGrid(20,20,COLOR_Red,COLOR_Yellow,COLOR_Black);
    WaveFormReDraw();
}
}
}
发现在前面用的判断两个纵坐标之差的绝对值是否大于1,根本没有作用。而且circle_cnt的值似乎总是1,请高手帮忙修改,或者有没有相应的参考程序。。

使用特权

评论回复
板凳
zh9091y|  楼主 | 2012-9-8 10:23 | 只看该作者
说错了 circle_cnt的值似乎总是0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

19

帖子

1

粉丝