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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 43039|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

LED點(diǎn)陣經(jīng)驗(yàn)各種點(diǎn)陣驅(qū)動(dòng)方法講解

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
   首先還是講一下芯片。先講164芯片,它用作行掃描,行為低電平有效(0有效)。      ,這個(gè)芯片叫做移位寄存器,根據(jù)芯片手冊,把AB相連作為數(shù)據(jù)輸入端,CLK作為時(shí)鐘端,CLK是上升沿有效,來一個(gè)時(shí)鐘,輸出數(shù)據(jù)往右移動(dòng)一次。若上電 時(shí)芯片輸出為 1111 1111 1111 1111,16個(gè)高電平,上電時(shí)AB為0,時(shí)鐘信號來了一個(gè)上升沿,則AB移入寄存器,這時(shí)輸出為0111 1111 1111 1111,這時(shí)選中了一行,若AB仍然保持為0,再來一個(gè)時(shí)鐘信號時(shí),這時(shí)輸出為0011 1111 1111 1111,已經(jīng)移入了兩個(gè)0了,選中了兩行,而點(diǎn)陣是逐行掃描顯示的,就是一行一行往下顯示,每次只有一行才會(huì)顯示,切換速度加快你就看起來它們是同時(shí)顯 示的,上面有兩行選中了所以不行。所以第一個(gè)時(shí)鐘信號過后即輸出為0111 1111 1111 1111時(shí)應(yīng)該把AB設(shè)置為1,下一個(gè)時(shí)鐘信號來時(shí),由于AB為1了,所以輸出為1011 1111 1111 1111,也就是說第二個(gè)時(shí)鐘時(shí)選中了第二行,以此類推依次選中到16行,當(dāng)輸出為1111 1111 1111 1110時(shí)由于再移動(dòng)一次最低位的0就移出去了,所以這時(shí)要把AB改為0了,再來時(shí)鐘時(shí)輸出為0111 1111 1111 1111,這就是行掃描。下面將列掃描,列掃描為高電平有效(1有效)。 ,這是595芯片,也是一個(gè)移位寄存器,和164的不同是有鎖存功能。鎖存功能意思就是說你的時(shí)鐘信號在給,數(shù)據(jù)也隨著時(shí)鐘信號一個(gè)一個(gè)輸入到寄存器,但 是寄存器的輸出仍然沒有改變,直到鎖存引腳有高脈沖時(shí),已經(jīng)移位好的數(shù)據(jù)才會(huì)輸出到引腳。若行數(shù)據(jù)選中的是第1行時(shí),列數(shù)據(jù)輸出為1110 1110 1110 1110這16個(gè)數(shù)據(jù)時(shí),那么就是隔一個(gè)燈亮3個(gè)燈。若沒有鎖存引腳那么,每來一個(gè)時(shí)鐘信號,輸出引腳跟著改變,燈的狀態(tài)一直在變化,直到16次之后才會(huì) 正常,這樣的話就亂了。


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




