wx2k 发表于 2009-4-7 11:21:48

求助:采样得到的数据用平滑曲线连接如何实现??

现在能够显示采样点,看起来不够美观,如何实现点之间插值平滑处理

lj2505 发表于 2009-4-7 11:30:30

样条插值

wx2k 发表于 2009-4-7 11:53:35

能不能详细一点,我用的是LPC2148在320240的lcd上显示曲线,lcd控制器是RA8835。

ifree64 发表于 2009-4-7 12:01:06

我现在是直接用直线将采样点连接起来的,当点多时,看起来还可以。

kunnsd 发表于 2009-4-9 09:33:10

3.将采样数据转换成显示数据
LCD显示屏为320×240点阵的图形显示模块,内置RA8803 控制器。模块不仅可以显示单一的文本、图形,而且可以实现双图层的(“或”、“异或”、“同或”、“与”四种逻辑关系)合成显示。在本示波器中显示格线与波形是在不同的层上显示,显示关系为“或”,画方格线的程序见原程序,比较简单就不多说了,着重解释一下如何将采样数据转换成显示数据。
显示屏的地址结构见图3,由图可知对显示数据的操作最小单位为字节,因为Mega32的内存为2K字节,显示波形的区域为240*240,显示一屏波形所需处理的数据为7.2K,故Mega32不可能同时处理一屏波形的全部数据,所以将一屏波形按字节分为30列,每次处理一列,处理完后直接显示,然后处理下一列。将AD转换所得的数据作为给LCD显示器写数据的列地址,因为一列数据位240字节,所以定义一个容量为240字节的数组lcd_buffer,lcd_buffer[]在初始时数据全为00H,因为每次对数据的操作至少是一个字节,而每次处理数据处理的是所显示一个点,所以对每列数据处理8次,定义一个变量m,在一列数据处理之前将其赋值为m=10000000B,处理该列第1个点时让该点垂直地址所对应的数组中的数据(00H)与m相或并将结果存入数组,再将变量m右移一位,即m=01000000B。让第2点垂直地址所对应的数组中的数据与m相或并将结果存入数组,再将变量m右移一位,即m=00100000B ……,这样直到一列数据中的8个点全处理完,重新给m赋值为m=10000000B,然后送显示。为了有较好显示效果,将显示相邻的点用线连接起来,在处理第一个点时预读出第二个点的垂直坐标,与第一个点的垂直坐标进行比较,如果比第一个点的垂直坐标小则从第一个点向第二个点拉线,如果比第一个点的垂直坐标大则从第二个点向第一个点拉线。具体程序如下所示:
for(j=0;j<30;j++)         //将一屏数据分为30列
{
    m=0b10000000;      //
    for(i=j*8;i<(j+1)*8;i++)//处理每列中的8个点
   {
      k=add; // 读出采样数据作为垂直坐标
      lcd_buffer=(lcd_buffer|m); //让该坐标对应数据与m相或并原位保存
      if(add<add)          //判断拉线方向
      {
         for(k=add;k<add;k++)
{
lcd_buffer=(lcd_buffer|m);
}
      }
      else
      {
         for(k=add;k>add;k--)
{
lcd_buffer=(lcd_buffer|m);
}
      }
         m>>=1;       //将m的值右移一位
       }
    for(h=0;h<240;h++)    //送显示
   {
      SdCmd(0x60);SdCmd(j);         //设置显示X坐标
      SdCmd(0x70);SdCmd(h);         //设置显示Y坐标
      SdData(lcd_buffer);      //传送显示数据
      lcd_buffer=0;            //将已送出数据的存储器单元清零
      }
}

zhenli888 发表于 2012-2-18 21:49:21

有收获

simon51 发表于 2012-9-23 15:49:18

mark{:smile:}
页: [1]
查看完整版本: 求助:采样得到的数据用平滑曲线连接如何实现??