最近在写一个用单片机控制音量程序,写的过程中遇到些问题,我还是新手。希望高手门一起来帮我看看。
目的:
1.单片机连接到音量控制电路的其中一个可以用线性电压控制音量大小的端口(音频电路图中的SPKSW端口)
2.由于51单片机不能直接输出线性电压,所以让我想到了PWM控制电压量。
问题:
1.不知道选择多大频率的PWM信号好;
2.写程序的时候发现不能修改TH0、TL0的赋值。
音频电路:
[localimg=613,470]1[/localimg]
程序:(好简单的程序,高手们不要笑哦。。。。。。)
#include<reg52.h>
sbit PWM_Out =P1^5;
sbit Key_down=P1^1;
sbit Key_up =P1^0;
unsigned char x=0;
unsigned char Pwm_value=53;
void delay_1ms(unsigned char z)
{
unsigned char i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
TMOD=0x11;
TH0=(65536-30)/256;
TL0=(65536-30)%256;
TH1=(65536-50)/256;
TL1=(65536-50)%256;
EA=1;
ET1=1;
ET0=1;
TR0=1;
TR1=1;
while(1)
{
if(Key_down==0)
{
delay_1ms(5);
if(Key_down==0)
{
Pwm_value=Pwm_value-100;
if(Pwm_value<=0)
{Pwm_value=0;}
while(!Key_down);
}
}
if(Key_up==0)
{
delay_1ms(5);
if(Key_up==0)
{
Pwm_value=Pwm_value+100;
if(Pwm_value>=65536)
{Pwm_value=0;}
while(!Key_up);
}
}
}
}
void PWM_timer0() interrupt 1
{
TH0=(65536-30)/256;
TL0=(65536-30)%256;
PWM_Out=0;
}
void PWM_timer1() interrupt 3
{
TH0=(65536-Pwm_value)/256;
TL0=(65536-Pwm_value)%256;
PWM_Out=1;
}
按键操作,不能改变PWM输出的高电平占空比哦!!!!!!!!!!! |