前面發(fā)的程序是買點(diǎn)陣時(shí)送的,個(gè)人感覺不好,下面是我自己寫的:
  1. /*--------16*48點(diǎn)陣屏的移動(dòng)顯示------------*/
  2. /*--------16*48點(diǎn)陣屏的移動(dòng)顯示------------*/
  3. /*--------16*48點(diǎn)陣屏的移動(dòng)顯示------------*/
  4. /*--------16*48點(diǎn)陣屏的移動(dòng)顯示------------*/
  5. /*--------16*48點(diǎn)陣屏的移動(dòng)顯示------------*/

  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;                //列掃描時(shí)鐘位
  13. sbit LAT=DATE_OUT^2;                //列數(shù)據(jù)鎖存位
  14. sbit AB  =DATE_OUT^3;                //行數(shù)據(jù)輸出位
  15. sbit HCLK =DATE_OUT^4;                //行掃描時(shí)鐘位

  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個(gè)部分的,即第1個(gè)8列*/
  19. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1第2個(gè)部分的,即第2個(gè)8列*/
  20. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0第3個(gè)部分的,即第3個(gè)8列*/
  21. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1第4個(gè)部分的,即第4個(gè)8列*/
  22. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0第5個(gè)部分的,即第5個(gè)8列*/
  23. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1第6個(gè)部分的,即第6個(gè)8列*/
  24. };//緩存數(shù)據(jù)
  25.                                        
  26. //非常好用的字摸軟件PCtoLCD2002完美版   字模選項(xiàng):陽碼、行列式、順向
  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ù)掃描模式:點(diǎn)陣屏為16*48,我分成了6個(gè)16*8的,為了簡便我采用
  68. 16進(jìn)制寫,6個(gè)16*8的如下排列
  69. 1                2                3                4                5                6
  70. 0xff        0xfe        0xfb        0xfc        0xfe        0x55        第1行        這些數(shù)據(jù)都是我隨便寫的,做個(gè)假設(shè)
  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;                                        //置位高電平做準(zhǔn)備
  83.         AB=0;                                                        //將列數(shù)據(jù)位清0,準(zhǔn)備移位,行為低電平有效
  84.         for(i=0;i<16;i++)                                //因?yàn)橛?6行,所以要16次循環(huán),依次選中1行
  85.         {                                                                //循環(huán)輸出16行數(shù)據(jù)
  86.                 HCLK=0;                                                //為列移位做準(zhǔn)備,列移位為上升沿有效
  87.                 LAT=0;                                                //為行鎖存做準(zhǔn)備,行鎖存輸出為上升沿有效
  88.                 for(x=6;x>0;x--)                        //分成了6個(gè)部分,所以循環(huán)6次,
  89.                 {                                                        //若為16*16的點(diǎn)陣,分成兩個(gè)部分就可以了,循環(huán)兩次
  90.                         if(flag == 1)
  91.                         {
  92.                                 temp = TempDat[x-1][i];        //讀取點(diǎn)陣數(shù)據(jù)做輸出,這里用到ia目的是先讀取點(diǎn)陣數(shù)據(jù)的第二位字節(jié),因一行16個(gè)點(diǎn)由兩個(gè)字節(jié)組成,                                                                        //電路中的移位寄存器最后一位對應(yīng)最后一列,所以要先輸出一行中的第二個(gè)字節(jié)數(shù)據(jù)
  93.                         }
  94.                         if(flag == 0)                        //用于清屏
  95.                                 temp = 0xff;                //由于我的點(diǎn)陣?yán)锩嬗昧?550三極管,相當(dāng)于非門,所以這里高電平為滅
  96.                         for(j=0;j<8;j++)                //移動(dòng)列數(shù)據(jù),移動(dòng)6個(gè)字節(jié)后鎖存輸出才打開,因?yàn)?行的列數(shù)據(jù)分成了6個(gè)字節(jié)
  97.                         {                                       
  98.                                 LCLK = 0;                        //為列移位做準(zhǔn)備
  99.                              DATA = temp&0x01;          //將數(shù)據(jù)低位做輸出,由電路圖可知,移位寄存器的最后一位對應(yīng)最后一列,因此先移最后一位
  100.                                 temp >>= 1;                  //將數(shù)據(jù)緩沖右移一位,為下次輸出做準(zhǔn)備
  101.                              LCLK = 1;                        //將DATA上的數(shù)據(jù)移入寄存器
  102.                         }                                                //移入單字節(jié)結(jié)束
  103.                 }
  104.                 HCLK = 1;                                                //HCLK拉高,列數(shù)據(jù)移位,相應(yīng)行拉低,三極管導(dǎo)通輸出電量到相應(yīng)行點(diǎn)陣管陽極(共陽)
  105.                 LAT = 1;                                                //LAT拉高,將數(shù)據(jù)鎖存輸出到相應(yīng)行的點(diǎn)陣發(fā)光管顯示,顯示一行后將保持到下一行顯示開始
  106.                 AB = 1;                                                    //列數(shù)據(jù)位只在第一行時(shí)為0,其它時(shí)候都為1,當(dāng)將這個(gè)0移入寄存器后,從第一位開始一直移位最后一位,                                                                        //移位的過程,AB就必需是1,這是因?yàn)椴荒芡瑫r(shí)有兩個(gè)及兩個(gè)以上0的出現(xiàn),否則顯示出亂
  107.         }
  108.         j = 64;
  109.         while(j--);                                                //每一行的顯示,保持16個(gè)移位時(shí)間,因此,最后一行的顯示,也要加入保持時(shí)間,補(bǔ)嘗顯示的亮度
  110.         HCLK = 0;                                                        //
  111.         HCLK = 1;                                                        //將最后一行數(shù)據(jù)移出      
  112. }

  113. void DisplayMoveLeft(uint DatNum,uint MoveSpeed)
  114. {
  115.         uchar NextByte[16];//下半個(gè)漢字的數(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個(gè)字節(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. }
復(fù)制代碼

參考程序.rar

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

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

使用道具 舉報(bào)

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

  1. /*********************************************************************
  2.                          快速福利葉變換C函數(shù)
  3. 函數(shù)簡介:此函數(shù)是通用的快速傅里葉變換C語言函數(shù),移植性強(qiáng),以下部分不依
  4.           賴硬件。此函數(shù)采用聯(lián)合體的形式表示一個(gè)復(fù)數(shù),輸入為自然順序的復(fù)
  5.           數(shù)(輸入實(shí)數(shù)是可令復(fù)數(shù)虛部為0),輸出為經(jīng)過FFT變換的自然順序的
  6.           復(fù)數(shù)
  7. 使用說明:使用此函數(shù)只需更改宏定義FFT_N的值即可實(shí)現(xiàn)點(diǎn)數(shù)的改變,F(xiàn)FT_N的
  8.           應(yīng)該為2的N次方,不滿足此條件時(shí)應(yīng)在后面補(bǔ)0
  9. 函數(shù)調(diào)用:FFT(s);
  10. 時(shí)    間:2010-2-20
  11. 版    本:Ver1.0
  12. 參考文獻(xiàn):   
  13.       
  14. **********************************************************************/
  15. #include<math.h>
  16. #include <stdio.h>


  17. #define PI 3.1415926535897932384626433832795028841971               //定義圓周率值
  18. #define FFT_N 16                                                   //定義福利葉變換的點(diǎn)數(shù)

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


  24. /*******************************************************************
  25. 函數(shù)原型:struct compx EE(struct compx b1,struct compx b2)  
  26. 函數(shù)功能:對兩個(gè)復(fù)數(shù)進(jìn)行乘法運(yùn)算
  27. 輸入?yún)?shù):兩個(gè)以聯(lián)合體定義的復(fù)數(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ù)功能:對輸入的復(fù)數(shù)組進(jìn)行快速傅里葉變換(FFT)
  40. 輸入?yún)?shù):*xin復(fù)數(shù)結(jié)構(gòu)體組的首地址指針,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;                  //變址運(yùn)算,即把自然順序變成倒位序,采用雷德算法
  48.    nm1=FFT_N-1;  
  49.    for(i=0;i<nm1;i++)        
  50.    {
  51.     if(i<j)                    //如果i<j,即進(jìn)行變址
  52.      {
  53.       t=xin[j];           
  54.       xin[j]=xin[i];
  55.       xin[i]=t;
  56.      }
  57.     k=nv2;                    //求j的下一個(gè)倒位序
  58.     while(k<=j)               //如果k<=j,表示j的最高位為1   
  59.      {           
  60.       j=j-k;                 //把最高位變成0
  61.       k=k/2;                 //k/2,比較次高位,依次類推,逐個(gè)比較,直到某個(gè)位為0
  62.      }
  63.    j=j+k;                   //把0改為1
  64.   }
  65.                         
  66.   {
  67.    int le,lei,ip;                            //FFT運(yùn)算核,使用蝶形運(yùn)算完成FFT運(yùn)算
  68.     f=FFT_N;
  69.    for(l=1;(f=f/2)!=1;l++)                  //計(jì)算l的值,即計(jì)算蝶形級數(shù)
  70.            ;
  71.   for(m=1;m<=l;m++)                         // 控制蝶形結(jié)級數(shù)
  72.    {                                        //m表示第m級蝶形,l為蝶形級總數(shù)l=log(2)N
  73.     le=2<<(m-1);                            //le蝶形結(jié)距離,即第m級蝶形的蝶形結(jié)相距l(xiāng)e點(diǎn)
  74.     lei=le/2;                               //同一蝶形結(jié)中參加運(yùn)算的兩點(diǎn)的距離
  75.     u.real=1.0;                             //u為蝶形結(jié)運(yùn)算系數(shù),初始值為1
  76.     u.imag=0.0;
  77.     w.real=cos(PI/lei);                     //w為系數(shù)商,即當(dāng)前系數(shù)與前一個(gè)系數(shù)的商
  78.     w.imag=-sin(PI/lei);
  79.     for(j=0;j<=lei-1;j++)                   //控制計(jì)算不同種蝶形結(jié),即計(jì)算系數(shù)不同的蝶形結(jié)
  80.      {
  81.       for(i=j;i<=FFT_N-1;i=i+le)            //控制同一蝶形結(jié)運(yùn)算,即計(jì)算系數(shù)相同蝶形結(jié)
  82.        {
  83.         ip=i+lei;                           //i,ip分別表示參加蝶形運(yùn)算的兩個(gè)節(jié)點(diǎn)
  84.         t=EE(&xin[ip],&u);                    //蝶形運(yùn)算,詳見公式
  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ù),進(jìn)行下一個(gè)蝶形運(yùn)算
  91.      }
  92.    }
  93.   }
  94.   
  95. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

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

5020.png
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级二级三级视频 | 久久99精品久久久久久国产越南 | 欧美日本高清 | 国产精品久久久久久久久久 | 久久精品在线播放 | 九九视频在线观看 | 成人午夜电影在线观看 | 成年人的视频免费观看 | 亚洲综合天堂 | 国产婷婷在线视频 | 久久精品播放 | 日日夜夜草 | 亚洲激情一级片 | 精品一区二区久久久久久久网站 | 成人午夜免费福利视频 | 亚洲看片网站 | 中文字幕一区二区三区四区 | 亚洲一区二区久久久 | 久久综合香蕉 | 免费久久久久久 | 久久丁香 | av色站 | 日韩欧美一区二区三区在线播放 | 亚洲一区视频在线 | 中文字幕成人av | 亚洲成人福利在线观看 | 亚洲欧美国产一区二区三区 | 亚洲一二三区不卡 | 国产农村妇女毛片精品久久麻豆 | 免费观看一级毛片视频 | 国产日韩一区二区三区 | 狠狠色综合欧美激情 | 久久久入口 | 成人伊人| 精品国产一区二区三区久久久蜜月 | 国产www. | 国产激情在线 | 日韩一区二区福利视频 | 国产91亚洲精品一区二区三区 | 国产成人免费视频 | 国产av毛片 |