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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 31646|回復: 42
收起左側

音頻頻譜顯示(原理圖 源代碼 開源 第一版)

  [復制鏈接]
ID:94097 發表于 2015-10-30 14:56 | 顯示全部樓層 |閱讀模式


很久沒出新作品給大家了,其實不是不想出,而是開學這段時間太忙,從八月底到九月中旬,一直為新生忙碌著,自己的時間都很少。暑假閑在家里,也因為要體驗“離開互聯網的日子”而未曾碰觸電腦(最近在整理假期離開網絡生活的文字,希望大家可以了解另一個我)。所以也不曾出教學視頻,覺得很對不住大家。

工作的時候,忙里偷閑,開通了新浪微博和新浪博客,感謝新浪推出的微號功能,讓我的域名得以和QQ號碼一樣。以后工作室的動態會同步到新浪微博,作品和相關資料下載也會同步到新浪博客,希望大家多多關注!

頻譜原理圖:
音頻顯示原理圖.jpg


新學期新氣象,教學視頻會保持更新,并加快進度,工作室也做好了新的工作計劃,會有更優質的作品奉獻給大家。
希望喜歡工作室作品的朋友將我們的作品和精神分享,我們堅持創新,堅持開源!
這次的小作品是頻譜顯示,8*16led顯示點陣配合stc12系列單片機系統,就可以自己制作廉價的頻譜顯示了!
原理圖請登錄百度網盤下載。關于原理圖我想說的是,這是原理圖,不是封裝圖,所以大多數IC是看不到Vcc或者Gnd的,但不代表沒有,希望初學者留意。
這次的程序不是本人編寫,是我師弟的設計,程序是有缺陷的,比如音效的延時,顯示的效果等,有耐心的朋友可以自己修改程序,這次的作品在于分享數模轉換程序和FFT算法,我也希望網友可以將完善的程序分享到網上,大家共同進步!!!
實物照片:

下面是我的焊接工程,不熟悉電路布局的童鞋可以做為參考
點陣正面  

點陣背面  

系統板正面

系統板背面

成品   


在這里要說的是,焊接并不算復雜,無非就是點陣的焊接耗時耗力,要是有點焊接功夫,小半天也足夠了,焊接的時候千萬不要弄斷管腳,彎折的管腳做跳線最好不過(圖3)。系統板的布局我建議大家緊湊一些,我自己焊接的時候是考慮到這板子以后可能加個時間顯示什么的,所以預留了一些空間,這樣以后再做點陣顯示的時候就方便多了


