標(biāo)題: DIY音樂頻譜8*16(超簡單,帶PCB 原理圖 程序和教程) [打印本頁]

作者: kid次    時間: 2013-12-3 11:14
標(biāo)題: DIY音樂頻譜8*16(超簡單,帶PCB 原理圖 程序和教程)
超簡單的音樂頻譜8*16 diy,帶PCB 原理圖 程序和制作教程
http://player.youku.com/player.php/sid/XNjI3NTcxODMy/v.swf



下面是主程序(完整代碼在本帖最后附件里面下載):
  1. #include "src\STC12C5A.h"                 

  2. #include <intrins.h>      //51基本運算(包括_nop_空函數(shù))
  3. #include <math.h>

  4. #include "src\Define.h"


  5. ///////全局變量///////
  6. uchar data DelayTime=9;          //<=8效果最好;
  7. uchar data INTTime=0x40;  //0x40;       
  8. uchar data gain=6;
  9. uchar data Menu=2;
  10. uchar idata refreshflag[40];
  11. uchar  data LEDBuf[35];          //15列;從左到右;亮的位為真(1);
  12. uint32  data TouchKey=0;
  13. uchar data CBeep=0;
  14. //////////////////////


  15. void Delays(uint t)
  16. {  
  17.         uint j;
  18.         while(--t)
  19.                 for(j=0;j<5;j++);   
  20. }
  21. void Delaysms(uint t)
  22. {  
  23.         uint j;
  24.         while(--t)
  25.                 for(j=0;j<15;j++);   
  26. }



  27. #include "src\ADC.c"
  28. #include "src\Font.c"
  29. #include "src\fft.h"



  30. void PWM_init (void)          //PWM初始化函數(shù)         //PWM模式,接P1.3接口(PWM0),強上拉.
  31. {                  
  32.         CMOD=0x00;    //設(shè)置PCA定時器          0x00~0x03;
  33.         CL=0xEF;
  34.         CH=0xEF;
  35.         CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)
  36.         CCAP0L=0xEF; //設(shè)置PWM0初始值與CCAP0H相同
  37.         CCAP0H=0xFF; // PWM0初始時為0

  38.         CR=1;        //啟動PCA定時器
  39. }

  40. void PWM0_set (uchar set)           //PWM0占空比設(shè)置函數(shù)        (0x00~0xFF)
  41. {
  42.         CCAP0L= set; //設(shè)置值寫入CCAP0L
  43.         CCAP0H= set; //設(shè)置值寫入CCAP0H
  44. }


  45. void IOINIT(void)                                                          //I/O強上拉模式;
  46. {
  47.         P4SW = 0xff;                                  //啟動I/O:P4;
  48.         P4M1 = B(00000000); P4M0 = B(10000000);P47=0;//震動馬達;
  49.         P0M1 = 0x00;            P0M0 = 0xff;       P0=0; //點陣列(Y)(L:OFF; H,H+:ON,ON+;)
  50.         P1M1 = B(01000011); P1M0 = B(00110100);P1=B(10110111); //(P17@(高阻,IN)&P16@(高阻,IN);TouchKey) ... P14@(傳統(tǒng)IO,Beep,IN) P13@(強推,OUT)呼吸燈 ... P11@(高阻,IN)AD2;P10@(高阻,IN)AD1;      
  51.         P2M1 = B(00000000); P2M0 = B(11111111);P2=0; //點陣行(X0(Left))(L:OFF; H,H+:ON,ON+;)  
  52.         P3M1 = B(00000000);        P3M0 = B(11111111);P3=0; //點陣行(X1(Right))(L:OFF; H,H+:ON,ON+;)               
  53.         P1ASF =B(00000011);                          //將P10,P11的IO設(shè)置為模擬輸入功能;     

  54. //  Y(P0)
  55. //  ↑
  56. //H        |
  57. //         |
  58. //        |
  59. //L        |
  60. //         ---------------------→
  61. //        [L:X0(P2):H][L:X1(P3):H]

  62. //TestCode:
  63. //        P0=B(10000000);
  64. //        P2=B(00000001);
  65. //        P3=B(00010000);

  66. }



  67. void BufToLED_Refresh()                     //Refresh&Write Buf to LED ;
  68. {       
  69.          uchar data i;
  70.          uchar data X=1;          
  71.          uchar data Y=1;
  72.          for(X=1,i=2;X;X<<=1,i+=2)              //for(X=1;X!=0;X<<=1) //8bit
  73.          {
  74.                   P2=X;
  75.                 for(Y=1;Y!=0;Y<<=1)                            //Y=Y<<1;
  76.                  {
  77.                         P0=Y&LEDBuf[i];
  78.                         Delays(DelayTime);
  79.                         P0=0;
  80.                 }
  81.                 P2=0;       
  82.          };
  83.          for(X=1;X<B(10000000);X<<=1,i+=2)            //7bit
  84.          {
  85.                   P3=X;
  86.                 for(Y=1;Y!=0;Y<<=1)                            //Y=Y<<1;
  87.                  {
  88.                         P0=Y&LEDBuf[i];
  89.                         Delays(DelayTime);
  90.                         P0=0;
  91.                 }
  92.                 P3=0;       
  93.          };
  94.                
  95. }




  96. void LEDRefresh_INT() interrupt 3 //using 3   
  97. {
  98.         static uint x=0;                  
  99.         static uchar flag=1;

  100.     TL1 = 0x00;      
  101.     TH1 = INTTime;               //0x50~0x80

  102.         if(flag)
  103.         {
  104.                 if(++x==0xFF)                         //MINOUTPUT
  105.                 {
  106.                         flag=0;               
  107.                 }               
  108.         }
  109.         else
  110.         {
  111.                 if(--x==0xCF)                 //MAXOUTPUT
  112.                 {
  113.                         flag=1;                       
  114.                 }
  115.         }                        
  116.         PWM0_set(x);                 //設(shè)置PWM占空比

  117.         BufToLED_Refresh();                        
  118. }  


  119. void Timer_INT()
  120. {
  121.         TMOD = 0x11; //高4位控制T/C1
  122.         EA = 1;             //開總中斷
  123.         TH1 = 0x00;  //16位計數(shù)寄存器T1高8位
  124.         TL1 = 0x00;  //16位計數(shù)寄存器T1低8位
  125.         ET1 = 1;     //T/C1中斷開
  126.     TR1 = 1;     //T/C1啟動

  127. }


  128. void FullScan()
  129. {
  130.         uchar data X=1;          
  131.         uchar data Y=1;

  132.          for(Y=1;Y!=0;Y<<=1)                       //Y=Y<<1;
  133.          {       
  134.                  P0=Y;
  135.                 for(X=1;X;X<<=1)                   //8bit
  136.                 {
  137.                          P2=X;
  138.                         Delays(7);       
  139.                 };

  140.                 P2=0;
  141.                 for(X=1;X<B(10000000);X<<=1)    //7bit
  142.                 {
  143.                          P3=X;
  144.                         Delays(7);
  145.                 };
  146.                 P3=0;
  147.                 P0=0;
  148.          }
  149. }


  150. void Main()
  151. {  
  152.         uint data Count=700;
  153.         uchar data i,Cgain,num=0;

  154.         IOINIT();
  155.         InitADC();                  

  156.         while(--Count)
  157.                 FullScan();

  158.         for(i=0;i<40;i++) refreshflag[i]=0x09;
  159.        
  160.         P14=0;                          //Beep
  161.         Delays(4000);
  162.         P14=1;

  163.         PWM_init();      //PWM初始化
  164.         PWM0_set(0xFB);
  165.        
  166.         Timer_INT();

  167.         for(i=0;i<34;i++)
  168.                 LEDBuf[i]=0x00;
  169.         FontDisp();

  170.         while(520)
  171.         {
  172.                 for(i=0;i<65;i++)
  173.                 {  
  174.                         dd[i].real=(GetADCResult(0)+GetADCResult(1))<<gain;          //讀取ad結(jié)果并放大;
  175.                 }

  176.                  processfft();//傅立葉變化及處理

  177.                  ///////////////////TouchKey//////////////////////////
  178.                  while(P16==1)                                           //依據(jù):脈沖 干擾持續(xù)時間短;
  179.                  {       
  180.                         if(CBeep)P14=0;
  181.                         if(++TouchKey>0x0000FF00)break;       
  182.                  }
  183.                  P14=1;

  184.                  if(P16==1)
  185.                  {
  186.                         if(++Menu==4)Menu=0;

  187.                         P14=0;
  188.                         P47=1;
  189.                         Delays(7000);          
  190.                         P14=1;
  191.                         P47=0;               
  192.                  }       
  193.                         TouchKey=0;
  194.                  //////////////////////////////////////////////

  195.                 if(P17==0)CBeep=!CBeep;

  196.                  if(dd[2].real<32)
  197.                  {
  198.                          if(++Count==300)          //電平值過小,這降低gain,減少噪音的電平顯示;
  199.                          {
  200.                                 Count=0;
  201.                                 //if(++Menu==4)Menu=0;                  //切換Menu,顯示方式;
  202.                                 gain=6;

  203.                                 P14=0;                          //Beep
  204.                                 Delays(1000);
  205.                                 P14=1;
  206.                          }
  207.                  }
  208.                  else
  209.                  {
  210.                          Count=1;
  211.        
  212.                          if(++num==0xAF)                         //播放時,Auto gain;
  213.                          {
  214.                                 num=0;

  215.                                 P14=0;                                   //Beep
  216.                                 Delays(700);
  217.                                 P14=1;
  218.                                                            //自動增益;Automatic gain;
  219.                                 Cgain=dd[2].real/32;
  220.                                 if(7<Cgain<=8)
  221.                                 {
  222.                                         gain=4;
  223.                                        
  224.                                 }
  225.                                 else if(4<Cgain<=6)
  226.                                 {
  227.                                         gain=5;
  228.                                        
  229.                                 }
  230.                                 else if(2<Cgain<=4)
  231.                                 {
  232.                                         gain=6;
  233.                                 }
  234.                                 else
  235.                                 {
  236.                                         gain=7;
  237.                        
  238.                                 }
  239.        
  240.                          }

  241.                   }                 
  242.         }
  243.         while(1);
  244. }


