这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » ysjabcd的功放DIY进程贴(更新 更新红外遥控功能)

共7条 1/1 1 跳转至

ysjabcd的功放DIY进程贴(更新 更新红外遥控功能)

院士
2015-03-17 15:17:22     打赏

1、年前下的单,年后3.17日收到快件

2、更新制作水晶音箱。

3、3.19日完成焊接,测试,成功。

4、4月24日完成按键程序控制音量,上传代码。

5、5月14日完成红外遥控功能,上传代码。

年前下的单,经过了漫长的春节等待,前天收到了板子,先来个全家福!

2、先把等板子期间做的水晶音箱给大家晒晒。这是以前淘的哈曼卡顿 1.5寸全频水晶喇叭,合6块钱一个,据说此喇叭用在哈曼卡顿1000元以上的2.1音箱上,性价比极佳。寻思把它做成音箱来测试将来的功放。


这么晶晶亮的喇叭当然要给他配个晶晶亮的音箱,音箱首选亚克力材质,又漂亮又方便加工。于是乎,单位的几个没用的桌牌被我没收了。。。。

工欲善其事,必先利其器。下面是我的凶器全家福。。。不,利器!


首先,把板子裁成想要的大小,用裁纸刀在板子上划几下,然后用力猛掰!!!!,掰下后用磨石把利脚磨平。至于尺寸,我也没设计,大约是7*7*12cm


然后掏孔,用40的打孔器,花了我15块钱,奸商太黑!


然后用直径3mm的钻在面板上钻两个上螺丝的小孔,用来连接喇叭与面板。为了美观,继续用直径6mm的钻头扩孔,方便把螺丝做成沉头。



接下来的活需要沉下心来,把各部分板子预组合在一起,配合起来的缝隙,有凸出的地方就用磨石磨掉,然后用502胶水粘在一起,不用担心粘不住,事实证明,502是很结实的。

把屁股上钻上一个洞,用来引出音箱线。然后把喇叭装上。

在测试喇叭没问题后,把棺材盖合上。。。

为了让这对小音箱及时发挥热量,我给它加了一个8403的小功放板,5V供电,又用剩下的边角料给小功放变搭了个窝。为防止功放板损坏后无法更换,小窝做成开口式的。



功放板上加个翠绿的LED,晚上开起来美轮美奂。。。。


This is all ,  Think you!




关键词: 功放     水晶音箱    

院士
2015-03-17 17:53:57     打赏
2楼
那东西不好搞啊,稍有不慎就乱了,而且这个大小的音箱音质还没到那么讲究的地步

院士
2015-03-17 21:17:43     打赏
3楼
不是耳放,前级是耳放,后机是功率放大器,最大15W+15W

院士
2015-03-18 12:08:51     打赏
4楼
猿粪呐,我也是考虑了几种情形才决定这样做的

院士
2015-03-19 20:51:37     打赏
5楼
3、开始焊接,先展示下我的放静电手环,网上买的宝工牌的。

焊接时没有拍照的习惯,直接上焊好的样子

上电测试,指示灯正常

接上我的水晶音箱测试,OK!


上个测试视频http://v.youku.com/v_show/id_XOTE1NDk4NzUy.html





院士
2015-04-25 17:50:07     打赏
6楼

借用了论坛里给出的模块,先把按键调通了,为了方便大家看,没用模块化编程,都在一个大程序里,直接贴上来了。

#include<reg52.h>
#include<intrins.h>
#define UINT8 unsigned char    

sbit LED = P1^5;   //指示灯 
sbit IR_INT0 = P3^2;     //红外   
//调音按键  
sbit KEY_SUB = P1^2;  
sbit KEY_ADD = P1^3;  
sbit KEY_MUTE = P1^1;  
  
sbit CHECK = P1^0; //检测音频线有没有接入  
  
sbit MUTE = P1^4;     //功放静音  

  //MCU调音量  
sbit CLOCK = P3^3;  
sbit UPDOWN = P3^6;    
//还有几个全局变量,主要是存功放和按键状态的  
unsigned char uup=0;    //有连续按键时用  
unsigned char IRtimer;//  
unsigned char phonejack = 1;//    //有没有音频线状态  
unsigned char MUTEstate = 0;    //MUTE状态  