源程序:
  1. #include<stc12c5a.h>
  2. #include<intrins.h>
  3. //#include"basic.h"
  4. typedef unsigned char uint8;
  5. typedef unsigned int uint16;
  6. #define ADC_FLAG    (1<<4)    /*ADC_中斷標志*/
  7. /*放大128倍后的sin整數表(128)*/       
  8. code char SIN_TAB[128]={0,6,12,18,24,30,36,42,48,54,59,65,70,75,80,85,89,94,98,102,
  9.                         105,108,112,114,117,119,121,123,124,125,126,126,126,126,126,
  10.                                                 125,124,123,121,119,117,114,112,108,105,102,98,94,89,85,80,75,
  11.                                                 70,65,59,54,48,42,36,30,24,18,12,6,0,-6,-12,-18,-24,-30,-36,-42,
  12.                                                 -48,-54,-59,-65,-70,-75,-80,-85,-89,-94,-98,-102,-105,-108,-112,
  13.                                                 -114,-117,-119,-121,-123,-124,-125,-126,-126,-126,-126,-126,-125,
  14.                                                 -124,-123,-121,-119,-117,-114,-112,-108,-105,-102,-98,-94,-89,-85,
  15.                                                 -80,-75,-70,-65,-59,-54,-48,-42,-36,-30,-24,-18,-12,-6
  16.                                            };

  17. /*放大128倍后的cos整數表(128)*/
  18. code char COS_TAB[128]={127,126,126,125,124,123,121,119,117,114,112,108,105,102,98,94,
  19.                         89,85,80,75,70,65,59,54,48,42,36,30,24,18,12,6,0,-6,-12,-18,-24,
  20.                                                 -30,-36,-42,-48,-54,-59,-65,-70,-75,-80,-85,-89,-94,-98,-102,
  21.                                                 -105,-108,-112,-114,-117,-119,-121,-123,-124,-125,-126,-126,-126,
  22.                                                 -126,-126,-125,-124,-123,-121,-119,-117,-114,-112,-108,-105,-102,
  23.                                                 -98,-94,-89,-85,-80,-75,-70,-65,-59,-54,-48,-42,-36,-30,-24,-18,
  24.                                                 -12,-6,0,6,12,18,24,30,36,42,48,54,59,65,70,75,80,85,89,94,98,102,
  25.                                                 105,108,112,114,117,119,121,123,124,125,126,126
  26.                                            };

  27. /*采樣存儲序列表*/
  28. code char LIST_TAB[128] = {0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,
  29.                            12,76,44,108,28,92,60,124,2,66,34,98,18,82,50,114,10,74,42,106,26,90,58,
  30.                                                    122,6,70,38,102,22,86,54,118,14,78,46,110,30,94,62,126,1,65,33,97,17,81,49,
  31.                                                    113,9,73,41,105,25,89,57,121,5,69,37,101,21,85,53,117,13,77,45,109,29,93,61,
  32.                                                    125,3,67,35,99,19,83,51,115,11,75,43,107,27,91,59,123,7,71,39,103,23,87,55,
  33.                                                    119,15,79,47,111,31,95,63,127
  34.                                                   };

  35. /*分級量化表*/
  36. uint8 QTY_TAB[] = {0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
  37. uint8 ADC_Count=0;
  38. uint8 i,j,k,b,p,anum;       
  39. uint16 xdata Fft_Real[128];
  40. uint16 xdata Fft_Image[128];               // fft的虛部
  41. uint8 xdata LED_TAB[16];                                //記錄紅色柱狀

  42. /********************************************************************
  43. * 名稱 : FFT
  44. * 功能 : 碟型運算轉換
  45. * 輸入 : 無
  46. * 輸出 : 讀出的值
  47. ***********************************************************************/
  48. void FFT()//基2fft
  49. {                 
  50.         uint16 Temp_Real,Temp_Imag,temp;                // 中間臨時變量
  51.         uint16 TEMP1 = 0,max=0;
  52.         for( i=1; i<=7; i++)                            /* for(1) */
  53.         {
  54.                 b=1;
  55.                 b <<=(i-1);                                 //碟式運算,用于計算隔多少行計算例如 第一極 1和2行計算
  56.                 for( j=0; j<=b-1; j++)                      /* for (2) */
  57.                 {
  58.                         p=1;
  59.                         p <<= (7-i);            
  60.                         p = p*j;
  61.                         for( k=j; k<128; k=k+2*b)               /* for (3)  */
  62.                         {
  63.                                 Temp_Real=Fft_Real[k];
  64.                                 Temp_Imag=Fft_Image[k];
  65.                                 temp=Fft_Real[k+b];
  66.                                 Fft_Real[k]=Fft_Real[k]+((Fft_Real[k+b]*COS_TAB[p])>>7)+((Fft_Image[k+b]*SIN_TAB[p])>>7);
  67.                                 Fft_Image[k]=Fft_Image[k]-((Fft_Real[k+b]*SIN_TAB[p])>>7)+((Fft_Image[k+b]*COS_TAB[p])>>7);
  68.                                 Fft_Real[k+b]=Temp_Real-((Fft_Real[k+b]*COS_TAB[p])>>7)-((Fft_Image[k+b]*SIN_TAB[p])>>7);
  69.                                 Fft_Image[k+b]=Temp_Imag+((temp*SIN_TAB[p])>>7)-((Fft_Image[k+b]*COS_TAB[p])>>7);          // 移位.防止溢出. 結果已經是本值的 1/64               
  70.                                 Fft_Real[k] >>= 1;            
  71.                                 Fft_Image[k] >>= 1;
  72.                                 Fft_Real[k+b] >>= 1;                 
  73.                                 Fft_Image[k+b] >>= 1;                                                      
  74.                         }     
  75.                 }
  76.         }
  77.        
  78.         for(j=0;j<16;j++)//16分頻                                                                                         
  79.         {                                                                                                                                                          
  80.                 TEMP1=((((Fft_Real[j+1]* Fft_Real[j+1]))+((Fft_Image[j+1]*Fft_Image[j+1])))>>1);//求各頻段幅值
  81.                 if(TEMP1<1)TEMP1=0;
  82.                 LED_TAB[j]=TEMP1;       
  83.                 if(LED_TAB[j]>max)max=LED_TAB[j];
  84.         }
  85.         if(max > 16)//分級量化
  86.         {
  87.                 max/=16;
  88.                 for(j=0;j<16;j++)LED_TAB[j]/=max;
  89.         }      
  90. }

  91. /********************************************************************
  92. * 名稱 : GPIO_init
  93. * 功能 : GPIO初始化
  94. * 輸入 : 無
  95. * 輸出 : 讀出的值
  96. ***********************************************************************/
  97. void GPIO_init()
  98. {
  99.         P0M0 = 1; P0M1 = 0; P0 = 0XFF;    /*列*/
  100.         P2M0 = 1; P2M1 = 0; P2 = 0XFF;
  101.         P3M0 = 1; P3M1 = 0; P3 = 0XFF;          /*行*/
  102. }
  103. /********************************************************************
  104. * 名稱 : timer_Init
  105. * 功能 : 內部寄存器初始化
  106. * 輸入 : 無
  107. * 輸出 : 無
  108. ***********************************************************************/
  109. void timer_Init()
  110. {
  111.         TMOD = 0X12;
  112.         TH0 = 0xb0;                                                                   
  113.         TL0 = 0xb0;
  114.         ET0 = 1;                                               //定時器0 打開
  115.         TR0 = 0;                                                      //關閉定時器
  116.         TH1 = 0xfd;                                                                                                 
  117.         TL1 = 0Xa8;
  118.         ET1  = 1;
  119.         TR1  = 1;       
  120.         EA   = 1;       
  121. }
  122. /********************************************************************
  123. * 名稱 : adc_Init
  124. * 功能 : 內部寄存器初始化
  125. * 輸入 : 無
  126. * 輸出 : 無
  127. ***********************************************************************/
  128. void adc_Init()
  129. {         
  130.         ADC_CONTR = 0x80;             //ADC電源打開
  131.         _nop_();_nop_();_nop_();_nop_();
  132.         P1ASF = 0x01;                 //0000,0001, 將 P1.0 置成模擬口
  133.         AUXR1 &=0xFB;                 //1111,1011, 令 ADRJ=0
  134.         ADC_RES = 0x00;               //清零寄存器
  135.         ADC_RESL = 0x00;
  136.         EADC  = 1;                                          //AD中斷打開
  137.         EA = 1;                                                  //總中斷打開
  138. }

  139. /********************************************************************
  140. * 名稱 : main
  141. * 功能 : 主程序
  142. * 輸入 : 無
  143. * 輸出 : 無
  144. ***********************************************************************/
  145. void main()
  146. {
  147.         uint8 i = 0;
  148.         GPIO_init();
  149.         timer_Init();
  150.         adc_Init();
  151.         while(1)
  152.         {
  153.                 ADC_Count = 0;
  154.                 EADC = 1;
  155.                 TR0  = 1;
  156.                 while(ADC_Count < 128);       //滿足128點
  157.                 for(i=0; i<128; i++)                  //清除虛部
  158.                 {
  159.                         Fft_Image[i] = 0;
  160.                 }
  161.                 FFT();                        //FFT運算并轉換為各頻段幅值

  162.         }
  163. }
  164. /********************************************************************
  165. * 名稱 : ADC_Finish
  166. * 功能 : ADC轉換完成中斷服務
  167. * 輸入 : 無
  168. * 輸出 : 無
  169. ***********************************************************************/
  170. void ADC_Finish() interrupt 5
  171. {
  172.         Fft_Real[LIST_TAB[ADC_Count]] = (int)(((ADC_RES)<<1)+(ADC_RESL>>1)*2)>>3;    /*按LIST_TAB表順序,進行存儲采樣值*/
  173.         if(ADC_Count <= 127)
  174.         {
  175.                 ADC_Count++;           /*自動增量控制*/
  176.                 ADC_CONTR &= !ADC_FLAG;
  177.         }
  178.         else
  179.         {
  180.                 EADC = 0;
  181.                 TR0  = 0;       
  182.         }                       
  183. }
  184. /********************************************************************
  185. * 名稱 : interrupt_timer1
  186. * 功能 : 顯示屏幕刷新中斷服務
  187. * 輸入 : 無
  188. * 輸出 : 無
  189. ***********************************************************************/
  190. void interrupt_timer1() interrupt 3
  191. {       
  192.         static uint8 rec = 0;
  193.         TH1 = 0xfd;                                                                                                 
  194.         TL1 = 0Xa8;

  195.         switch(rec)                                                                     //往點陣屏填充一列的數據
  196.         {
  197.                 case 0: P0 = QTY_TAB[LED_TAB[0]]; P2 = 0;break;
  198.                 case 1: P0 = QTY_TAB[LED_TAB[1]]; P2 = 1;break;                 
  199.                 case 2: P0 = QTY_TAB[LED_TAB[2]]; P2 = 2;break;       
  200.                 case 3: P0 = QTY_TAB[LED_TAB[3]]; P2 = 3;break;       
  201.                 case 4: P0 = QTY_TAB[LED_TAB[4]]; P2 = 4;break;       
  202.                 case 5: P0 = QTY_TAB[LED_TAB[5]]; P2 = 5;break;               
  203.                 case 6: P0 = QTY_TAB[LED_TAB[6]]; P2 = 6;break;       
  204.                 case 7: P0 = QTY_TAB[LED_TAB[7]]; P2 = 7;break;
  205.                 case 8: P0 = QTY_TAB[LED_TAB[8]]; P2 = 8;break;
  206.                 case 9: P0 = QTY_TAB[LED_TAB[9]]; P2 = 9;break;                 
  207.                 case 10: P0 = QTY_TAB[LED_TAB[10]]; P2 = 10;break;       
  208.                 case 11: P0 = QTY_TAB[LED_TAB[11]]; P2 = 11;break;       
  209.                 case 12: P0 = QTY_TAB[LED_TAB[12]]; P2 = 12;break;       
  210.                 case 13: P0 = QTY_TAB[LED_TAB[13]]; P2 = 13;break;               
  211.                 case 14: P0 = QTY_TAB[LED_TAB[14]]; P2 = 14;break;       
  212.                 case 15: P0 = QTY_TAB[LED_TAB[15]]; P2 = 15;break;               
  213.                 default:break;
  214.         }
  215.         rec++;
  216.         if(rec > 15)
  217.         {
  218.                 rec = 0;
  219.         }
  220. }
  221. /********************************************************************
  222. * 名稱 : Ad_Control
  223. * 功能 : 控制采樣率
  224. * 輸入 : 無
  225. * 輸出 : 無
  226. ***********************************************************************/
  227. void Ad_Control() interrupt 1
  228. {
  229.         ADC_CONTR = 0xe8;                     //開始AD采集
  230.         _nop_();_nop_();_nop_();_nop_();         
  231. }

復制代碼





音頻顯示(STC12系列老版).zip

733.11 KB, 下載次數: 288, 下載積分: 黑幣 -5

LED頻譜開源版資料(STC15系列新版).zip

143.45 KB, 下載次數: 347, 下載積分: 黑幣 -5

評分

參與人數 2黑幣 +38 收起 理由
angmall + 35 共享資料的黑幣獎勵!
qjzyx + 3 贊一個!

查看全部評分

回復

使用道具 舉報

ID:94392 發表于 2015-11-2 20:25 來自手機 | 顯示全部樓層
樓主,謝謝你的制作,我也正再做,希望可以請教你,可以加我QQ  1336294189謝謝
回復

使用道具 舉報

ID:134722 發表于 2016-7-29 17:21 | 顯示全部樓層
這個好!MCU的處理量比較大喔
回復

使用道具 舉報

ID:112693 發表于 2016-8-8 00:04 | 顯示全部樓層
這個有意思,回頭DIY一個
回復

使用道具 舉報

ID:17396 發表于 2016-8-23 10:01 | 顯示全部樓層
有意思,希望能夠學習到并做到
回復

使用道具 舉報

ID:137539 發表于 2016-8-25 16:31 | 顯示全部樓層
不錯,學習學習,謝謝分享,回頭做一做
回復

使用道具 舉報

ID:141649 發表于 2016-10-8 11:41 來自手機 | 顯示全部樓層
一直在找頻譜的資料,通俗易懂
回復

使用道具 舉報

ID:141143 發表于 2016-10-14 22:48 | 顯示全部樓層
謝謝分享.........
回復

使用道具 舉報

ID:186696 發表于 2017-4-6 15:08 | 顯示全部樓層
學習了,感謝樓主分享資源
回復

使用道具 舉報

ID:221681 發表于 2017-7-22 23:12 | 顯示全部樓層
好東西,收藏了
回復

使用道具 舉報

ID:221117 發表于 2017-7-23 09:47 | 顯示全部樓層
收藏,盡快做一個出來
回復

使用道具 舉報

ID:48413 發表于 2017-8-7 19:32 | 顯示全部樓層
謝謝,學習一下
回復

使用道具 舉報

ID:68429 發表于 2017-9-25 21:53 來自手機 | 顯示全部樓層
樓主強
回復

使用道具 舉報

ID:241982 發表于 2017-10-27 01:42 | 顯示全部樓層
正在制作一個功放缺一個音頻顯示,正好。。。。。謝謝樓主
回復

使用道具 舉報

ID:241982 發表于 2017-10-27 01:49 | 顯示全部樓層
有效果圖嗎!
回復

使用道具 舉報

ID:241982 發表于 2017-10-27 01:49 | 顯示全部樓層
樓主什么時候更新第二版呢!期待
回復

使用道具 舉報

ID:98767 發表于 2017-11-12 15:13 | 顯示全部樓層
謝謝樓主分享,下個研究下,自己也DIY一個,好像視頻看不了
回復

使用道具 舉報

ID:254064 發表于 2017-11-27 10:48 | 顯示全部樓層
非常感謝樓主的分享,我在protues中按照您的方法接好運行了,但是不知道如何輸入音頻信號,請問這個可以說一下嗎,謝謝!
回復

使用道具 舉報

ID:282866 發表于 2018-2-7 16:28 | 顯示全部樓層
非常感謝!!!!!!
回復

使用道具 舉報

ID:282726 發表于 2018-2-7 19:10 | 顯示全部樓層
視頻怎么看不了
另外,兩個點陣的接法,怎么不一樣呢
回復

使用道具 舉報

ID:266116 發表于 2018-2-7 22:44 | 顯示全部樓層
做的很好看!
回復

使用道具 舉報

ID:282866 發表于 2018-3-6 11:32 | 顯示全部樓層
很感謝!非常的需要
回復

使用道具 舉報

ID:282866 發表于 2018-3-6 11:32 | 顯示全部樓層
我正好也在做,不知道怎么下手
回復

使用道具 舉報

ID:338306 發表于 2018-5-25 20:41 | 顯示全部樓層
樓主焊功牛逼啊~
回復

使用道具 舉報

ID:431129 發表于 2018-11-22 13:25 | 顯示全部樓層
樓主雪里送炭,我正非常需要這個資料。謝謝!
回復

使用道具 舉報

ID:425041 發表于 2018-11-22 16:31 | 顯示全部樓層
我是能做出來就是不會寫程序
回復

使用道具 舉報

ID:399179 發表于 2018-11-23 21:12 來自手機 | 顯示全部樓層
感謝分享!
回復

使用道具 舉報

ID:490130 發表于 2019-3-13 18:16 | 顯示全部樓層
感謝分享!
回復

使用道具 舉報

ID:490130 發表于 2019-3-13 18:17 | 顯示全部樓層
感謝分享!
回復

使用道具 舉報

ID:503342 發表于 2019-4-2 16:21 | 顯示全部樓層
感激不盡
回復

使用道具 舉報

ID:399179 發表于 2019-4-2 20:02 來自手機 | 顯示全部樓層
謝謝樓主分享!
回復

使用道具 舉報

ID:27919 發表于 2019-8-9 15:14 | 顯示全部樓層
謝謝!正需要,太高興了。
回復

使用道具 舉報

ID:13396 發表于 2019-9-17 22:31 | 顯示全部樓層
學習了,感謝樓主分享資源.
回復

使用道具 舉報

ID:517951 發表于 2019-12-12 17:48 | 顯示全部樓層
樓主,好文章,學習啦
回復

使用道具 舉報

ID:681106 發表于 2020-1-4 16:39 | 顯示全部樓層
最近在做,但好多都不懂,謝謝博主的分享
回復

使用道具 舉報

ID:681106 發表于 2020-1-4 16:41 | 顯示全部樓層
謝謝,最近在做,希望能后期再出點更詳細的教程,謝謝
回復

使用道具 舉報

ID:595367 發表于 2020-2-25 15:55 | 顯示全部樓層
很好,值得參考
回復

使用道具 舉報

ID:373976 發表于 2020-3-26 15:59 | 顯示全部樓層
感謝樓主的分享
回復

使用道具 舉報

ID:97023 發表于 2020-3-26 22:07 | 顯示全部樓層
51黑電子名字 發表于 2017-11-27 10:48
非常感謝樓主的分享,我在protues中按照您的方法接好運行了,但是不知道如何輸入音頻信號,請問這個可以說 ...

不知道是否對你有幫助:

快照1.png
回復

使用道具 舉報

ID:895005 發表于 2021-6-7 17:36 | 顯示全部樓層
你好 請問一下 信號輸入 是要接音頻座嗎    那么接到哪個口上呢?希望回復一下    謝謝了!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品一区 | 午夜影院操 | 亚洲麻豆| 99久热| 亚洲一区二区在线 | 日韩在线视频一区 | 久久久久久亚洲 | 91人人在线| 91在线观看 | 理论片午午伦夜理片影院 | 国产一区二区不卡 | 黄色大片毛片 | 国产视频一区二区三区四区五区 | 中文字幕视频在线观看 | 日韩视频91 | 中文字幕国产在线 | 一区二区三区在线免费观看 | 久艹网站 | 日韩精品一区二区三区在线播放 | 精品国产1区2区3区 一区二区手机在线 | 狠狠的干 | 激情欧美一区二区三区中文字幕 | 国产中文字幕在线观看 | 日韩综合在线播放 | 亚洲视频免费在线观看 | 国产乱码精品一区二区三区五月婷 | 日韩欧美国产一区二区 | julia中文字幕久久一区二区 | 久久精品国产亚洲 | av中文字幕在线 | 成人网在线观看 | 成人毛片网站 | 欧美区日韩区 | 成年人在线播放 | 无码国模国产在线观看 | www.久久.com | 国产99久久 | 91精品国产高清一区二区三区 | 成人在线视| 涩涩视频在线观看免费 | 一级黄在线观看 |