怎样用LM3914制作的大功率LED音乐频谱显示器器

后使用快捷导航没有帐号?
来自ValentinRuhry的创意,这哥们用整整500
[MK]---手把手教你用51单片机DIY音乐频谱显示
本帖最后由 mk晴空 于
22:06 编辑
各位喜欢听歌的朋友们有福了,音乐频谱显示让你在听歌的同时感受动感的视觉享受。
好吧,本制作来自网友,借用一下。送给各位电子爱好者,自己动手让你的生活更加丰富多彩!!!
视频演示效果在下面,大家可以看一下,超炫!!!
(395.8 KB, 下载次数: 65)
17:02 上传
(218.79 KB, 下载次数: 55)
17:02 上传
(321.5 KB, 下载次数: 61)
17:03 上传
(236.57 KB, 下载次数: 46)
17:03 上传
(365.14 KB, 下载次数: 51)
17:03 上传
(448.33 KB, 下载次数: 49)
17:03 上传
17:10 上传
点击文件名下载附件
下载积分: 下载币 -5
2.24 MB, 下载次数: 275, 下载积分: 下载币 -5
17:21 上传
点击文件名下载附件
下载积分: 下载币 -5
131.28 KB, 下载次数: 169, 下载积分: 下载币 -5
这个可以有
好炫啊!楼主这板子是多少乘多少的呢?赞个,收藏起来
这个是你自已做的?
很不错的教程 ,不知楼主熟悉其中原理没
有原理,有实物,这个必须顶啊!
谢谢分享 支持截图收藏了
支持截图收藏了
个人的风格的热议的热炎热的幼儿园而已
牛叉。。。。。。。
顶一下又不会怀孕。。。。。。。。。。
各位公众号用户,您好!
您可关注DIY之家最新的
“电子DIY社区”
微信公众订阅号,查看最新动态!
还没转移公众号的用户,请抓紧,最新活动正在进行中~~
直接扫描下方二维码
即可关注最新“电子DIY社区”微信公众号
Copyright &
Powered by查看: 13097|回复: 110
用51单片机做的音乐频谱显示器
注意按键一定要离单片机很近,触摸按键最怕有干扰
030152sqj831kqyyvqdjhe.jpg (32.77 KB, 下载次数: 87)
03:25 上传
iwy6b37u1bvwgm.jpg (63.75 KB, 下载次数: 70)
03:25 上传
eyatbltzjb86j.jpg (58.54 KB, 下载次数: 68)
03:25 上传
ypv3hdodseeio.jpg (56.31 KB, 下载次数: 59)
03:25 上传
iawti9vbtx0ta.jpg (79.12 KB, 下载次数: 62)
03:25 上传
030153hyq9l3bszcmqqcoy.jpg (38.23 KB, 下载次数: 62)
03:25 上传
030154crh8rb8wnd4dd3f1.jpg (31.42 KB, 下载次数: 57)
03:25 上传
dsjv1qr9nrf14.jpg (43.32 KB, 下载次数: 62)
03:25 上传
030154dtjr1bhh1huvjmrs.jpg (40.16 KB, 下载次数: 70)
03:25 上传
030154uhbz81ebity0f5cn.jpg (63.16 KB, 下载次数: 68)
03:25 上传
030154sdz397i37f2vf8kk.jpg (74.09 KB, 下载次数: 71)
03:25 上传
030154qadqtjsukaussxus.jpg (56.78 KB, 下载次数: 67)
03:25 上传
q1l02q2on7m2n.jpg (54.71 KB, 下载次数: 56)
03:25 上传
制作资料下载:
(4.69 MB, 下载次数: 2744)
03:28 上传
点击文件名下载附件
下载积分: 黑币 -5
 下面是主函数的源代码:完整的可到楼主的贴中下载