void Delay1ms() //@11.0592MHz
{
unsigned char i, j;

_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
//控制音量加   
void Volume_add(void)  
{//  
    UINT8 iadd = 5;  
    UPDOWN = 1;  
    while(--iadd)  
        Delay1ms();  
    CLOCK = 0;  
    iadd = 5;  
    while(--iadd)  
        Delay1ms();  
    CLOCK = 1;  
}  
  
  
// 控制音量减  
  void Volume_sub(void)  
  {  
    UINT8 isub = 5;  
      UPDOWN = 0;  
      while(--isub)  
        Delay1ms();  
      CLOCK = 0;  
      isub = 5;  
      while(--isub)  
        Delay1ms();  
      CLOCK = 1;  
  }  

void flash_LED(UINT8 a)
{
LED = 0;
while(a--)
{ Delay1ms(); }
LED = 1;


//关于按键,软件上一定要做延时处理  
//下面是给大家一个延时的方法,高手请略过;  
void Scan_key(void)  
{  
    int loop;  
    if(KEY_SUB == 0)  
        {LED = 1;  
            loop = 10;  
            while((KEY_SUB == 0) && (loop >0))  
                {--loop;Delay1ms();}  
            if(KEY_SUB == 0)  
                {  
                    Volume_sub();  
               //     u_sstr("-1\n\r");  
                  flash_LED(20); 
                      
                    loop = 1500;  
                    while((KEY_SUB == 0) && (loop >0))  
                        {--loop;Delay1ms();}  
           
                }  
            while(KEY_SUB == 0)  
                {  
                    Volume_sub();  
              //      u_sstr("-1\n\r");  
                    flash_LED(20);;  
                    loop = 200;  
                    while((KEY_SUB == 0) && (loop >0))  
                        {--loop;Delay1ms();}  
                }  
                      
        }  
  
    if(KEY_ADD == 0)  
        {LED = 1;  
        loop = 10;  
        while((KEY_ADD == 0) && (loop >0))  
            {--loop;Delay1ms();}  
        if(KEY_ADD == 0)  
            {  
                Volume_add();  
              //  u_sstr("+1\n\r");  
                flash_LED(20);  
                  
                loop = 1500;  
                while((KEY_ADD == 0) && (loop >0))  
                    {--loop;Delay1ms();}  
                  
            }
        while(KEY_ADD == 0)  
            {  
                Volume_add();  
              //  u_sstr("+1\n\r");  
                flash_LED(20);  
                loop = 200;  
                while((KEY_ADD == 0) && (loop >0))  
                    {--loop;Delay1ms();}  
            }                       
        }  
  
        if(KEY_MUTE == 0)  
        {     
            LED = 1;  
            loop = 10;  
            while((KEY_MUTE == 0) && (loop >0))  
            {--loop;Delay1ms();}  
             if(KEY_MUTE == 0)
{   
                 if(MUTEstate == 1)  
                 {  
                    MUTEstate = 0;  
//                    MUTE = 0;  
                 //  u_sstr("MUTE\n\r");  
                  }  
                  else   
                  {  
                    MUTEstate = 1;  
 //                   MUTE = 1;  
                  //  u_sstr("CLOSE MUTE\n\r");  
                   }  
                flash_LED(20);  
  }
            while(KEY_MUTE==0);               
        }
}  

void checkphone(void) 

    if(CHECK == 0)  //没有耳机插入  
        {  
                MUTE = 1;  
                phonejack = 0;  //没有耳机  
        }  
   else    //有耳机  
        {  
  
  if(phonejack == 0)  
                {  
                   flash_LED(20); 
                }                  
  phonejack = 1;
            if(MUTEstate == 1)  
                {  
                    MUTE = 1;  
                }  
            else   
                {  
                    MUTE = 0;  
                }   
        } 
}
void main()
{
while(1)
{
checkphone();
Scan_key();
}
}


院士
2015-05-15 19:20:19     打赏
7楼

实现了遥控控制音量大小、静音等功能


视频地址:http://player.youku.com/player.php/sid/XOTU2MzYwODMy/v.swf

源代码仍然延续之前的方式添加。

#include<reg52.h>
#include<intrins.h>
#define UINT8 unsigned char    

sbit LED = P1^5;   //指示灯 
sbit IR_INT0 = P3^2;     //红外   
//调音按键  
sbit KEY_SUB = P1^2;  
sbit KEY_ADD = P1^3;  
sbit KEY_MUTE = P1^1;  
  
sbit CHECK = P1^0; //检测音频线有没有接入  
  
sbit MUTE = P1^4;     //功放静音  

  //MCU调音量  
sbit CLOCK = P3^3;  
sbit UPDOWN = P3^6;    
//还有几个全局变量,主要是存功放和按键状态的  
unsigned char uup=0;    //有连续按键时用  
unsigned char IRtimer;//  
unsigned char phonejack = 1;//    //有没有音频线状态  
unsigned char MUTEstate = 0;    //MUTE状态  
UINT8 IRCOM[7];//红外数组
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;

_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
//控制音量加   
void Volume_add(void)  
{//  
    UINT8 iadd = 5;  
    UPDOWN = 1;  
    while(--iadd)  
        Delay1ms();  
    CLOCK = 0;  
    iadd = 5;  
    while(--iadd)  
        Delay1ms();  
    CLOCK = 1;  
}  
  
  
// 控制音量减  
  void Volume_sub(void)  
  {  
    UINT8 isub = 5;  
      UPDOWN = 0;  
      while(--isub)  
        Delay1ms();  
      CLOCK = 0;  
      isub = 5;  
      while(--isub)  
        Delay1ms();  
      CLOCK = 1;  
  }  

void flash_LED(UINT8 a)
{
LED = 0;
while(a--)
{ Delay1ms(); }
LED = 1;


//关于按键,软件上一定要做延时处理  
//下面是给大家一个延时的方法,高手请略过;  
void Scan_key(void)  
{  
    int loop;  
    if(KEY_SUB == 0)  
        {LED = 1;  
            loop = 10;  
            while((KEY_SUB == 0) && (loop >0))  
                {--loop;Delay1ms();}  
            if(KEY_SUB == 0)  
                {  
                    Volume_sub();  
               //     u_sstr("-1\n\r");  
                  flash_LED(20); 
                      
                    loop = 1500;  
                    while((KEY_SUB == 0) && (loop >0))  
                        {--loop;Delay1ms();}  
           
                }  
            while(KEY_SUB == 0)  
                {  
                    Volume_sub();  
              //      u_sstr("-1\n\r");  
                    flash_LED(20);;  
                    loop = 200;  
                    while((KEY_SUB == 0) && (loop >0))  
                        {--loop;Delay1ms();}  
                }  
                      
        }  
  
    if(KEY_ADD == 0)  
        {LED = 1;  
        loop = 10;  
        while((KEY_ADD == 0) && (loop >0))  
            {--loop;Delay1ms();}  
        if(KEY_ADD == 0)  
            {  
                Volume_add();  
              //  u_sstr("+1\n\r");  
                flash_LED(20);  
                  
                loop = 1500;  
                while((KEY_ADD == 0) && (loop >0))  
                    {--loop;Delay1ms();}  
                  
            }
        while(KEY_ADD == 0)  
            {  
                Volume_add();  
              //  u_sstr("+1\n\r");  
                flash_LED(20);  
                loop = 200;  
                while((KEY_ADD == 0) && (loop >0))  
                    {--loop;Delay1ms();}  
            }                       
        }  
  
        if(KEY_MUTE == 0)  
        {     
            LED = 1;  
            loop = 10;  
            while((KEY_MUTE == 0) && (loop >0))  
            {--loop;Delay1ms();}  
             if(KEY_MUTE == 0)
{   
                 if(MUTEstate == 1)  
                 {  
                    MUTEstate = 0;  
//                    MUTE = 0;  
                 //  u_sstr("MUTE\n\r");  
                  }  
                  else   
                  {  
                    MUTEstate = 1;  
 //                   MUTE = 1;  
                  //  u_sstr("CLOSE MUTE\n\r");  
                   }  
                flash_LED(20);  
  }
            while(KEY_MUTE==0);               
        }
}  

void checkphone(void) 

    if(CHECK == 0)  //没有耳机插入  
        {  
                MUTE = 1;  
                phonejack = 0;  //没有耳机  
        }  
   else    //有耳机  
        {  
  
  if(phonejack == 0)  
                {  
                   flash_LED(20); 
                }                  
  phonejack = 1;
            if(MUTEstate == 1)  
                {  
                    MUTE = 1;  
                }  
            else   
                {  
                    MUTE = 0;  
                }   
        } 
}
void init()
{
EA=1;    //开总中断
EX0=1; //开外部中断0
IT0=0;               //外部中断1设为低电平触发
}
void delayhw(unsigned char x)    //x*0.14MS 红外延时 此延时适于11.0592,STC15系列单片机,如换单片机,需改延时。
{
unsigned char i, j;

i = 2;
j = 126;
do
{
while (--j);
} while (--i);
}
  
void main()
{
init();
while(1)
{
checkphone();
Scan_key();
}
}
void exter0() interrupt 0
{
     unsigned char j,k,N=0;
     EX0 = 0;   
// delayhw(15);
if (IR_INT0==1) 
     { EX0 =1; 
  return;
 } 
                            
while (!IR_INT0)   //确认IR信号出现   //等IR变为高电平,跳过9ms的前导低电平信号。
    {delayhw(1);}

for (j=0;j<4;j++)         //收集四组数据

for (k=0;k<8;k++)        //每组数据有8位
{
  while (IR_INT0)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
  {delayhw(1);}
  while (!IR_INT0)          //等 IR 变为高电平
  {delayhw(1);}
  while (IR_INT0)           //计算IR高电平时长
  {
   delayhw(1);
   N++;           
   if (N>=30)
{ EX0=1;
 return;}                  //0.14ms计数过长自动离开。
   }                       //高电平计数完毕                
   IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
   if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
   N=0;  

}
     
   if (IRCOM[2]!=~IRCOM[3])
   { EX0=0;
     return; }

if(IRCOM[2]==0x19)
{
flash_LED(20); 
Volume_add();
}    

if(IRCOM[2]==0x16)
{
flash_LED(20);
Volume_sub();
}
 
if(IRCOM[2]==0x47)
{
flash_LED(20);
MUTEstate = !MUTEstate;
}
 
     EX0 = 1;
return;
}




共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]