0.png (59.82 KB, 下載次數: 206)
下載附件
2016-10-25 13:58 上傳
所有制作資料打包下載:
迷你音樂頻譜顯示器.rar
(1.81 MB, 下載次數: 526)
2016-10-25 14:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
實現功能:
# 電路制作簡單,無需PCB板,只需元器件,采用USB 接口供電 # 采用LED點陣16*8顯示,隨音頻變化而起伏顯示 # 自動增益校正功能,音量調大調小都不會過滿顯示或顯示過少(當然,音量也不能太小了。輸入音量過小、電平比較低時,可以把音響的音量調小一點,音源的音量調大一些)
電路原理圖:
1.001.jpg (35.43 KB, 下載次數: 200)
下載附件
2016-10-25 13:54 上傳
管腳連接說明: 單片機的1腳為音頻信號輸入端,2~9/32~39為LED1點陣引腳,10~17/24~31為LED2點陣引腳,18/19為晶振、電容引腳,21/22為指示燈引腳(21為負極,22為正極), 40腳為VCC電源5V正極,20腳為GND電源負極(也是音頻信號輸入負極),23腳為空腳懸空。 制作說明: 1、用熱熔膠或502膠水將USB公頭反向粘到芯片底座的左側(底座缺口一側)
1.002.jpg (20.11 KB, 下載次數: 177)
下載附件
2016-10-25 13:54 上傳
1.003.jpg (19.36 KB, 下載次數: 156)
下載附件
2016-10-25 13:54 上傳
2、將USB公頭上的正極連至40腳,負極連至20腳,將2PIN排針粘到芯片底座的右側(頻譜接口),上端接1腳,下端接20腳
1.004.jpg (22.27 KB, 下載次數: 176)
下載附件
2016-10-25 13:54 上傳
1.005.jpg (20.48 KB, 下載次數: 174)
下載附件
2016-10-25 13:54 上傳
1.006.jpg (18.13 KB, 下載次數: 192)
下載附件
2016-10-25 13:54 上傳
3、2個30PF電容連接至芯片底座的18、19、20腳(一個接18、20腳,另一個接19、20腳)
1.007.jpg (25.84 KB, 下載次數: 175)
下載附件
2016-10-25 13:54 上傳
4、32.768MHZ晶振連接至芯片底座的18、19腳
1.008.jpg (25.24 KB, 下載次數: 176)
下載附件
2016-10-25 13:54 上傳
1.009.jpg (23.59 KB, 下載次數: 186)
下載附件
2016-10-25 13:54 上傳
5、將芯片安放置底座上,缺口對缺口
1.010.jpg (22.75 KB, 下載次數: 192)
下載附件
2016-10-25 13:54 上傳
6、8*8點陣管腳識別方法:點陣旁邊的字朝下,下邊那行的左邊開始數是第一腳,然后逆時針走一圈1~16腳,和集成塊的數法一樣,然后對照點陣原理圖看!
1.011.jpg (33.8 KB, 下載次數: 192)
下載附件
2016-10-25 13:54 上傳
7、將2個8*8點陣安放于另一個芯片底座上,如圖所示,左側空出1列,右側空出3列,右側底下兩只腳接發光二極管(左正右負)
1.012.jpg (36.76 KB, 下載次數: 186)
下載附件
2016-10-25 13:54 上傳
8、將兩塊芯片底座合并,40個管腳依次焊接到一起,USB公頭接上USB延長線到電腦,音頻接口接上杜邦線到音頻線,到音頻分離器
1.013.jpg (25.08 KB, 下載次數: 162)
下載附件
2016-10-25 13:54 上傳
9、制作音頻線:
1.014.jpg (35.78 KB, 下載次數: 207)
下載附件
2016-10-25 13:54 上傳
1.015.jpg (49.1 KB, 下載次數: 177)
下載附件
2016-10-25 13:54 上傳
10、一分二音頻分線器可以讓音樂頻譜顯示器與音響并聯
1.016.jpg (3.64 KB, 下載次數: 173)
下載附件
2016-10-25 13:54 上傳
1.017.jpg (1.79 KB, 下載次數: 166)
下載附件
2016-10-25 13:54 上傳
1.018.jpg (1.76 KB, 下載次數: 159)
下載附件
2016-10-25 13:54 上傳
1.019.jpg (18.88 KB, 下載次數: 167)
下載附件
2016-10-25 13:54 上傳
11、音樂頻譜顯示器通過USB接口取電,從音頻接口采集音樂信號
1.020.jpg (33.05 KB, 下載次數: 153)
下載附件
2016-10-25 13:54 上傳
注意事項:
1.021.jpg (5.7 KB, 下載次數: 156)
下載附件
2016-10-25 13:54 上傳
1、電腦音量不能太小,因為檢測電壓幅值,音量太小了對單片機ADC采集會有影響,建議音量調到中等以上為最佳顯示效果。同時,可以通過調節音響的音量來控制聲音的大小(把音響的音量調小一點,電腦的音量調大一些)。
2、拔掉音頻接口信號輸入端(懸空),顯示會滿屏,拔掉音頻接口信號接地端,只顯示最下面一行!
3、在靜音的狀態下,顯示屏若時有波動,這是空中的電磁波的影響,是屬于正常情況。
12、成品展示
1.022.jpg (32.08 KB, 下載次數: 168)
下載附件
2016-10-25 13:54 上傳
1.023.jpg (30.63 KB, 下載次數: 171)
下載附件
2016-10-25 13:54 上傳
1.024.jpg (31.96 KB, 下載次數: 182)
下載附件
2016-10-25 13:54 上傳
1.025.jpg (28.72 KB, 下載次數: 164)
下載附件
2016-10-25 13:54 上傳
1.026.jpg (30.45 KB, 下載次數: 162)
下載附件
2016-10-25 13:54 上傳
元器件清單: 1、單片機STC12C5A60S2 PDIP40 (1片) 2、0788形紅色8*8LED點陣屏(2塊) 3、普通芯片座PIN40(2個) 4、USB公頭(1個) 5、32.768MHz石英晶體(1個) 6、30pF電容(2個) 7、2PIN排針(1個) 8、1PIN杜邦線(2根) 9、USB延長線公對母(1根) 10、音頻頭(1個) 11、音頻線(1根) 12、音頻分離器(1個) 13、發光二極管(1個) 14、導線 若干
主程序:
fft程序:
- #ifndef _FFT_INCLUDED_
- #define _FFT_INCLUDED_
- struct compx
- {
- float real;
- float imag;
- };//定義數據存放機構體
- struct compx dd[65]; //FFT數據段
- code float iw[64]=
- {
- 1.000,0,0.9952,-0.0980,0.9808,-0.1951,0.9569,-0.2903,0.9239,-0.3827,0.8819,-0.4714,0.8315,-0.5556,
- 0.7730,-0.6344,0.7071,-0.7071,0.6344,-0.7730,0.5556,-0.8315,0.4714,-0.8819,0.3827,-0.9239,0.2903,-0.9569,
- 0.1951,-0.9808,0.0980,-0.9952,0.0,-1.0000,-0.0980,-0.9952,-0.1951,-0.9808,-0.2903,0.9569,-0.3827,-0.9239,
- -0.4714,-0.8819,-0.5556,-0.8315,-0.6344,-0.7730,-0.7071,-0.7071,-0.7730,-0.6344,-0.8315,-0.5556,-0.8819,-0.4714,
- -0.9239,-0.3827,-0.9569,-0.2903,-0.9808,-0.1951,-0.9952,-0.0980
- };//w值緩存區
- data struct compx temp;
- //復數乘法
- void ee(struct compx b1,uchar data b2)
- {
- temp.real=b1.real*iw[2*b2]-b1.imag*iw[2*b2+1];
- temp.imag=b1.real*iw[2*b2+1]+b1.imag*iw[2*b2];
- }
- //乘方函數,計算 nbottom^ntop
- uint mypow(uchar data nbottom,uchar data ntop)
- {
- uint data result=1;
- uchar data t;
- for(t=0;t<ntop;t++)result*=nbottom;//nbottom^ntop
- return result;
- }
- //快速傅立葉變換
- void fft(struct compx *xin,uchar data N)
- {
- uchar data fftnum,i,j,k,l,m,n,disbuff,dispos,dissec;
- data struct compx t;
- fftnum=N;//傅立葉變換的點數
- for(m=1;(fftnum=fftnum/2)!=1;m++);//求得M的值
- for(k=0;k<=N-1;k++)//碼位倒置
- {
- n=k;
- j=0;
- for(i=m;i>0;i--)//倒置
- {
- j=j+((n%2)<<(i-1));
- n=n/2;
- }
- if(k<j){t=xin[1+j];xin[1+j]=xin[1+k];xin[1+k]=t;}//交換數據
- }
- for(l=1;l<=m;l++)//fft運算
- {
- disbuff=mypow(2,l);//求得碟間距離
- dispos=disbuff/2;//求得碟形兩點之間的距離
- for(j=1;j<=dispos;j++)
- for(i=j;i<N;i=i+disbuff)//遍歷M級所有的碟形
- {
- dissec=i+dispos;//求得第二點的位置
- ee(xin[dissec],(uint)(j-1)*(uint)N/disbuff);//復數乘法
- t=temp;
- xin[dissec].real=xin[i].real-t.real;
- xin[dissec].imag=xin[i].imag-t.imag;
- xin[i].real=xin[i].real+t.real;
- xin[i].imag=xin[i].imag+t.imag;
- }
- }
- }
- //對fft數據進行處理,得到各個頻率段的電壓幅值
- void processfft( )
- {
- uchar data pt=0,tmp;
- for(pt=1;pt<65;pt++)
- {
- dd[pt].imag=0; //清零虛部
- }
- fft(dd,64);//對當前數據進行傅立葉變換
- dd[0].imag=0; dd[0].real=0;
- for(pt=1;pt<65;pt++)
- {
- dd[pt].real=sqrt(dd[pt].real*dd[pt].real+dd[pt].imag*dd[pt].imag);//取均方根
- }
- if(Menu==1)
- {
- for(pt=2;pt<34;pt+=2)
- {
- for(tmp=(dd[pt].real/32)+1,LEDBuf[pt]=0xFF;tmp>=1;tmp--) //tmp>1;不保留 最低位那一行常亮;{}一次也不執行;
- {
- LEDBuf[pt]<<=1;
-
- }
- LEDBuf[pt]=~(LEDBuf[pt]);
- }
- }
- else if(Menu==2)
- {
- //下落感頻譜
- for(pt=2;pt<34;pt+=2)
- {
- tmp=(dd[pt].real/32)+1;
- if(refreshflag[pt]<tmp) //刷新數據,取較大高度值 存儲顯示
- {
- for(LEDBuf[pt]=0xFF;tmp>1;tmp--) //tmp>1;不保留 最低位那一行常亮;{}一次也不執行;
- {
- LEDBuf[pt]<<=1;
-
- }
- refreshflag[pt]=(dd[pt].real/32)+1;
- }
- else
- {
- if(refreshflag[pt]>1)refreshflag[pt]--; //頂端下落速度控制 改變值可以改變下降速度
- for(LEDBuf[pt]=0xFF,tmp=refreshflag[pt];tmp>1;tmp--) //tmp>1;不保留 最低位那一行常亮;{}一次也不執行;
- {
- LEDBuf[pt]<<=1;
-
- }
- }
-
- }
- }
- else if(Menu==0)
- {
- //下落感頻譜
- for(pt=2;pt<34;pt+=2)
- {
- tmp=(dd[pt].real/32)+1;
- if(refreshflag[pt]<tmp) //刷新數據,取較大高度值 存儲顯示
- {
- for(LEDBuf[pt]=0xFF;tmp>=1;tmp--) //tmp>1;不保留 最低位那一行常亮;{}一次也不執行;
- {
- LEDBuf[pt]<<=1;
-
- }
- refreshflag[pt]=(dd[pt].real/32)+1;
- }
- else
- {
- if(refreshflag[pt]>1)refreshflag[pt]--; //頂端下落速度控制 改變值可以改變下降速度
- for(LEDBuf[pt]=0xFF,tmp=refreshflag[pt];tmp>=1;tmp--) //tmp>1;不保留 最低位那一行常亮;{}一次也不執行;
- {
- LEDBuf[pt]<<=1;
-
- }
- }
- LEDBuf[pt]=~(LEDBuf[pt]);
-
- }
- }
-
- }
- #endif
復制代碼 |