{
vol+=0X0101 //音量减
sendvol(vol)//音量输出
应该是vol-=0X0101 //音量减
吧
这是修改以后的程序
#include <reg52.h>//包括一个52标准内核的头文件
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
sbit cs=P2^0 //片选
sbit volbit=P2^1//音量位数据
sbit clk=P2^2 //时钟
sbit war=P2^3 //极限警告输出
unsigned int vol
void warn()
void sendvol(uint vol)
void delay(uint t)
void voldown()
void volup()
void volup() //音量加
{
if (vol==0Xffff) //判断是否达到最大音量
{
warn() //警报
}
if(vol <0Xffff)
{
vol+=0X0101//增加音量
sendvol(vol)//输出音量
}
}
void voldown() //音量减
{
if(vol >0x0000) //判断是否达到最小音量
{
vol-=0X0101 //音量减
sendvol(vol)//音量输出
}
else
warn()//警报
}
void sendvol(uint vol) //输出音量
{
uchar i
cs=0//片选
for(i=16i>0i--) //发送16bit音量数据
{
clk=0
if(vol&0X0001==0x0001)
{
volbit=1
}
else
{
volbit=0
}
clk=1
vol>>=1//右移一位
}
cs=1
volbit=1
}
void warn() //警报
{
war=0
delay(100)
war=1
delay(100)
war=0
}
void main() // 主程序
{
vol=0X0f0f
EX0=1//开外中断
IT0=0//外中断低电平变产生中断
EX1=1
IT1=0
EA=1//打开总中断
sendvol(0xffff)
while(1) //主程序循环
{
}
}
//外中断0
void int0() interrupt 0
{
EA=0
volup()//声音加
delay(500)
EA=1
}
//外中断1
void int1() interrupt 2
{
EA=0
voldown()//声音减
delay(500)
EA=1
}
//延时
void delay(uint t)
{
uchar i
for (tt>0t--)
{
for (i=200i>0i--)
}
}
只要控制部分的程序很简单的,可以先发出来,电路图暂时没法发出来,截图看不清……#include <reg52.h>//包括一个52标准内核的头文件
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
sbit cs=P2^0 //片选
sbit volbit=P2^1//音量位数据
sbit clk=P2^2 //时钟
sbit war=P2^3 //极限警告输出
unsigned int vol
void warn()
void sendvol(uint vol)
void delay(uint t)
void voldown()
void volup()
void volup() //音量加
{
if (vol==0Xffff) //判断是否达到最大音量
{
warn() //警报
}
if(vol <0Xffff)
{
vol+=0X0101//增加音量
sendvol(vol)//输出音量
}
}
void voldown() //音量减
{
if(vol >0x0000) //判断是否达到最小音量
{
vol-=0X0101 //音量减
sendvol(vol)//音量输出
}
else
warn()//警报
}
void sendvol(uint vol) //输出音量
{
uchar i
cs=0//片选
for(i=16i>0i--) //发送16bit音量数据
{
clk=0
if(vol&0X0001==0x0001)
{
volbit=1
}
else
{
volbit=0
}
clk=1
vol>>=1//右移一位
}
cs=1
volbit=1
}
void warn() //警报
{
war=0
delay(100)
war=1
delay(100)
war=0
}
void main() // 主程序
{
vol=0X7f7f
EX0=1//开外中断
IT0=0//外中断低电平变产生中断
EX1=1
IT1=0
EA=1//打开总中断
sendvol(0xffff)
while(1) //主程序循环
{
}
}
//外中断0
void int0() interrupt 0
{
EA=0
volup()//声音加
delay(500)
EA=1
}
//外中断1
void int1() interrupt 2
{
EA=0
voldown()//声音减
delay(500)
EA=1
}
//延时
void delay(uint t)
{
uchar i
for (tt>0t--)
{
for (i=200i>0i--)
}
}
可能是前级放大电路问题。原因可能如下:
1、供应前级电路的直流电是否正常,是否纯净,可以用示波器看看你直流输出波形。
2、检查你的前级放大电路偶合输入和偶合输出电容是否变质,只能逐一更换试效果。
3、检查你前级功放的地线是否有串信号,是否为一点接地,音频地和电源地分开接地。
4、前级功放电路周边是否有电磁干扰源存在,前级放大的芯片更换。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)