📄 key.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 + -