单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18439|回复: 10
打印 上一主题 下一主题
收起左侧

LED点阵经验各种点阵驱动方法讲解

  [复制链接]
跳转到指定楼层
楼主
   首先还是讲一下芯片。先讲164芯片,它用作行扫描,行为低电平有效(0有效)。      ,这个芯片叫做移位寄存器,根据芯片手册,把AB相连作为数据输入端,CLK作为时钟端,CLK是上升沿有效,来一个时钟,输出数据往右移动一次。若上电 时芯片输出为 1111 1111 1111 1111,16个高电平,上电时AB为0,时钟信号来了一个上升沿,则AB移入寄存器,这时输出为0111 1111 1111 1111,这时选中了一行,若AB仍然保持为0,再来一个时钟信号时,这时输出为0011 1111 1111 1111,已经移入了两个0了,选中了两行,而点阵是逐行扫描显示的,就是一行一行往下显示,每次只有一行才会显示,切换速度加快你就看起来它们是同时显 示的,上面有两行选中了所以不行。所以第一个时钟信号过后即输出为0111 1111 1111 1111时应该把AB设置为1,下一个时钟信号来时,由于AB为1了,所以输出为1011 1111 1111 1111,也就是说第二个时钟时选中了第二行,以此类推依次选中到16行,当输出为1111 1111 1111 1110时由于再移动一次最低位的0就移出去了,所以这时要把AB改为0了,再来时钟时输出为0111 1111 1111 1111,这就是行扫描。下面将列扫描,列扫描为高电平有效(1有效)。 ,这是595芯片,也是一个移位寄存器,和164的不同是有锁存功能。锁存功能意思就是说你的时钟信号在给,数据也随着时钟信号一个一个输入到寄存器,但 是寄存器的输出仍然没有改变,直到锁存引脚有高脉冲时,已经移位好的数据才会输出到引脚。若行数据选中的是第1行时,列数据输出为1110 1110 1110 1110这16个数据时,那么就是隔一个灯亮3个灯。若没有锁存引脚那么,每来一个时钟信号,输出引脚跟着改变,灯的状态一直在变化,直到16次之后才会 正常,这样的话就乱了。


相信很多朋友都喜欢LED点阵屏吧,可是对于初学者而言,可能点阵的驱动会有点困难。现在就此讲解一下点阵的驱动方法。上几个图看看我做的点阵的效果吧。首先上个单色点阵的吧, ,这个有原理图,那么就给大家看看原理图吧, 这个是595芯片,串入并出,作为列输出,注意这个芯片有锁存输出,也就是说只有锁存脚有脉冲信号时输出才会改变,再看看行输出,就是控制选通每一行的, ,这个芯片和595主要的区别是没有锁存输出,为什么行不要锁存输出呢?因为每次选通一行,每来一个时钟信号改变一行,若行为低电平有效,164上电默认 输出为1,则先移入一个0进去,然后一直移入1,直到16行移完,再循环,这里没来一个时钟输出都会变一下,而如果列输出也这样的话,列数据是经过16次 的变化才得到最终的正确数据,而不是一次得到一个正确数据。然后继续下一个啊,这个是双色点阵 ,这个其实是红色、绿色、红绿结合(橙色),这个我没原理图,但是这些都可以做,现在要自己分析了,不要原理图!对于大部分点阵都是逐行扫描的,行扫描一 般都是A、B、C、D四根线组成的,再经过译码形成16根行选通信号线,再加上列数据输入线、列时钟线、列锁存线基本就没什么线了,再加个OE吧,这个用 来控制亮度的,红、绿各有自己的数据线,但其他线都是公用的,先查查里面用的芯片,再先选通一行,再写入一个字节数据,看显示出来的和你的数据是怎么样 的。下面展示一下彩色点阵,有三原色的,RGB,扫描方式是分上下两屏同时16行扫描,数据断独立,控制端共用,无原理图 像这样的屏幕一般都有ABCD的,前面说了这个是行扫描,16行的,然后LAT(列锁存),CLK(时钟),每种颜色有独立的数据输入。先讲到这里吧,上传几个程序供大家参考,不是通用的啊,根据原理图更改相应程序。有兴趣的朋友可以交流交流啊。




前面发的程序是买点阵时送的,个人感觉不好,下面是我自己写的:
  1. /*--------16*48点阵屏的移动显示------------*/
  2. /*--------16*48点阵屏的移动显示------------*/
  3. /*--------16*48点阵屏的移动显示------------*/
  4. /*--------16*48点阵屏的移动显示------------*/
  5. /*--------16*48点阵屏的移动显示------------*/

  6. #include < reg51.h>
  7. #include < intrins.h>      

  8. typedef unsigned char uchar
  9. typedef unsigned int uint

  10. #define DATE_OUT P1                //指定P1口做为输出

  11. sbit DATA=DATE_OUT^0;                //列数据输出位      
  12. sbit LCLK=DATE_OUT^1;                //列扫描时钟位
  13. sbit LAT=DATE_OUT^2;                //列数据锁存位
  14. sbit AB  =DATE_OUT^3;                //行数据输出位
  15. sbit HCLK =DATE_OUT^4;                //行扫描时钟位

  16. uchar DatCnt = 0;

  17. idata unsigned char TempDat[6][16]={
  18. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0第1个部分的,即第1个8列*/
  19. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1第2个部分的,即第2个8列*/
  20. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0第3个部分的,即第3个8列*/
  21. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1第4个部分的,即第4个8列*/
  22. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0第5个部分的,即第5个8列*/
  23. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1第6个部分的,即第6个8列*/
  24. };//缓存数据
  25.                                        
  26. //非常好用的字摸软件PCtoLCD2002完美版   字模选项:阳码、行列式、顺向
  27. code unsigned char DisplayDat[][16]={
  28. {0xFD,0xFD,0xFD,0xFC,0xC1,0xDD,0xDC,0xD1,0xDD,0xDC,0xC1,0xFD,0xFD,0xFE,0xFF,0xFF},
  29. {0xFF,0xFF,0xFF,0x1F,0xDF,0xDF,0x5F,0xDF,0xDF,0x1F,0xFF,0xFB,0xFB,0x03,0xFF,0xFF},/*"电",6*/
  30. {0xFF,0xFE,0xE1,0xFF,0xFD,0xFE,0xFE,0x80,0xFE,0xFE,0xFE,0xFE,0xF6,0xFA,0xFD,0xFF},
  31. {0xFF,0x0F,0xDF,0xBF,0x7F,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*"子",7*/
  32. {0xFF,0xFF,0xFF,0xE0,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x81,0xFF,0xFF,0xFF},
  33. {0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,0xFF},/*"工",8*/
  34. {0xFF,0xF9,0xC7,0xF7,0xF1,0x87,0xF3,0xE4,0xD7,0xB7,0x76,0xF7,0xF7,0xF4,0xF7,0xFF},
  35. {0xFF,0xCF,0x2F,0x6F,0x4F,0x3F,0xC7,0x3F,0xBF,0x87,0x3F,0xBF,0x83,0x7F,0xFF,0xFF},/*"程",9*/
  36. {0xFF,0xFE,0xE1,0xFD,0xFB,0xF0,0xFD,0xFB,0xF7,0xE0,0xFA,0xF6,0xEE,0xDC,0xFE,0xFF},
  37. {0x9F,0x7F,0xFF,0xBF,0x7F,0xFF,0xBF,0xDF,0x0F,0xEF,0xFF,0x9F,0xE7,0xF7,0xFF,0xFF},/*"系",10*/
  38. {0xFD,0xFD,0xFD,0xFC,0xC1,0xDD,0xDC,0xD1,0xDD,0xDC,0xC1,0xFD,0xFD,0xFE,0xFF,0xFF},
  39. {0xFF,0xFF,0xFF,0x1F,0xDF,0xDF,0x5F,0xDF,0xDF,0x1F,0xFF,0xFB,0xFB,0x03,0xFF,0xFF},/*"电",6*/
  40. {0xFF,0xFE,0xE1,0xFF,0xFD,0xFE,0xFE,0x80,0xFE,0xFE,0xFE,0xFE,0xF6,0xFA,0xFD,0xFF},
  41. {0xFF,0x0F,0xDF,0xBF,0x7F,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*"子",7*/
  42. {0xFF,0xFF,0xFF,0xE0,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x81,0xFF,0xFF,0xFF},
  43. {0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,0xFF},/*"工",8*/
  44. {0xFF,0xF9,0xC7,0xF7,0xF1,0x87,0xF3,0xE4,0xD7,0xB7,0x76,0xF7,0xF7,0xF4,0xF7,0xFF},
  45. {0xFF,0xCF,0x2F,0x6F,0x4F,0x3F,0xC7,0x3F,0xBF,0x87,0x3F,0xBF,0x83,0x7F,0xFF,0xFF},/*"程",9*/
  46. {0xFF,0xFE,0xE1,0xFD,0xFB,0xF0,0xFD,0xFB,0xF7,0xE0,0xFA,0xF6,0xEE,0xDC,0xFE,0xFF},
  47. {0x9F,0x7F,0xFF,0xBF,0x7F,0xFF,0xBF,0xDF,0x0F,0xEF,0xFF,0x9F,0xE7,0xF7,0xFF,0xFF},/*"系",10*/
  48. {0xFD,0xFD,0xFD,0xFC,0xC1,0xDD,0xDC,0xD1,0xDD,0xDC,0xC1,0xFD,0xFD,0xFE,0xFF,0xFF},
  49. {0xFF,0xFF,0xFF,0x1F,0xDF,0xDF,0x5F,0xDF,0xDF,0x1F,0xFF,0xFB,0xFB,0x03,0xFF,0xFF},/*"电",11*/
  50. {0xF7,0xF7,0xF7,0xEF,0xE8,0xCF,0xAC,0x6F,0xEC,0xEF,0xEC,0xED,0xED,0xEC,0xED,0xFF},
  51. {0x7F,0xBF,0xFF,0x83,0x7F,0x8F,0x7F,0x8F,0x7F,0x8F,0x6F,0xEF,0x8F,0x7F,0xFF,0xFF},/*"信",12*/
  52. {0xFF,0xFF,0xFF,0xEF,0xCF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE7,0xFF,0xFF,0xFF},/*"1",13*/
  53. {0xFF,0xFF,0xFF,0xE3,0xDB,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xEB,0xF7,0xFF,0xFF},/*"0",14*/
  54. {0xFF,0xFF,0xFF,0xE3,0xDB,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xEB,0xF7,0xFF,0xFF},/*"0",15*/
  55. {0xFF,0xFF,0xFF,0xEF,0xCF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE7,0xFF,0xFF,0xFF},/*"1",16*/
  56. {0xFE,0xFE,0xF2,0x8E,0xEE,0xEA,0xE2,0xCA,0xEA,0xEE,0xE9,0xE5,0x9B,0xFA,0xF7,0xFF},
  57. {0xFF,0xFF,0xE3,0x1F,0xDF,0xDF,0xC7,0x9F,0xDF,0xDF,0xDF,0xDF,0xC1,0x3F,0xFF,0xFF},/*"班",17*/
  58. {0xFF,0xFF,0xFD,0xFB,0xFB,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFB,0xFB,0xFD,0xFE,0xFF},/*"(",0*/
  59. {0xFF,0xF8,0xF7,0xEF,0xDF,0xBF,0xBF,0xBE,0xBE,0xBF,0xBF,0xDF,0xEF,0xF7,0xF8,0xFF},
  60. {0xFF,0x1F,0xEF,0xF7,0xFB,0xFD,0xFD,0x7D,0x7D,0xFD,0xFD,0xFB,0xF7,0xEF,0x1F,0xFF},/*"⊙",1*/
  61. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0xFF,0xFF,0xFF},/*"_",2*/
  62. {0xFF,0xF8,0xF7,0xEF,0xDF,0xBF,0xBF,0xBE,0xBE,0xBF,0xBF,0xDF,0xEF,0xF7,0xF8,0xFF},
  63. {0xFF,0x1F,0xEF,0xF7,0xFB,0xFD,0xFD,0x7D,0x7D,0xFD,0xFD,0xFB,0xF7,0xEF,0x1F,0xFF},/*"⊙",3*/
  64. {0xFF,0xFF,0xBF,0xDF,0xDF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xDF,0xDF,0xBF,0x7F,0xFF},/*")",4*/
  65. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",5*/
  66. };
  67. /*下面函数扫描模式:点阵屏为16*48,我分成了6个16*8的,为了简便我采用
  68. 16进制写,6个16*8的如下排列
  69. 1                2                3                4                5                6
  70. 0xff        0xfe        0xfb        0xfc        0xfe        0x55        第1行        这些数据都是我随便写的,做个假设
  71. 0xff        0xfe        0xfb        0xfc        0xfe        0x55        第2行
  72. 0xff        0xfe        0xfb        0xfc        0xfe        0x55        第3行
  73. 0xff        0xfe        0xfb        0xfc        0xfe        0x55        第4行
  74. ...                ...                ...                ...                ...                ...                ...
  75. ...                ...                ...                ...                ...                ...                ...
  76. 0xff        0xfe        0xfb        0xfc        0xfe        0x55        第15行
  77. 0xff        0xfe        0xfb        0xfc        0xfe        0x55        第16行
  78. */
  79. void Display(uchar flag)
  80. {
  81.         unsigned char i,j,temp,x;                //定义变量
  82.         DATE_OUT = 0XFF;                                        //置位高电平做准备
  83.         AB=0;                                                        //将列数据位清0,准备移位,行为低电平有效
  84.         for(i=0;i<16;i++)                                //因为有16行,所以要16次循环,依次选中1行
  85.         {                                                                //循环输出16行数据
  86.                 HCLK=0;                                                //为列移位做准备,列移位为上升沿有效
  87.                 LAT=0;                                                //为行锁存做准备,行锁存输出为上升沿有效
  88.                 for(x=6;x>0;x--)                        //分成了6个部分,所以循环6次,
  89.                 {                                                        //若为16*16的点阵,分成两个部分就可以了,循环两次
  90.                         if(flag == 1)
  91.                         {
  92.                                 temp = TempDat[x-1][i];        //读取点阵数据做输出,这里用到ia目的是先读取点阵数据的第二位字节,因一行16个点由两个字节组成,                                                                        //电路中的移位寄存器最后一位对应最后一列,所以要先输出一行中的第二个字节数据
  93.                         }
  94.                         if(flag == 0)                        //用于清屏
  95.                                 temp = 0xff;                //由于我的点阵里面用了8550三极管,相当于非门,所以这里高电平为灭
  96.                         for(j=0;j<8;j++)                //移动列数据,移动6个字节后锁存输出才打开,因为1行的列数据分成了6个字节
  97.                         {                                       
  98.                                 LCLK = 0;                        //为列移位做准备
  99.                              DATA = temp&0x01;          //将数据低位做输出,由电路图可知,移位寄存器的最后一位对应最后一列,因此先移最后一位
  100.                                 temp >>= 1;                  //将数据缓冲右移一位,为下次输出做准备
  101.                              LCLK = 1;                        //将DATA上的数据移入寄存器
  102.                         }                                                //移入单字节结束
  103.                 }
  104.                 HCLK = 1;                                                //HCLK拉高,列数据移位,相应行拉低,三极管导通输出电量到相应行点阵管阳极(共阳)
  105.                 LAT = 1;                                                //LAT拉高,将数据锁存输出到相应行的点阵发光管显示,显示一行后将保持到下一行显示开始
  106.                 AB = 1;                                                    //列数据位只在第一行时为0,其它时候都为1,当将这个0移入寄存器后,从第一位开始一直移位最后一位,                                                                        //移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现,否则显示出乱
  107.         }
  108.         j = 64;
  109.         while(j--);                                                //每一行的显示,保持16个移位时间,因此,最后一行的显示,也要加入保持时间,补尝显示的亮度
  110.         HCLK = 0;                                                        //
  111.         HCLK = 1;                                                        //将最后一行数据移出      
  112. }

  113. void DisplayMoveLeft(uint DatNum,uint MoveSpeed)
  114. {
  115.         uchar NextByte[16];//下半个汉字的数据
  116.         uchar i,j=8,a,b;
  117.       
  118.         for(i=0;i<16;i++)
  119.         {
  120.                 NextByte[i]=DisplayDat[DatCnt][i];
  121.         }
  122.           DatCnt++;
  123.     if((DatNum*2)==DatCnt)DatCnt=0;
  124.           while(j--)//8次移位
  125.           {
  126.                 for(i=0;i<16;i++)//16个字节移位
  127.                 {     
  128.                         for(a=0;a<5;a++)
  129.                         {
  130.                                 TempDat[a][i]<<=1;
  131.                                 if(TempDat[a+1][i]&0x80){TempDat[a][i]+=1;}      
  132.                         }
  133.                         TempDat[5][i]<<=1;
  134.                         if(NextByte[i]&0x80)
  135.                         {        
  136.                                 TempDat[5][i]+=1;
  137.                         }
  138.                         NextByte[i]<<=1;
  139.                 }
  140.                 for(b=0;b<MoveSpeed;b++)
  141.                 {
  142.                         Display(1);
  143.                 }
  144.           }
  145. }
  146. void main(void)  //主入口函数
  147. {      
  148.         Display(0);
  149.         while(1)
  150.         {
  151.                 DisplayMoveLeft(30,12);
  152.         }
  153. }
复制代码

参考程序.rar

13.45 KB, 下载次数: 50, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
 楼主| 51hei官方发布 发表于 2017-3-4 01:57 | 只看该作者
以前用MSP430G2553做的音频点阵,fft的头文件: fft.zip (1.73 KB, 下载次数: 11)

  1. /*********************************************************************
  2.                          快速福利叶变换C函数
  3. 函数简介:此函数是通用的快速傅里叶变换C语言函数,移植性强,以下部分不依
  4.           赖硬件。此函数采用联合体的形式表示一个复数,输入为自然顺序的复
  5.           数(输入实数是可令复数虚部为0),输出为经过FFT变换的自然顺序的
  6.           复数
  7. 使用说明:使用此函数只需更改宏定义FFT_N的值即可实现点数的改变,FFT_N的
  8.           应该为2的N次方,不满足此条件时应在后面补0
  9. 函数调用:FFT(s);
  10. 时    间:2010-2-20
  11. 版    本:Ver1.0
  12. 参考文献:   
  13.       
  14. **********************************************************************/
  15. #include<math.h>
  16. #include <stdio.h>


  17. #define PI 3.1415926535897932384626433832795028841971               //定义圆周率值
  18. #define FFT_N 16                                                   //定义福利叶变换的点数

  19. typedef struct compx
  20. {
  21.         double real,imag;
  22. }compx;                                    //定义一个复数结构
  23. struct compx s[FFT_N];                                              //FFT输入和输出:从S[1]开始存放,根据大小自己定义


  24. /*******************************************************************
  25. 函数原型:struct compx EE(struct compx b1,struct compx b2)  
  26. 函数功能:对两个复数进行乘法运算
  27. 输入参数:两个以联合体定义的复数a,b
  28. 输出参数:a和b的乘积,以联合体的形式输出
  29. *******************************************************************/
  30. compx  EE(struct compx *a,struct compx *b)      
  31. {
  32. compx c;
  33. c.real=a->real*b->real-a->imag*b->imag;
  34. c.imag=a->real*b->imag+a->imag*b->real;
  35. return c;
  36. }

  37. /*****************************************************************
  38. 函数原型:void FFT(struct compx *xin,int N)
  39. 函数功能:对输入的复数组进行快速傅里叶变换(FFT)
  40. 输入参数:*xin复数结构体组的首地址指针,struct型
  41. *****************************************************************/
  42. void FFT(struct compx *xin)
  43. {
  44.   int f,m,nv2,nm1,i,k,l,j=0;
  45.   struct compx u,w,t;
  46.    
  47.    nv2=FFT_N/2;                  //变址运算,即把自然顺序变成倒位序,采用雷德算法
  48.    nm1=FFT_N-1;  
  49.    for(i=0;i<nm1;i++)        
  50.    {
  51.     if(i<j)                    //如果i<j,即进行变址
  52.      {
  53.       t=xin[j];           
  54.       xin[j]=xin[i];
  55.       xin[i]=t;
  56.      }
  57.     k=nv2;                    //求j的下一个倒位序
  58.     while(k<=j)               //如果k<=j,表示j的最高位为1   
  59.      {           
  60.       j=j-k;                 //把最高位变成0
  61.       k=k/2;                 //k/2,比较次高位,依次类推,逐个比较,直到某个位为0
  62.      }
  63.    j=j+k;                   //把0改为1
  64.   }
  65.                         
  66.   {
  67.    int le,lei,ip;                            //FFT运算核,使用蝶形运算完成FFT运算
  68.     f=FFT_N;
  69.    for(l=1;(f=f/2)!=1;l++)                  //计算l的值,即计算蝶形级数
  70.            ;
  71.   for(m=1;m<=l;m++)                         // 控制蝶形结级数
  72.    {                                        //m表示第m级蝶形,l为蝶形级总数l=log(2)N
  73.     le=2<<(m-1);                            //le蝶形结距离,即第m级蝶形的蝶形结相距le点
  74.     lei=le/2;                               //同一蝶形结中参加运算的两点的距离
  75.     u.real=1.0;                             //u为蝶形结运算系数,初始值为1
  76.     u.imag=0.0;
  77.     w.real=cos(PI/lei);                     //w为系数商,即当前系数与前一个系数的商
  78.     w.imag=-sin(PI/lei);
  79.     for(j=0;j<=lei-1;j++)                   //控制计算不同种蝶形结,即计算系数不同的蝶形结
  80.      {
  81.       for(i=j;i<=FFT_N-1;i=i+le)            //控制同一蝶形结运算,即计算系数相同蝶形结
  82.        {
  83.         ip=i+lei;                           //i,ip分别表示参加蝶形运算的两个节点
  84.         t=EE(&xin[ip],&u);                    //蝶形运算,详见公式
  85.         xin[ip].real=xin[i].real-t.real;
  86.         xin[ip].imag=xin[i].imag-t.imag;
  87.         xin[i].real=xin[i].real+t.real;
  88.         xin[i].imag=xin[i].imag+t.imag;
  89.        }
  90.       u=EE(&u,&w);                           //改变系数,进行下一个蝶形运算
  91.      }
  92.    }
  93.   }
  94.   
  95. }
复制代码



回复

使用道具 举报

板凳
wanggengniu 发表于 2017-3-7 21:28 | 只看该作者
试试看看,效果如何
回复

使用道具 举报

地板
木佑111 发表于 2018-6-4 22:22 | 只看该作者
解释的不错,谢谢楼主
回复

使用道具 举报

5#
wwzgch 发表于 2018-7-14 21:21 | 只看该作者
不错,向楼主学习
回复

使用道具 举报

6#
scybyq 发表于 2018-8-23 11:22 | 只看该作者
东东不错满意
回复

使用道具 举报

7#
960035433 发表于 2018-8-26 01:47 来自手机 | 只看该作者
颜色是怎么调的,没想通,楼主能科普一下吗
回复

使用道具 举报

8#
sanfu123 发表于 2018-9-10 19:26 | 只看该作者
颜色是怎么调的,没想通,楼主能科普一下吗
回复

使用道具 举报

9#
留住这一刻2014 发表于 2018-9-18 01:39 来自手机 | 只看该作者
楼主74HC164和74HC595这两者有什么区别?
回复

使用道具 举报

10#
monthyasha 发表于 2018-12-9 13:20 | 只看该作者
颜色是怎么调的,没想通,楼主能科普一下吗
回复

使用道具 举报

11#
moonchen 发表于 2019-4-22 11:01 | 只看该作者
不错,向楼主学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

快速回复 返回顶部 返回列表