#include "src\STC12C5A.h"
#include &intrins.h>
//51基本运算(包括_nop_空函数)
#include &math.h>
#include "src\Define.h"
///////全局变量///////
uchar data DelayTime=9;
//&=8效果最好;
uchar data INTTime=0x40;
uchar data gain=6;
uchar data Menu=2;
uchar idata refreshflag[40];
data LEDBuf[35];
//15列;从左到右;亮的位为真(1);
data TouchKey=0;
uchar data CBeep=0;
//////////////////////
void Delays(uint t)
while(--t)
for(j=0;j&5;j++);
void Delaysms(uint t)
while(--t)
for(j=0;j&15;j++);
#include "src\ADC.c"
#include "src\Font.c"
#include "src\fft.h"
void PWM_init (void)
//PWM初始化函数
//PWM模式,接P1.3接口(PWM0),强上拉.
CMOD=0x00;
//设置PCA定时器
0x00~0x03;
CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式()
CCAP0L=0xEF; //设置PWM0初始值与CCAP0H相同
CCAP0H=0xFF; // PWM0初始时为0
//启动PCA定时器
void PWM0_set (uchar set)
//PWM0占空比设置函数 (0x00~0xFF)
CCAP0L= //设置值写入CCAP0L
CCAP0H= //设置值写入CCAP0H
void IOINIT(void)
//I/O强上拉模式;
//启动I/O:P4;
P4M1 = B(); P4M0 = B();P47=0;//震动马达;
P0M1 = 0x00;
P0=0; //点阵列(Y)(L:OFF; H,H+:ON,ON+;)
P1M1 = B(); P1M0 = B();P1=B(); //(P17@(高阻,IN)&P16@(高阻,IN);TouchKey) ... P14@(传统IO,Beep,IN) P13@(强推,OUT)呼吸灯 ... P11@(高阻,IN)AD2;P10@(高阻,IN)AD1;
P2M1 = B(); P2M0 = B();P2=0; //点阵行(X0(Left))(L:OFF; H,H+:ON,ON+;)
P3M1 = B(); P3M0 = B();P3=0; //点阵行(X1(Right))(L:OFF; H,H+:ON,ON+;)
P1ASF =B();
//将P10,P11的IO设置为模拟输入功能;
---------------------→
// [L:X0(P2):H][L:X1(P3):H]
//TestCode:
// P0=B();
// P2=B();
// P3=B();
void BufToLED_Refresh()
//Refresh&Write Buf to LED ;
uchar data X=1;
uchar data Y=1;
for(X=1,i=2;X;X&&=1,i+=2)
//for(X=1;X!=0;X&&=1) //8bit
for(Y=1;Y!=0;Y&&=1)
P0=Y&LEDBuf[i];
Delays(DelayTime);
for(X=1;X&B();X&&=1,i+=2)
for(Y=1;Y!=0;Y&&=1)
P0=Y&LEDBuf[i];
Delays(DelayTime);
void LEDRefresh_INT() interrupt 3 //using 3
static uint x=0;
static uchar flag=1;
TL1 = 0x00;
TH1 = INTT
//0x50~0x80
if(++x==0xFF)
//MINOUTPUT
if(--x==0xCF)
//MAXOUTPUT
PWM0_set(x);
//设置PWM占空比
BufToLED_Refresh();
void Timer_INT()
TMOD = 0x11; //高4位控制T/C1
//开总中断
TH1 = 0x00;
//16位计数寄存器T1高8位
TL1 = 0x00;
//16位计数寄存器T1低8位
//T/C1中断开
//T/C1启动
void FullScan()
uchar data X=1;
uchar data Y=1;
for(Y=1;Y!=0;Y&&=1)
for(X=1;X;X&&=1)
Delays(7);
for(X=1;X&B();X&&=1)
Delays(7);
void Main()
uint data Count=700;
uchar data i,Cgain,num=0;
InitADC();
while(--Count)
FullScan();
for(i=0;i&40;i++) refreshflag[i]=0x09;
Delays(4000);
PWM_init();
//PWM初始化
PWM0_set(0xFB);
Timer_INT();
for(i=0;i&34;i++)
LEDBuf[i]=0x00;
FontDisp();
while(520)
for(i=0;i&65;i++)
dd[i].real=(GetADCResult(0)+GetADCResult(1))&&
//读取ad结果并放大;
processfft();//傅立叶变化及处理
///////////////////TouchKey//////////////////////////
while(P16==1)
//依据:脉冲 干扰持续时间短;
if(CBeep)P14=0;
if(++TouchKey>0x0000FF00)
if(P16==1)
if(++Menu==4)Menu=0;
Delays(7000);
TouchKey=0;
//////////////////////////////////////////////
if(P17==0)CBeep=!CB
if(dd[2].real&32)
if(++Count==300)
//电平值过小,这降低gain,减少噪音的电平显示;
//if(++Menu==4)Menu=0;
//切换Menu,显示方式;
Delays(1000);
if(++num==0xAF)
//播放时,Auto gain;
Delays(700);
//自动增益;A
Cgain=dd[2].real/32;
if(7&Cgain&=8)
else if(4&Cgain&=6)
else if(2&Cgain&=4)
 PRJ.C(299): error C249: 'DATA': SEGMENT TOO LARGE&&
keil4 的工程文件呢
貌似要焊到手抽~~
看看,,程序齐的吧
谢谢分享~~~~~~~~~~
很强啊,楼主
有套件卖吗?我要
真帅!!!
程序 还需要修改吗??按照你 套件我也做了一套&&烧出来没反应
看看学习学习。。
手都要掉了
keil4 的工程文件呢
同二楼问题相同
怎么没见效果图?
有做成功的吗?
我顶,向楼主学习。
下面是主函数的源代码:完整的可到楼主的贴中下载
#include &src\STC12C5A.h&& & & & & & & &&&
很好&&学习&&谢谢
好东西.谢谢
恩恩,下载来自己做做
谢楼主分享啊。。
正想学习学习。
放个视频出来更好
 支持一下~谢谢分享
Powered by}

我要回帖

更多关于 led大功率灯珠 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信