单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2907|回复: 4
打印 上一主题 下一主题
收起左侧

迷你音乐频谱显示器制作

[复制链接]
跳转到指定楼层
楼主
刚参考一些资料,做的一个音乐频谱,供大家参考



全部资料下载:
迷你音乐频谱显示.rar (1.8 MB, 下载次数: 49)

部分源码预览:
  1. /********************************************************************************************
  2. 程序名:    迷你音乐频谱显示器
  3. 编写人:   
  4. 编写时间:  
  5. 硬件支持:  2个8*8点阵  STC12C5A60S2 外部32.768MHz晶振
  6. 接口说明:  见说明文档 
  7. *********************************************************************************************/
  8. #include "src\STC12C5A.h"                 
  9. #include <intrins.h>    //51基本运算(包括_nop_空函数)
  10. #include <math.h>
  11. #include "src\Define.h"
  12. ///////全局变量///////
  13. uchar data DelayTime=10;
  14. uchar data INTTime=0x45;
  15. uchar data gain=1;
  16. uchar data Menu=0;
  17. uchar idata  refreshflag[40];
  18. //////////////////////
  19. void Delays(uint t)
  20. {  
  21.         uint j;
  22.         while(--t)
  23.                 for(j=0;j<5;j++);   
  24. }
  25. uchar data LEDBuf[35];                         //15列;从左到右;亮的位为真(1);
  26. #include "src\ADC.c"
  27. #include "src\fft.h"
  28. #include "src\LED168D.h"

  29. void LIOINIT( )
  30. {
  31.         P4SW = 0xff;                                  //启动I/O:P4;

  32.         P0M1 = 0x00;            P0M0 = 0xff;          //I/O强上拉模式;
  33.         P1M1 = B(00000001);        P1M0 = B(11111110);   //P10(光敏电阻:AD:高阻或开漏)
  34.         P4M1 = 0x00;             P4M0 = 0xff;        
  35.         P2M1 = B(00000000); P2M0 = B(11111001);   //P21,P20(强上拉);P22(传统IO);
  36.         P3M1 = 0x00;               P3M0 = 0xff;          //!!!

  37.         P0 = 0xff;                                          //初始化;
  38.         P1 = B(11111110);
  39.         P4 = 0xff;
  40.         P2 = B(11111100);
  41.         P3 = 0xff;       
  42.         ////////////////////////////////
  43.         P04=0;P26=0;  //LY;
  44.         P01=0;P45=0;
  45.         P06=0;P24=0;
  46.         P00=0;P46=0;
  47.         P15=0;P34=0;
  48.         P07=0;P23=0;
  49.         P13=0;P32=0;
  50.         P47=0;P37=0;
  51.         ////////////////////////////////
  52.         P14=1; P33=1;  //LX0; //LX1;
  53.         P02=1; P44=1;         
  54.         P03=1; P27=1;         
  55.         P17=1; P36=1;         
  56.         P05=1; P25=1;         
  57.         P16=1; P35=1;         
  58.         P12=1; P31=1;         
  59.         P11=1; P30=1;                        
  60. }

  61. //////////////////////////////////////////////////////
  62. void LEDRefresh() interrupt 3 //using 3   
  63. {
  64.     TL1 = 0x00;      
  65.     TH1 = INTTime;   //0x50~0x80 //0x6A
  66.         BuftoLED168_Refresh();
  67. }  
  68. /////////////////////////////////////////////////////

  69. /*SFR中与定时/计数器工作方式有关的设计]
  70. -----------------------------------------------------------------------------
  71. M1        M0        方式        说明
  72. 0        0        0        13位T/C,由TL低5位和TH的8位组成13位计数器
  73. 0        1        1        16位T/C,TL和TH共16位计数器
  74. 1        0        2        8位T/C,TL用于计数,当TL溢出时将TH中的值自动写入TL
  75. 1        1        3        两组8位T/C
  76. -----------------------------------------------------------------------------
  77. */
  78. void Timer_INT()
  79. {
  80.         TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
  81.         EA = 1;        //中断总开关

  82.         TH1 = 0x00; //16位计数寄存器T1高8位(写入初值)
  83.         TL1 = 0x00; //16位计数寄存器T1低8位
  84.         ET1 = 1; //T/C1中断开关
  85.     TR1 = 1; //T/C1启动开关
  86. }

  87. void Main()
  88. {  
  89.         uint data Count=700;
  90.         uchar data i,Cgain,LED=0,num=0;
  91.         LIOINIT();          //I/O强上拉模式
  92.         InitADC();    //Init ADC sfr         
  93.         for(i=0;i<40;i++) refreshflag[i]=0x09;
  94.         P20=0;                  //LED负极
  95.         Timer_INT();  //定时器初始化
  96.         while(1)
  97.         {
  98.                 for(i=0;i<65;i++)
  99.                 {  
  100.                         dd[i].real=(GetADCResult(0))<<gain;
  101.                         dd[i].imag=0; //清零虚部
  102.                 }
  103.                  processfft();//傅立叶变化及处理
  104.                  LED=!LED;
  105.                  if(dd[2].real<32)
  106.                  {
  107.                          LED=1;
  108.                  }
  109.                  else
  110.                  {
  111.                          Count=1;
  112.                          if(++num==0xAF)                                 //播放时,Auto gain;
  113.                          {
  114.                                 num=0;

  115.                                 P2M0 = B(11111011);
  116.                                 P21=1;                          //LED正极
  117.                                 Delays(2000);
  118.                                 P21=0;                         //LED正极
  119.                                 P2M0 = B(11111001);

  120.                                 //自动增益;Automatic gain;
  121.                                 Cgain=dd[2].real/32;
  122.                                 if(7<Cgain<=8)
  123.                                 {
  124.                                         gain=2;
  125.                                        
  126.                                 }
  127.                                 else if(4<Cgain<=6)
  128.                                 {
  129.                                         gain=3;               
  130.                                 }
  131.                                 else if(2<Cgain<=4)
  132.                                 {
  133.                                         gain=4;
  134.                                 }
  135.                                 else
  136.                                 {
  137.                                         gain=5;
  138.                                 }
  139.                          }
  140.                   }

  141.                   P21=LED;         //LED正极         
  142.         }
  143. }
  144. /*****************************************************************************/
  145. //
  146. /*****************************************************************************/

复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

5#
13756176595 发表于 2017-5-12 17:59 | 只看该作者
怎么我接完了,一个也不亮,求大神
回复

使用道具 举报

地板
 楼主| wzx8023zy 发表于 2016-12-14 14:46 | 只看该作者
bxyyhan 发表于 2016-12-14 11:56
你说的是这个东西吧。

嗯,差不多
回复

使用道具 举报

板凳
bxyyhan 发表于 2016-12-14 11:56 | 只看该作者
你说的是这个东西吧。

20161214115625.jpg (78.83 KB, 下载次数: 48)

20161214115625.jpg

20161214115450.jpg (69.76 KB, 下载次数: 41)

20161214115450.jpg

20161214115258.jpg (112.66 KB, 下载次数: 47)

20161214115258.jpg

20161214115322.jpg (97.29 KB, 下载次数: 39)

20161214115322.jpg
回复

使用道具 举报

沙发
cyc 发表于 2016-12-14 11:08 | 只看该作者
6666楼主厉害啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

快速回复 返回顶部 返回列表