微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机利用旋转编码器并通过M62429L调节音量

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();
    }
}

谢谢分享,一个旋转编码器估计都比51单片机贵了。

这个程序不能改变音量,能看出哪里错了吗?

如果有示波器的话,用示波器看看时序对不对。

示波器的话,,,,但我尝试过给M62429一个声源,然后看波形图有没有随着旋转编码器的转动而改变,结果没有

小编,你这个编码器控制音量的工程做的怎么样了?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top