基于STM32的示波器数据丢失的问题

2019-07-15 20:16发布

求大神指导..
我现在是用STM32内置AD采集数据,然后发送TFT显示屏显示波形...
采用的是把一整个屏幕要显示的adc值放进一个数组,然后将送到显示屏显示,然后再用这个数组清除显示...
现在的问题是 显示--清屏--显示 的过程中,在处理上面的时候,是有一部分数据是丢失的,要怎样才能做到真正的实时显示,数据不丢失
void Dispvave(u16 *Padval, u16 vavecolor, u16 linecolor, u16 backcolor,u8 n_Szu)
{
         u16 i;
         u32 point1,point2;
//                 for(i=0; i<=320; i+=40)                //ƽÐÐYÖáµÄÏß
//                 {
//                         POINT_COLOR=linecolor;
//                         LCD_DrawLine(i,0,i,240);
//                 }
//                
//                 for(i=0;i<=240;i+=40)
//                 {
//                         POINT_COLOR=linecolor;
//       LCD_DrawLine(0,i,320,i);                       
//                 }
               
                POINT_COLOR=vavecolor;
//                    for(i=0; i<320*n_Szu; i++)
                for(i=0; i<320; i++)
                  {
                                point1=Padval[i]/High;                  //HighΪÏÔʾµÄ·ù¶È,ֻΪ1»òÕß2,Ϊ1ʱ·ù¶ÈÔö´ó,Ϊ2ʱ¿É¼õÒ»°ë.ȱʡֵΪ1
                                point2=Padval[i+1]/High;
                               
                                if(point2<=240&&point1<240)         //X×ø±êСÓÚ170ʱ²Å»­Ïß,
                                {
                                //LCD_DrawLine(point1+10,  i/n_Szu, point2+10, (i+1)/n_Szu);
//                                 LCD_DrawLine(i/n_Szu,  240-point1, (i+1)/n_Szu, 240-point2);
                                        LCD_DrawLine(i,point1, i+1,point2);
                                }
                        }
                       
                        delay_ms(20);
                        //Çå³ýµã
                        POINT_COLOR=backcolor;
//                    for(i=0; i<320*n_Szu; i++)
                for(i=0; i<320; i++)
                  {
                                point1=Padval[i]/High;                  //HighΪÏÔʾµÄ·ù¶È,ֻΪ1»òÕß2,Ϊ1ʱ·ù¶ÈÔö´ó,Ϊ2ʱ¿É¼õÒ»°ë.ȱʡֵΪ1
                                point2=Padval[i+1]/High;
                               
                                if(point2<=240&&point1<240)         //X×ø±êСÓÚ170ʱ²Å»­Ïß,
                                {
                                //LCD_DrawLine(point1+10,  i/n_Szu, point2+10, (i+1)/n_Szu);
//                                 LCD_DrawLine(i/n_Szu,  240-point1, (i+1)/n_Szu, 240-point2);
                                        LCD_DrawLine(i,point1, i+1,point2);
                                }
                        }
                       
                        for(i=0; i<=320; i+=40)                //ƽÐÐYÖáµÄÏß
                {
                        POINT_COLOR=linecolor;
                        LCD_DrawLine(i,0,i,240);
                }
               
                for(i=0;i<=240;i+=40)
                {
                        POINT_COLOR=linecolor;
      LCD_DrawLine(0,i,320,i);                       
                }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。