请尊重原创,引用本文发表者,请注明出处.
作者:彬
联系电话:15914326550
qq:243280383 870035775
邮箱: 870035775@QQ.COM
博客: http://blog.sina.com.cn/vision243280383
基于单片机的多通道切换双音道音量控制 8级别 (2008-09-14 17:17:57)
本人非常支持单片机设计DIY 在这里再次献出小弟的一点心意,下面是使用AT89S52驱动74HC4015,实现1选择8的数据通道切换器,可以在不8个通道出加上不同大小的电阻.可以用来单声道音量的大小控制.
下面作品图是小弟设计的廉价的 基于单片机的毕业设计 ,它还使用了无线接收发送模块,通过使用手上的遥控器能控制音量的大小,还加了一块HCF4052用于输入音道的选择,支持思路音频信号的输入,一路音频信号的输出:
作品简介:该作品支持三路音量信号的输入,经遥控控制切换后输出.音量被分为8个级别的音量大小,通过遥控器能控制音量在这8个级别之中切换,从而控制音量大小.
作品作用:可以同时把收音机 电脑 MP3 等三路音频信号同时输入机器中,使用手上的遥控器就能在这三路音频信号中切换,并且控制音量.
下面是此作品单声道功能的原代码:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
uchar code DB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //
void DelayMs(unsigned int number) //延时函数 延时1 MS ???????????????????????
{
unsigned char temp;
for(;number!=0;number--)
{
for(temp=488;temp!=0;temp--) ;
}
}
uchar Key() //键盘扫描子程序
{ uchar KValue;
P1|=0xff; //将P1口的接键盘的位置1
KValue=P1;
KValue|=0x00; //将未接键的位置1
if(KValue==0xff) //
return(0); //返回
DelayMs(20); //延时10ms,去键抖
KValue=P1;
KValue|=0x00; //将未接键的位置1
if(KValue==0xff) //位均为1,无键按下
return(0); //返回
//如尚未返回,说明一定有1或更多位被按下
//去掉了等待按键释放的检验因为希望能一直按住按键能连续的控制音量
return(KValue); //返回按键值
}
Keyplay(uchar key) // 按键值 处理函数
{ uchar password;
if (( key&0x08)==0) // 按键值位3时的处理
password=3;
if (( key&0x04)==0) // 按键值位2时的处理
password=2;
if (( key&0x02)==0)
password=1;
if (( key&0x01)==0) // 按键值位0时的处理
password=0;
return password; //返回输入的按键值
}
void Voi_4015(uchar voi,uchar channel)
{ uchar i ,j ;
if ( (channel==1)| (channel==0))
{ i=voi|0xf8;j=voi&0x07;
P2=P2&i; P2=P2|j;
}
}
void main ()
{ uchar i=4, channel=0,cound=0, key;
P2=0x
Voi_4015(2,0);
P0=DB[i];
while(1)
{ key=Key();
if(key)
{
switch ( Keyplay(key) )
{ case 0: i++ ;if(i>7) i=7;
P0=DB[i];Voi_4015(i,channel); //升音
channel=0;DelayMs(600); break;
case 1: i--; if(i>7) i=0;
P0=DB[i];Voi_4015(i,channel); //降音
channel=0;DelayMs(600); break; //要对某通道独自控制时 需要 按键2或者3 + 按键0或者按键1
case 2: channel=1; cound=1; break;
case 3: channel=2; break;
}
if(cound==1) //要在按键2 后紧跟着有按键3 才有效 进行 静音操作
{ if( Keyplay(key)==3 )
{ Voi_4015(0,0); channel=0; cound=0; }
}
}
}
}