中断程序(单片机控制PGA2310)

中断程序(单片机控制PGA2310),第1张

if(vol) //判断是否达到最小音量

{

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、前级功放电路周边是否有电磁干扰源存在,前级放大的芯片更换。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11125808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存