復(fù)制代碼



需要的拿走吧,請多多指教��!


DIY音樂頻譜顯示資料.zip

4.69 MB, 下載次數(shù): 1021, 下載積分: 黑幣 -5


作者: kid次    時間: 2013-12-3 22:46
51hei有你更精彩!!
作者: xieweihua12    時間: 2013-12-29 10:32
51hei電子論壇有你更精彩!�。。。。�!
作者: hkp110@163.com    時間: 2014-2-22 12:04

謝謝樓主分享
作者: fanamm    時間: 2014-4-20 17:01
好東西�。�!
作者: 漣漪    時間: 2014-4-28 17:02
這個很漂亮啊。感謝分享。
作者: kira999    時間: 2014-6-24 23:46
buc可以了。。不錯。
作者: 終無畏    時間: 2014-8-1 00:01
好東西
作者: 終無畏    時間: 2014-8-1 00:04
打不開也。。
作者: fslgh123    時間: 2014-8-28 16:23
謝謝分享。自己也想做一個
作者: sxf_snoopy    時間: 2014-9-11 15:20
贊贊贊
作者: tianxing    時間: 2014-10-14 17:21
下不了
作者: kit000137    時間: 2014-10-16 10:38
這東西 真心不錯哦
作者: jixiaobiao    時間: 2014-10-19 19:37
還可以吧
作者: 大頭菜    時間: 2014-10-28 22:26
好漂亮  學(xué)習(xí)一下
作者: szzheng    時間: 2014-11-20 12:34
謝謝分享
作者: 還在jl懂    時間: 2015-5-13 11:15
不錯,不錯
作者: 香蕉1373    時間: 2015-5-14 11:17
資料找不到啊,樓主分享下
作者: 路通    時間: 2015-5-19 22:36
謝謝分享,學(xué)習(xí)下
作者: 騰飛的龍    時間: 2015-7-23 11:54
我下載了怎么編譯不了�。�
作者: 騰飛的龍    時間: 2015-7-23 11:57
* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 0B2AH BYTE (139%) * ****************************************************************************** Program Size: data=132.0 xdata=537 code=4842 LINK/LOCATE RUN COMPLETE.  2 WARNING(S),  0 ERROR(S) *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS     SEGMENT: ?PR?_SHOWRESULT?PRJ *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS     SEGMENT: ?PR?INITUART?PRJ *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED     MODULE:  C:\KEIL\C51\LIB\C51L.LIB (-----)     LIMIT:   0800H BYTES Target not created
作者: 騰飛的龍    時間: 2015-7-23 11:58
編譯不通過?
作者: 電子diy    時間: 2015-7-26 14:02
怎么感覺反了
作者: zhihuiA    時間: 2015-7-30 13:26
這個好!謝謝分享
作者: lydjd    時間: 2015-7-30 19:32
很好看,挺有意思的。
作者: qqconsole    時間: 2015-8-3 22:50
讓我看看怎么樣啊,這個有點怪異
作者: fslgh123    時間: 2015-10-4 13:05
自己也想弄一個,下來學(xué)習(xí)學(xué)習(xí)。謝謝分享。
作者: Yx丷    時間: 2015-10-14 21:14
怎么不是和音樂同步的
作者: 邰夏留    時間: 2015-10-29 23:23
!�。。。。�!樓主。。。。。
那個原理圖網(wǎng)絡(luò)都沒標(biāo)記。根本看不明白啊
作者: ida    時間: 2015-11-6 14:53
謝謝樓主分享,嘻嘻
作者: xgw68868    時間: 2015-11-24 06:20
感謝分享,樓主好人呢
作者: 情劍無鋒    時間: 2015-11-27 21:34
不錯  我試過
作者: Alng_夜鷹    時間: 2015-11-27 22:35
感謝LZ拿走了��!
作者: 旭日青草    時間: 2015-11-28 12:36
學(xué)習(xí)學(xué)習(xí)哈
作者: FHL0307    時間: 2015-12-27 22:12
你的是不是反掉了
作者: nsj21n    時間: 2015-12-28 18:23
資料是非常好的,值得學(xué)習(xí),但是貌似和節(jié)奏慢了一點點。
作者: Creeper_San    時間: 2016-1-2 23:33
好東西�。�!
作者: 回憶失去    時間: 2016-1-6 12:02
先贊再下下來用用
作者: 回憶失去    時間: 2016-1-6 12:04
為什么我不加積分呢?我要積分�。�!
作者: yisisi1023    時間: 2016-1-11 15:55
里面有什么資料喔
作者: 小易    時間: 2016-4-13 14:22
借鑒下,謝謝樓主了
作者: apin123    時間: 2016-5-10 11:31
  if(dd[2].real<32)

