⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 mp3播放器
💻 C
字号:
#include "dp8051.h"
#include "config.h"
#include "absacc.h"
#include "constant.h"
#include "variable.h"
#include "function.h"
#include "sdhost.h"
#include "sssmp3_regs.h"
#include "fat.h"
#include "mp3_appl.h"
//***********************************************
#if KEY
/************************************************
函 数 名: Read_Key()
功    能:读键值
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
U8 Read_Key(void)
{
#if TAB_KEY
  U8 data i;
#if TX_DEBUG
  P1DIR &= ~(BIT1 | BIT2 | BIT3 | BIT4 | BIT6);
  P1 |= (BIT1 | BIT2 | BIT3 | BIT4 | BIT6);
  P1 &= ~(BIT3 | BIT4 | BIT6);
  P1DIR |= (BIT3 | BIT4 | BIT6);
  i = P1 & (BIT1 | BIT2);

  P1DIR &= ~(BIT1 | BIT2 | BIT3 | BIT4 | BIT6);
  P1 |= (BIT1 | BIT2 | BIT3 | BIT4 | BIT6);
  P1 &= ~(BIT1 | BIT2);
  P1DIR |= (BIT1 | BIT2);
  i |= P1 & (BIT3 | BIT4 | BIT6);
  P1DIR &= ~(BIT1 | BIT2 | BIT3 | BIT4 | BIT6);
#else
  P1DIR &= ~(BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6);
  P1 |= (BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6);
  P1 &= ~(BIT3 | BIT4 | BIT5 | BIT6);
  P1DIR |= (BIT3 | BIT4 | BIT5 | BIT6);
  i = P1 & (BIT1 | BIT2);

  P1DIR &= ~(BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6);
  P1 |= (BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6);
  P1 &= ~(BIT1 | BIT2);
  P1DIR |= (BIT1 | BIT2);
  i |= P1 & (BIT3 | BIT4 | BIT5 | BIT6);
  P1DIR &= ~(BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6);
#endif

  switch(i)
  {
#if TX_DEBUG
  case 0x1C:
    return PLAY_PAUSE_KEY;
  case 0x1A:
    return STOP_KEY;
  case 0x4C:
    return VOLUME_DOWN_KEY;
  case 0x4A:
    return VOLUME_UP_KEY;
  case 0x54:
    return EQ_KEY;
  case 0x52:
    return PLAY_MODE_KEY;
  case 0x5E:
    return NO_KEY;
#else
  case 0x3C:
    return PLAY_PAUSE_KEY;
  case 0x3A:
    return STOP_KEY;
  case 0x5C:
    return PREVOIUS_KEY;
  case 0x5A:
    return NEXT_KEY;
  case 0x6C:
    return VOLUME_DOWN_KEY;
  case 0x6A:
    return VOLUME_UP_KEY;
  case 0x74:
    return EQ_KEY;
  case 0x72:
    return PLAY_MODE_KEY;
  case 0x7E:
    return NO_KEY;
#endif
  default:
    return ERROR_KEY;
  }

#else
#if TX_DEBUG
  P1 |= BIT1 | BIT2 | BIT3 | BIT4 | BIT6;
  P1_1 = 0;
  P1DIR &= ~(BIT2 | BIT3 | BIT4 | BIT6);
  P1DIR |= BIT1;
  if(!P1_3)
    return EQ_KEY;
  else if(!P1_4)
    return VOLUME_DOWN_KEY;
  else if(!P1_6)
    return PLAY_PAUSE_KEY;
  else
  {
    P1 |= BIT1 | BIT2 | BIT3 | BIT4 | BIT6;
	P1_2 = 0;
	P1DIR &= ~(BIT1 | BIT3 | BIT4 | BIT6);
	P1DIR |= BIT2;
	if(!P1_3)
	  return PLAY_MODE_KEY;
	else if(!P1_4)
      return VOLUME_UP_KEY;
	else if(!P1_6)
	  return STOP_KEY;
	else
	{
	  P1 |= BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6;
	  P1DIR &= ~(BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6);
      return NO_KEY;
	}
  }
#else
  P1 |= BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6;
  P1_1 = 0;
  P1DIR &= ~(BIT2 | BIT3 | BIT4 | BIT5 | BIT6);
  P1DIR |= BIT1;
  if(!P1_3)
    return EQ_KEY;
  else if(!P1_4)
    return VOLUME_DOWN_KEY;
  else if(!P1_5)
    return PREVOIUS_KEY;
  else if(!P1_6)
    return PLAY_PAUSE_KEY;
  else
  {
    P1 |= BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6;
	P1_2 = 0;
	P1DIR &= ~(BIT1 | BIT3 | BIT4 | BIT5 | BIT6);
	P1DIR |= BIT2;
	if(!P1_3)
	  return PLAY_MODE_KEY;
	else if(!P1_4)
      return VOLUME_UP_KEY;
	else if(!P1_5)
	  return NEXT_KEY;
	else if(!P1_6)
	  return STOP_KEY;
	else
	{
	  P1 |= BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6;
	  P1DIR &= ~(BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6);
      return NO_KEY;
	}
  }
#endif
#endif
}
/************************************************
函 数 名: GetKey()
功    能:按键扫描
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void GetKey(void)
{
  switch(varAl.fKeyTone)
  {
  case 0:
    varAl.UsrChartmp = Read_Key();
#if TAB_KEY
	if(varAl.UsrChartmp && (varAl.UsrChartmp != ERROR_KEY))
#else
    if(varAl.UsrChartmp)
#endif
	{
	  varAl.fKeyTone++;
	}
    break;
  case 1:
    if(varAl.UsrChartmp == Read_Key())
	{
	  switch(varAl.UsrChartmp)
	  {
	  case PLAY_PAUSE_KEY:
        varAl.SysKey = PALY_PAUSE_VALUE;
        break;
	  case NEXT_KEY:
        varAl.SysKey = NEXT_VALUE;
        break;
	  case PREVOIUS_KEY:
        varAl.SysKey = PREVIOUS_VALUE;
        break;
	  case VOLUME_UP_KEY:
#if TX_DEBUG
        varAl.SysKey = NEXT_VALUE;
#else
        varAl.SysKey = VOLUME_UP_VALUE;
#endif
        break;
	  case VOLUME_DOWN_KEY:
#if TX_DEBUG
        varAl.SysKey = PREVIOUS_VALUE;
#else
        varAl.SysKey = VOLUME_DOWN_VALUE;
#endif
        break;
	  case PLAY_MODE_KEY:
        varAl.SysKey = PLAY_MODE_VALUE;
        break;
	  case STOP_KEY:
        varAl.SysKey = STOP_VALUE;
        break;
	  case EQ_KEY:
        varAl.SysKey = EQ_VALUE;
        break;
	  default:
		varAl.SysKey = NO_VALUE;
        break;
	  }
	  varAl.fKeyTone++;
	}
	else
      varAl.fKeyTone = 0;
    break;
  case 2:
    if(Read_Key() == NO_KEY)
	  varAl.fKeyTone++;
    break;
  case 3:
    if(Read_Key() == NO_KEY)
	  varAl.fKeyTone = 0;
    break;
  default:
    varAl.fKeyTone = 0;
    break;
  }
}
/************************************************
函 数 名: KeyDeal()
功    能:按键处理
说    明:
调    用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void KeyDeal(void)
{
  switch(varAl.SysKey)
  {
  case PALY_PAUSE_VALUE: //MP3 play or pause
    if((!allow_mp3_play) && (varAl.CardDetected == 1))
	{
	  allow_mp3_play = 1;
	}
	else
	{

	  varAl.SystemFlag ^= PLAY_PAUSE_FLAG;
	  if(varAl.SystemFlag & PLAY_PAUSE_FLAG)
	  { 
        MP3_CTL |= (MP3_PAUSE | MUTE);//Pause Music  
        CLASS_D_DAC_CTL |= (SUSPEND | PAUSE);//Mute & Suspend Class-D, 
      }
 	  else
	  {     
        MP3_CTL &= ~(MP3_PAUSE | MUTE);//Resume to play Music 
        CLASS_D_DAC_CTL &= ~(SUSPEND | PAUSE);//Dis-Mute & Resume Class-D, 
      }
	}
    break;
  case NEXT_VALUE: //MP3 next
	mp3_play_status = MP3_NEXT;
    break;
  case PREVIOUS_VALUE://MP3 previous
    mp3_play_status = MP3_PREVIOUS;
    break;
  case VOLUME_UP_VALUE://MP3 VolumnUp
    if(CLASS_D_VOL_CTL == 0x06)
	{
	  if(MP3_VOLUME < 0x1F)
	    MP3_VOLUME++;
	  else
	   CLASS_D_VOL_CTL--; 
	}
	else
	{
	  if(CLASS_D_VOL_CTL)
	    CLASS_D_VOL_CTL--;
	}
    break;
  case VOLUME_DOWN_VALUE://MP3 VolumnDown
    if(CLASS_D_VOL_CTL == 0x06)
	{
	  if(MP3_VOLUME)
	    MP3_VOLUME--;
	  else
	    CLASS_D_VOL_CTL++;
	}
	else
	{
	  if(CLASS_D_VOL_CTL < 0x3E)
	    CLASS_D_VOL_CTL++;
	}
    break;
  case PLAY_MODE_VALUE://play mode select
	MP3_MusicPlayMode();
    break;
  case STOP_VALUE://stop
    MP3_PrevInit();
    allow_mp3_play = 0;
	mp3_play_status = MP3_IDEL;
    break;
  case EQ_VALUE:
    if((!allow_mp3_play) && (varAl.CardDetected == 1))
	{
	  allow_mp3_play = 1;
	}
    break;
  default:
    mp3_play_status = MP3_IDEL;
    break;
  }
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -