久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 43239|回復: 16
打印 上一主題 下一主題
收起左側

LED點陣經(jīng)驗各種點陣驅動方法講解

  [復制鏈接]
跳轉到指定樓層
樓主
ID:140725 發(fā)表于 2017-3-4 01:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
   首先還是講一下芯片。先講164芯片,它用作行掃描,行為低電平有效(0有效)。      ,這個芯片叫做移位寄存器,根據(jù)芯片手冊,把AB相連作為數(shù)據(jù)輸入端,CLK作為時鐘端,CLK是上升沿有效,來一個時鐘,輸出數(shù)據(jù)往右移動一次。若上電 時芯片輸出為 1111 1111 1111 1111,16個高電平,上電時AB為0,時鐘信號來了一個上升沿,則AB移入寄存器,這時輸出為0111 1111 1111 1111,這時選中了一行,若AB仍然保持為0,再來一個時鐘信號時,這時輸出為0011 1111 1111 1111,已經(jīng)移入了兩個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的不同是有鎖存功能。鎖存功能意思就是說你的時鐘信號在給,數(shù)據(jù)也隨著時鐘信號一個一個輸入到寄存器,但 是寄存器的輸出仍然沒有改變,直到鎖存引腳有高脈沖時,已經(jīng)移位好的數(shù)據(jù)才會輸出到引腳。若行數(shù)據(jù)選中的是第1行時,列數(shù)據(jù)輸出為1110 1110 1110 1110這16個數(shù)據(jù)時,那么就是隔一個燈亮3個燈。若沒有鎖存引腳那么,每來一個時鐘信號,輸出引腳跟著改變,燈的狀態(tài)一直在變化,直到16次之后才會 正常,這樣的話就亂了。


相信很多朋友都喜歡LED點陣屏吧,可是對于初學者而言,可能點陣的驅動會有點困難,F(xiàn)在就此講解一下點陣的驅動方法。上幾個圖看看我做的點陣的效果吧。首先上個單色點陣的吧, ,這個有原理圖,那么就給大家看看原理圖吧, 這個是595芯片,串入并出,作為列輸出,注意這個芯片有鎖存輸出,也就是說只有鎖存腳有脈沖信號時輸出才會改變,再看看行輸出,就是控制選通每一行的, ,這個芯片和595主要的區(qū)別是沒有鎖存輸出,為什么行不要鎖存輸出呢?因為每次選通一行,每來一個時鐘信號改變一行,若行為低電平有效,164上電默認 輸出為1,則先移入一個0進去,然后一直移入1,直到16行移完,再循環(huán),這里沒來一個時鐘輸出都會變一下,而如果列輸出也這樣的話,列數(shù)據(jù)是經(jīng)過16次 的變化才得到最終的正確數(shù)據(jù),而不是一次得到一個正確數(shù)據(jù)。然后繼續(xù)下一個啊,這個是雙色點陣 ,這個其實是紅色、綠色、紅綠結合(橙色),這個我沒原理圖,但是這些都可以做,現(xiàn)在要自己分析了,不要原理圖!對于大部分點陣都是逐行掃描的,行掃描一 般都是A、B、C、D四根線組成的,再經(jīng)過譯碼形成16根行選通信號線,再加上列數(shù)據(jù)輸入線、列時鐘線、列鎖存線基本就沒什么線了,再加個OE吧,這個用 來控制亮度的,紅、綠各有自己的數(shù)據(jù)線,但其他線都是公用的,先查查里面用的芯片,再先選通一行,再寫入一個字節(jié)數(shù)據(jù),看顯示出來的和你的數(shù)據(jù)是怎么樣 的。下面展示一下彩色點陣,有三原色的,RGB,掃描方式是分上下兩屏同時16行掃描,數(shù)據(jù)斷獨立,控制端共用,無原理圖 像這樣的屏幕一般都有ABCD的,前面說了這個是行掃描,16行的,然后LAT(列鎖存),CLK(時鐘),每種顏色有獨立的數(shù)據(jù)輸入。先講到這里吧,上傳幾個程序供大家參考,不是通用的啊,根據(jù)原理圖更改相應程序。有興趣的朋友可以交流交流啊。




前面發(fā)的程序是買點陣時送的,個人感覺不好,下面是我自己寫的:
  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;                //列數(shù)據(jù)輸出位      
  12. sbit LCLK=DATE_OUT^1;                //列掃描時鐘位
  13. sbit LAT=DATE_OUT^2;                //列數(shù)據(jù)鎖存位
  14. sbit AB  =DATE_OUT^3;                //行數(shù)據(jù)輸出位
  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. };//緩存數(shù)據(jù)
  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. /*下面函數(shù)掃描模式:點陣屏為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行        這些數(shù)據(jù)都是我隨便寫的,做個假設
  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;                                                        //將列數(shù)據(jù)位清0,準備移位,行為低電平有效
  84.         for(i=0;i<16;i++)                                //因為有16行,所以要16次循環(huán),依次選中1行
  85.         {                                                                //循環(huán)輸出16行數(shù)據(jù)
  86.                 HCLK=0;                                                //為列移位做準備,列移位為上升沿有效
  87.                 LAT=0;                                                //為行鎖存做準備,行鎖存輸出為上升沿有效
  88.                 for(x=6;x>0;x--)                        //分成了6個部分,所以循環(huán)6次,
  89.                 {                                                        //若為16*16的點陣,分成兩個部分就可以了,循環(huán)兩次
  90.                         if(flag == 1)
  91.                         {
  92.                                 temp = TempDat[x-1][i];        //讀取點陣數(shù)據(jù)做輸出,這里用到ia目的是先讀取點陣數(shù)據(jù)的第二位字節(jié),因一行16個點由兩個字節(jié)組成,                                                                        //電路中的移位寄存器最后一位對應最后一列,所以要先輸出一行中的第二個字節(jié)數(shù)據(jù)
  93.                         }
  94.                         if(flag == 0)                        //用于清屏
  95.                                 temp = 0xff;                //由于我的點陣里面用了8550三極管,相當于非門,所以這里高電平為滅
  96.                         for(j=0;j<8;j++)                //移動列數(shù)據(jù),移動6個字節(jié)后鎖存輸出才打開,因為1行的列數(shù)據(jù)分成了6個字節(jié)
  97.                         {                                       
  98.                                 LCLK = 0;                        //為列移位做準備
  99.                              DATA = temp&0x01;          //將數(shù)據(jù)低位做輸出,由電路圖可知,移位寄存器的最后一位對應最后一列,因此先移最后一位
  100.                                 temp >>= 1;                  //將數(shù)據(jù)緩沖右移一位,為下次輸出做準備
  101.                              LCLK = 1;                        //將DATA上的數(shù)據(jù)移入寄存器
  102.                         }                                                //移入單字節(jié)結束
  103.                 }
  104.                 HCLK = 1;                                                //HCLK拉高,列數(shù)據(jù)移位,相應行拉低,三極管導通輸出電量到相應行點陣管陽極(共陽)
  105.                 LAT = 1;                                                //LAT拉高,將數(shù)據(jù)鎖存輸出到相應行的點陣發(fā)光管顯示,顯示一行后將保持到下一行顯示開始
  106.                 AB = 1;                                                    //列數(shù)據(jù)位只在第一行時為0,其它時候都為1,當將這個0移入寄存器后,從第一位開始一直移位最后一位,                                                                        //移位的過程,AB就必需是1,這是因為不能同時有兩個及兩個以上0的出現(xiàn),否則顯示出亂
  107.         }
  108.         j = 64;
  109.         while(j--);                                                //每一行的顯示,保持16個移位時間,因此,最后一行的顯示,也要加入保持時間,補嘗顯示的亮度
  110.         HCLK = 0;                                                        //
  111.         HCLK = 1;                                                        //將最后一行數(shù)據(jù)移出      
  112. }

  113. void DisplayMoveLeft(uint DatNum,uint MoveSpeed)
  114. {
  115.         uchar NextByte[16];//下半個漢字的數(shù)據(jù)
  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個字節(jié)移位
  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)  //主入口函數(shù)
  147. {      
  148.         Display(0);
  149.         while(1)
  150.         {
  151.                 DisplayMoveLeft(30,12);
  152.         }
  153. }
復制代碼

參考程序.rar

13.45 KB, 下載次數(shù): 120, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏19 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發(fā)
ID:140725 發(fā)表于 2017-3-4 01:57 | 只看該作者
以前用MSP430G2553做的音頻點陣,fft的頭文件: fft.zip (1.73 KB, 下載次數(shù): 40)

  1. /*********************************************************************
  2.                          快速福利葉變換C函數(shù)
  3. 函數(shù)簡介:此函數(shù)是通用的快速傅里葉變換C語言函數(shù),移植性強,以下部分不依
  4.           賴硬件。此函數(shù)采用聯(lián)合體的形式表示一個復數(shù),輸入為自然順序的復
  5.           數(shù)(輸入實數(shù)是可令復數(shù)虛部為0),輸出為經(jīng)過FFT變換的自然順序的
  6.           復數(shù)
  7. 使用說明:使用此函數(shù)只需更改宏定義FFT_N的值即可實現(xiàn)點數(shù)的改變,F(xiàn)FT_N的
  8.           應該為2的N次方,不滿足此條件時應在后面補0
  9. 函數(shù)調用: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                                                   //定義福利葉變換的點數(shù)

  19. typedef struct compx
  20. {
  21.         double real,imag;
  22. }compx;                                    //定義一個復數(shù)結構
  23. struct compx s[FFT_N];                                              //FFT輸入和輸出:從S[1]開始存放,根據(jù)大小自己定義


  24. /*******************************************************************
  25. 函數(shù)原型:struct compx EE(struct compx b1,struct compx b2)  
  26. 函數(shù)功能:對兩個復數(shù)進行乘法運算
  27. 輸入?yún)?shù):兩個以聯(lián)合體定義的復數(shù)a,b
  28. 輸出參數(shù):a和b的乘積,以聯(lián)合體的形式輸出
  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. 函數(shù)原型:void FFT(struct compx *xin,int N)
  39. 函數(shù)功能:對輸入的復數(shù)組進行快速傅里葉變換(FFT)
  40. 輸入?yún)?shù):*xin復數(shù)結構體組的首地址指針,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的值,即計算蝶形級數(shù)
  70.            ;
  71.   for(m=1;m<=l;m++)                         // 控制蝶形結級數(shù)
  72.    {                                        //m表示第m級蝶形,l為蝶形級總數(shù)l=log(2)N
  73.     le=2<<(m-1);                            //le蝶形結距離,即第m級蝶形的蝶形結相距l(xiāng)e點
  74.     lei=le/2;                               //同一蝶形結中參加運算的兩點的距離
  75.     u.real=1.0;                             //u為蝶形結運算系數(shù),初始值為1
  76.     u.imag=0.0;
  77.     w.real=cos(PI/lei);                     //w為系數(shù)商,即當前系數(shù)與前一個系數(shù)的商
  78.     w.imag=-sin(PI/lei);
  79.     for(j=0;j<=lei-1;j++)                   //控制計算不同種蝶形結,即計算系數(shù)不同的蝶形結
  80.      {
  81.       for(i=j;i<=FFT_N-1;i=i+le)            //控制同一蝶形結運算,即計算系數(shù)相同蝶形結
  82.        {
  83.         ip=i+lei;                           //i,ip分別表示參加蝶形運算的兩個節(jié)點
  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);                           //改變系數(shù),進行下一個蝶形運算
  91.      }
  92.    }
  93.   }
  94.   
  95. }
復制代碼



回復

使用道具 舉報

板凳
ID:168401 發(fā)表于 2017-3-7 21:28 | 只看該作者
試試看看,效果如何
回復

使用道具 舉報

地板
ID:309376 發(fā)表于 2018-6-4 22:22 | 只看該作者
解釋的不錯,謝謝樓主
回復

使用道具 舉報

5#
ID:33522 發(fā)表于 2018-7-14 21:21 | 只看該作者
不錯,向樓主學習
回復

使用道具 舉報

6#
ID:389200 發(fā)表于 2018-8-23 11:22 | 只看該作者
東東不錯滿意
回復

使用道具 舉報

7#
ID:359702 發(fā)表于 2018-8-26 01:47 來自手機 | 只看該作者
顏色是怎么調的,沒想通,樓主能科普一下嗎
回復

使用道具 舉報

8#
ID:395607 發(fā)表于 2018-9-10 19:26 | 只看該作者
顏色是怎么調的,沒想通,樓主能科普一下嗎
回復

使用道具 舉報

9#
ID:398477 發(fā)表于 2018-9-18 01:39 來自手機 | 只看該作者
樓主74HC164和74HC595這兩者有什么區(qū)別?
回復

使用道具 舉報

10#
ID:430234 發(fā)表于 2018-12-9 13:20 | 只看該作者
顏色是怎么調的,沒想通,樓主能科普一下嗎
回復

使用道具 舉報

11#
ID:74933 發(fā)表于 2019-4-22 11:01 | 只看該作者
不錯,向樓主學習
回復

使用道具 舉報

12#
ID:362939 發(fā)表于 2023-8-7 11:49 | 只看該作者
顏色是怎么調的,沒想通,樓主能科普一下嗎?
回復

使用道具 舉報

13#
ID:1085441 發(fā)表于 2023-8-7 16:57 | 只看該作者
留住這一刻2014 發(fā)表于 2018-9-18 01:39
樓主74HC164和74HC595這兩者有什么區(qū)別?

74164和74595在這是都是串行以為用,建議用74595,因為74595帶輸出使能,可以在串行一味的時候關閉輸出,避免數(shù)據(jù)移位時顯示內容出現(xiàn)短暫的閃爍。75264就不能避免閃爍。
回復

使用道具 舉報

14#
ID:1085441 發(fā)表于 2023-8-7 17:03 | 只看該作者
不好意思,打錯了幾個字
74164和74595在這是都是串行移位用,建議用74595,因為74595帶輸出使能,可以在串行移位的時候關閉輸出,避免數(shù)據(jù)移位時顯示內容出現(xiàn)短暫的閃爍。74164就不能避免閃爍。
另,現(xiàn)在都是用5020替代74595,2者功能一樣,但是5020是恒流輸出,不需要外接限流電阻
回復

使用道具 舉報

15#
ID:69038 發(fā)表于 2023-9-2 09:28 | 只看該作者
cnfloatleaf 發(fā)表于 2023-8-7 17:03
不好意思,打錯了幾個字
74164和74595在這是都是串行移位用,建議用74595,因為74595帶輸出使能,可以在串 ...

不一樣的哦!5020是開漏輸出,595是推挽輸出,電路上的差異沒有可比性
回復

使用道具 舉報

16#
ID:1085441 發(fā)表于 2023-9-3 17:13 | 只看該作者
5020確定是恒流源輸出,所以不需要串聯(lián)電阻來限流,簡化了電路,方便使用。而一片595需要8個電阻,既增加了成本,也增加了電路節(jié)點,降低可靠性。

5020.png (189.13 KB, 下載次數(shù): 98)

5020.png
回復

使用道具 舉報

17#
ID:281040 發(fā)表于 2023-10-2 10:37 | 只看該作者
32X64的單色LED屏幕 用2個74HC245 一個74HC123D 和 2個74hc138  16個595  8個4953這種室內單元板的原理圖有沒有
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品成人 | 天天操网| 亚洲天堂久久新 | 日本午夜免费福利视频 | 视频1区 | 久久av在线播放 | av福利网 | 中文字幕精品一区久久久久 | 日韩免费av| 深爱激情综合 | 免费黄色大片 | 在线观看亚洲专区 | 亚洲欧美综合精品久久成人 | 3级毛片 | 欧美 日本 国产 | 国产一级片精品 | 亚洲精品乱码 | 成年网站在线观看 | re久久| 久久噜噜噜精品国产亚洲综合 | 久久艹免费视频 | 日韩精品一区二区三区中文在线 | 国精产品一区一区三区免费完 | 视频在线日韩 | 日韩在线h| 美女黄网站视频免费 | 99久久久国产精品 | 91精品久久久久久久久久入口 | 日日操操 | 一级毛片视频 | 91中文字幕在线 | 久久久久综合 | 中文字幕av在线 | 欧美日韩在线精品 | 亚洲精品视频免费 | 欧美日韩精品一区 | 91精品国产综合久久福利软件 | 欧美美女爱爱视频 | 久草综合在线视频 | 亚洲成人av | 国产精品观看 |