247.                 {

248.                         if(++Count==300)          //電平值過小,這降低gain,減少噪音的電平顯示;

249.                         {

250.                                Count=0;

251.                                //if(++Menu==4)Menu=0;                  //切換Menu,顯示方式;

252.                                gain=6;

253.

254.                                P14=0;                          //Beep

255.                                Delays(1000);

256.                                P14=1;

257.                         }

258.                 }

259.                 else

260.                 {

261.                         Count=1;

262.        

263.                         if(++num==0xAF)                         //播放時,Auto gain;

264.                         {

265.                                num=0;

266.

267.                                P14=0;                                   //Beep

268.                                Delays(700);

269.                                P14=1;

270.                                                           //自動增益;Automatic gain;

271.                                Cgain=dd[2].real/32;

272.                                if(7<Cgain<=8)

273.                                {

274.                                        gain=4;

275.                                       

276.                                }

277.                                else if(4<Cgain<=6)

278.                                {

279.                                        gain=5;

280.                                       

281.                                }

282.                                else if(2<Cgain<=4)

283.                                {

284.                                        gain=6;

285.                                }

286.                                else

287.                                {

288.                                        gain=7;

289.                        

290.                                }

291.        

292.                         }

作者: apin123    時間: 2016-5-10 11:32
這部分是怎么實現(xiàn)的?那個num和count怎么實現(xiàn)?
作者: 家杰    時間: 2016-5-10 14:14
先謝了!
作者: 越快樂越墮落    時間: 2016-6-6 13:10
打不開啊 樓主
作者: 爛麻包    時間: 2016-6-13 18:23
感覺棒棒噠。。。。。
作者: tgyh    時間: 2016-6-14 00:10
感謝樓主分享學(xué)習(xí)中
作者: 如風(fēng)而過    時間: 2016-6-14 14:32
好東西,下載學(xué)習(xí)做一個
作者: woxinhengda    時間: 2016-6-25 20:34
新手 學(xué)習(xí) 學(xué)習(xí) 感謝
作者: woxinhengda    時間: 2016-6-25 22:05
學(xué)習(xí) 謝謝
作者: 越快樂越墮落    時間: 2016-6-30 11:45
打不開
作者: 小青春    時間: 2016-7-14 22:16
好東西         
作者: 李某某    時間: 2016-7-28 10:32
謝謝樓主
作者: wzx8023zy    時間: 2016-10-19 11:33
感謝樓主,太精彩了
作者: xinshouhehe    時間: 2016-10-19 22:35
謝謝樓主分享
作者: 東北那誰    時間: 2016-11-7 19:25
51hei電子論壇有你更精彩!�。。。。�!
作者: lemonack    時間: 2016-11-9 12:45
好像程序編譯有點問題
作者: danana2002    時間: 2016-11-15 10:20
好正想試試
作者: danana2002    時間: 2016-11-18 18:21
謝謝樓主分享
作者: jlj老者    時間: 2017-3-28 17:57
不錯不錯
作者: 愛月    時間: 2017-3-28 22:05
好東西,感謝分享!
作者: 張威威    時間: 2017-3-29 17:26
#在這里快速回好塞雷啊
作者: FGH116    時間: 2018-5-22 11:38
多謝,剛下了。論壇有你更精彩。
作者: 3478污鈔    時間: 2018-5-25 19:55
樓主啊,
在這個網(wǎng)站下載需要黑幣,
樓主能不能給個百度網(wǎng)盤鏈接呀?
作者: mzx1234    時間: 2018-5-30 11:20
好東西
作者: culn    時間: 2018-6-19 09:49
學(xué)習(xí)學(xué)習(xí)

作者: 2019--stop    時間: 2018-6-19 11:44
看著還不錯,課程設(shè)計可以用它
作者: 畢業(yè)生    時間: 2018-6-21 09:47
謝謝樓樓
作者: 1379310    時間: 2018-6-29 19:44
謝謝分享
作者: Neverizoe    時間: 2018-7-4 12:44
51hei電子論壇有你更精彩�。。。。。�
作者: 二十四橋明月夜    時間: 2018-7-5 10:19
謝謝分享
作者: xsj1877578806    時間: 2018-7-29 10:12
很好的東西,放音樂必備��!
作者: jz573079513    時間: 2018-8-17 11:04
好東西,謝謝
作者: xiaoxiao1122    時間: 2018-8-17 12:39
好東西,51有你更精彩
作者: 小黑屋@    時間: 2018-8-17 17:14
led焊接  工程量不小啊
作者: 釋你    時間: 2018-8-20 13:04
單片機用AT89C51的可以嗎?

作者: 新陵    時間: 2018-8-27 23:34
樓主,MAIN.H文件沒有啊
作者: sunnyw_wei    時間: 2018-9-24 19:51
感謝大佬
作者: 1545454    時間: 2018-9-29 12:32
下載收藏下,挺好好的
作者: 寧采塵    時間: 2018-10-9 15:12
試過,頻閃是怎么回事

作者: woxinhengda    時間: 2018-10-9 21:25
感謝分享 學(xué)習(xí)了
作者: woxinhengda    時間: 2018-10-9 21:27
感謝分享
作者: 快樂516    時間: 2018-11-17 15:48
謝謝樓主分享
作者: 快樂516    時間: 2018-11-20 15:29
謝謝分享。自己也想做一個
作者: pcwang    時間: 2018-11-21 08:17
非常好的資料。謝謝!
作者: liumeizhoufind7    時間: 2019-1-25 21:18
好東西  謝謝分享
作者: stolle    時間: 2019-4-22 04:28
完美的靈感和學(xué)習(xí)效果頁面。 我很驚訝于聰明才智。 好主意,堅持下去! 不幸的是,我不懂你的語言,我非常依賴翻譯。 但意志會放山。
作者: 827659311    時間: 2019-5-8 19:56

51hei有你更精彩��!
作者: 1580418512    時間: 2019-6-11 19:15
已經(jīng)下載保存,但是原理圖不夠完整
作者: zh68a11    時間: 2019-9-3 18:34
好東西!
作者: huaaaa    時間: 2019-9-28 11:23
51hei電子論壇有你更精彩
作者: ling7648    時間: 2019-9-30 14:16
謝謝分享!有時間仿制一個。
作者: 1033385755    時間: 2019-10-16 09:04
不錯不錯 學(xué)習(xí)一下
作者: 1860774xxxx    時間: 2019-11-13 07:47
先謝謝了
作者: 569134534    時間: 2019-11-18 16:23
有沒有按樓主教程制作完了的?能不能成功?
作者: 張元勇    時間: 2019-11-21 19:54
非常好
作者: zhaixing    時間: 2019-11-26 10:56
51hei電子論壇有你更精彩�。。。。。。�
作者: ycs89554171    時間: 2019-12-5 17:30
資料是非常好的,值得學(xué)習(xí)
作者: 魔菲音電子    時間: 2020-2-22 12:10
PCB沒有用,連線都沒有,原理圖也沒用,發(fā)資料希望能完整一點
作者: 鋼鐵憨憨    時間: 2020-3-1 22:41
無法打開文件“ src stc12c5a.h”,請問怎么解決




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1