- 积分
- 64
- 在线时间
- 51 小时
- 最后登录
- 2010-8-2
- 阅读权限
- 50
- 精华
- 0
 
- UID
- 52959
- 帖子
- 55
- 精华
- 0
- 经验
- 64 点
- 金钱
- 64 ¥
- 注册时间
- 2008-9-2
|
搞了好几天,实在不知道我写的这个写函数到底有什么地方错了。它就是无法控制音量。请大哥们指点指点。看看什么地方错了,或者有更好的写法的话告诉小弟一声。不胜感激。
void WRITE(int a,int b,int c) //a为音量控制字,比如值为40,b为音调中的低音控制字,比如值为+5,c为音调控制中的高音控制字
{
int x=0; //保存各声道待传的数据
int tone=0,v=0; //tone为音调控制字,v为音量控制字。
int temp;
c=c<<12;
b=b<<4;
if((n=1)||(n=0)) //n为模式,模式为2.0直通模式或者2.1声道模式的时候关音调控制
tone=0x0004;
else
tone=b|c;
CS=1;
delay(); //CS为片选线,SCK为时钟线,MOSI为数据线
CS=0;
delay();
for(temp=16;temp>0;temp--) //该for为传送音调控制字
{
MOSI=(bit)(tone&0x8000);
SCK=0;
delay();
SCK=1;
tone=tone<<1;
;
}
delay();
CS=1;
delay();
CS=0;
DELAY(5);
v=a<<9; //前置两声道音量控制字的合成
a=a<<2;
v=v|a;
x=v|0x0001;
CS=1;
delay();
CS=0;
for(temp=0;temp<16;temp++) //传送前置两声道的音量控制字
{
MOSI=(bit)(x&0x8000);
delay();
SCK=0;
delay();
SCK=1;
x=x<<1;
delay();
}
CS=1;
delay();
CS=0;
DELAY(5);
if(n==3) //当为模式3时(5.1声道模式),后置两声道开,否则送80使衰减无穷大,即静音
x=v|2;
else x=0x5052;
CS=1;
delay();
CS=0;
for(temp=0;temp<16;temp++)
{
MOSI=(bit)(x&0x8000);
delay();
SCK=0;
delay();
SCK=1;
x=x<<1;
delay();
}
CS=1;
delay();
CS=0;
DELAY(5);
if(n==3) //当为模式3时(5.1声道模式),中置和低音两声道开,否则送80使衰减无穷大,即静音
x=v|0x0003;
else x=0x5053;
CS=1;
delay();
CS=0;
for(temp=0;temp<16;temp++)
{
MOSI=(bit)(x&0x8000);
delay();
SCK=0;
delay();
SCK=1;
x=x<<1;
delay();
}
CS=1;
delay();
CS=0;
}
另附M62446AFP PDF:http://www.datasheet5.com/datasheet_pdf/EIVEYHYIVHGA |
|