51单片机利用旋转编码器并通过M62429L调节音量
时间:10-02
整理:3721RD
点击:
请大家看看这个51单片机利用旋转编码器并通过M62429L调节音量的程序,哪个地方有问题?
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit M429CK=P2^1;
sbit M429DA=P2^2;
sbit PINA=P2^3;
sbit PINB=P2^4;
uchar i,a,Temp1,Temp2;
code uchar Volume_H[]={0xA8,0xA8,0xA8,0xA8,0x88,
0x88,0x88,0x88,0xB0,0xB0,0xB0,0xB0,0x90,0x90,0x90,
0x90,0xA0,0xA0,0xA0,0xA0,0x80,0x80,0x80,0x80,0xBC,
0xBC,0xBC,0xBC,0x9C,0x9C,0x9C,0x9C};
code uchar Volume_L[]={0xF8,0xB8,0xD8,0x98,0xF8,
0xB8,0xD8,0x98,0xF8,0xB8,0xD8,0x98,0xF8,0xB8,0xD8,
0x98,0xF8,0xB8,0xD8,0x98,0xF8,0xB8,0xD8,0x98,0x78,
0x38,0x58,0x18,0x78,0x38,0x58,0x18};
void delay(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
void Volset()
{
Temp1=Volume_H[a];
M429CK=0;
for(i=0;i<6;i++)
{
M429DA=Temp1&0x80;
M429CK=1;
delay(100);
M429DA=0;
M429CK=0;
Temp1=Temp1<<1;
}
Temp2=Volume_L[a];
M429CK=0;
for(i=0;i<4;i++)
{
M429DA=Temp2&0x80;
M429CK=1;
delay(100);
M429DA=0;
M429CK=0;
Temp2=Temp2<<1;
}
M429DA=1;
M429CK=1;
delay(100);
M429CK=0;
delay(2000);
}
void scan_encoder(void)
{
static bit Curr_encoder_b;
static bit Last_encoder_b;
Last_encoder_b = PINB;
while(!PINA)
Curr_encoder_b = PINB;
if( (Last_encoder_b==0)&&(Curr_encoder_b==1) )
{
a=a++;
if(a>30)
a=30;
Volset();
}
else if( (Last_encoder_b==1)&&(Curr_encoder_b==0) )
{
a=a--;
if(a<0)
a=0;
Volset();
}
}
void main()
{
M429CK=1;
M429DA=1;
Volset();
while(1)
{
scan_encoder();
}
}
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit M429CK=P2^1;
sbit M429DA=P2^2;
sbit PINA=P2^3;
sbit PINB=P2^4;
uchar i,a,Temp1,Temp2;
code uchar Volume_H[]={0xA8,0xA8,0xA8,0xA8,0x88,
0x88,0x88,0x88,0xB0,0xB0,0xB0,0xB0,0x90,0x90,0x90,
0x90,0xA0,0xA0,0xA0,0xA0,0x80,0x80,0x80,0x80,0xBC,
0xBC,0xBC,0xBC,0x9C,0x9C,0x9C,0x9C};
code uchar Volume_L[]={0xF8,0xB8,0xD8,0x98,0xF8,
0xB8,0xD8,0x98,0xF8,0xB8,0xD8,0x98,0xF8,0xB8,0xD8,
0x98,0xF8,0xB8,0xD8,0x98,0xF8,0xB8,0xD8,0x98,0x78,
0x38,0x58,0x18,0x78,0x38,0x58,0x18};
void delay(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
void Volset()
{
Temp1=Volume_H[a];
M429CK=0;
for(i=0;i<6;i++)
{
M429DA=Temp1&0x80;
M429CK=1;
delay(100);
M429DA=0;
M429CK=0;
Temp1=Temp1<<1;
}
Temp2=Volume_L[a];
M429CK=0;
for(i=0;i<4;i++)
{
M429DA=Temp2&0x80;
M429CK=1;
delay(100);
M429DA=0;
M429CK=0;
Temp2=Temp2<<1;
}
M429DA=1;
M429CK=1;
delay(100);
M429CK=0;
delay(2000);
}
void scan_encoder(void)
{
static bit Curr_encoder_b;
static bit Last_encoder_b;
Last_encoder_b = PINB;
while(!PINA)
Curr_encoder_b = PINB;
if( (Last_encoder_b==0)&&(Curr_encoder_b==1) )
{
a=a++;
if(a>30)
a=30;
Volset();
}
else if( (Last_encoder_b==1)&&(Curr_encoder_b==0) )
{
a=a--;
if(a<0)
a=0;
Volset();
}
}
void main()
{
M429CK=1;
M429DA=1;
Volset();
while(1)
{
scan_encoder();
}
}
谢谢分享,一个旋转编码器估计都比51单片机贵了。
这个程序不能改变音量,能看出哪里错了吗?
如果有示波器的话,用示波器看看时序对不对。
示波器的话,,,,但我尝试过给M62429一个声源,然后看波形图有没有随着旋转编码器的转动而改变,结果没有
小编,你这个编码器控制音量的工程做的怎么样了?