📄 key.c
字号:
// 1/24MHz * 6 x 40000 = 10ms
#define TIME0 (65535-20000)
//#define OFF_TIME0 (65535-40000)
#define Key_Input LptDataIn
//Bit Key_Ready, Bass_Ready, Treble_Ready, Time0_Over;
//Bit Power_Off_Ready;
/*
void Off_Timer0_Start()
{
// 1/4 x 40000 = 10ms
TMOD &= 0xf0;
TMOD |= 0x01; // b'xxxx0001' : Timer0 = mode1, 16-bit counter
TH0 = TIME0/256;
TL0 = TIME0%256;
Time0 = 0;
TR0 = 1; // Timer0 start
ET0 = 1; // Timer0 interrupt enable
}
*/
/*
void Power_Off()
{
return;
Volume_Mute();
// Red_On();
// Delay_Sec(1);
// Red_Off();
Yellow_Off();
Power_Down();
}
*/
void Timer0_Start(Word time)
{
// 1/24MHz * 6 x 40000 = 10ms
Time0_Over=0;
Time0_Turn = time;
Time0 = 0;
TMOD &= 0xf0;
TMOD |= 0x01; // b'xxxx0001' : Timer0 = mode1, 16-bit timer
TH0 = TIME0/256;
TL0 = TIME0%256;
TR0 = 1; // Timer0 start
ET0 = 1; // Timer0 interrupt enable
}
IntTimer0() interrupt 1
{
Time0++;
if(Time0 == Time0_Turn) // 10ms x 50 = 0.5sec
{
Time0_Over = 1;
ET0 = 0; // Timer0 interrupt disable
return;
}
TH0 = TIME0/256;
TL0 = TIME0%256;
}
Bool Timer0_Check(Byte time)
{
if(Released)
{
Timer0_Start(time);
}
else if(Same_Key)
{
if(!Time0_Over) return(0);
Timer0_Start(time);
}
else return(0);
return(1);
}
void Init_Key()
{
// KeyScan = 0;
// FF_Cnt = 0;
// Key_Cnt = 0;
Key_Time = 0;
Key_Code = NONE_KEY;
Old_Key_Code = NONE_KEY;
Old_Key_Input = NONE_KEY;
Hold=0;
// Start_Power_Off_Time();
}
void File_Num_Inc()
{
// if(Total_Files==0) return;
// File_Num = (File_Num==Total_Files) ? 1 : File_Num+1;
NEXT_INC:
if(File_Num==Total_Files)
{
File_Num = 1;
if( (Key_Input|REPEAT_KEY) != REPEAT_KEY )
{
// if( (SystemStatus==STATUS_PLAY)&&(!RW_Enable)&&(!FF_Enable) )
if( (SystemStatus==STATUS_PLAY)&&(Old_Key_Code != RW_KEY)&&(Old_Key_Code != FF_KEY) )
{
Volume_Mute();
// File_Reset();
SystemStatus = STATUS_STOP;
// Start_Power_Off_Time();
Error = 1;
// return;
}
}
// Yellow_Off();
// Green_Light(3,1);
}
else File_Num++;
File_Reset();
if(!Is_MP3) goto NEXT_INC;
}
void File_Num_Dec()
{
NEXT_DEC:
// if(Total_Files==0) return;
File_Num = (File_Num==1) ? Total_Files : File_Num-1;
/*
if(File_Num==1)
{
Yellow_Off();
Red_Light(3,1);
}
else File_Num--;
*/
File_Reset();
if(!Is_MP3) goto NEXT_DEC;
}
void Poll_Key()
{
// Byte x;
// Byte i;
Byte key_input;
if(SystemStatus == STATUS_DOWNLOAD) return;
Old_Key_Code = Key_Code;
// Key_Code = Key_Input;
key_input = Key_Input|0xc0;
//Key testing
/* if(key_input!=NONE_KEY)
{
Red_Light(1,5);
for( i=0 ; i<8 ; i++)
{
x = 0x01<<i;
if( !(key_input&x) )
{
Yellow_Light(i, 2);
}
}
}
*/
if(key_input == Old_Key_Input)
{
Key_Time++;
if(Key_Time >= 20 )
{
Key_Code = key_input;
Key_Time = 0;
}
}
else
{
Old_Key_Input = key_input;
Key_Time = 0;
}
/*
temp_key_code = Key_Input;
temp_key_code = ~temp_key_code;
switch(temp_key_code)
{
// Key Definition
#define NONE_KEY 0xff // b'11111111' 0x00
#define PLAY_KEY 0xfe // b'11111110' 0x01
#define STOP_KEY 0xfd // b'11111101' 0x02
#define FF_KEY 0xfb // b'11111011' 0x04
#define RW_KEY 0xf7 // b'11110111' 0x08
#define BASS_KEY 0xef // b'11101111' 0x10
#define TREBLE_KEY 0xdf // b'11011111' 0x20
#define UP_KEY 0xbf // b'10111111' 0x40
#define DOWN_KEY 0x7f // b'01111111' 0x80
case 0xff: Key_Code = NONE_KEY; break;
case 0xff: Key_Code = NONE_KEY; break;
case 0xff: Key_Code = NONE_KEY; break;
case 0xff: Key_Code = NONE_KEY; break;
case 0xff: Key_Code = NONE_KEY; break;
case 0xff: Key_Code = NONE_KEY; break;
*/
Released = (Old_Key_Code==NONE_KEY)? 1 : 0;
Same_Key = (Old_Key_Code==Key_Code)? 1 : 0;
if(Hold)
{
if(Key_Code != BASS_KEY) return;
}
if(Key_Code != NONE_KEY) Power_Off_Time = 0;
switch(Key_Code)
{
case NONE_KEY:
if( (Power_Off_Time)&(Time0_Over) )
{
Red_Light(2,2);
Power_Off();
}
if(Same_Key) return;
switch(Old_Key_Code)
{
/*
case PLAY_KEY:
if(MP3_Files==0) return;
// VDD_On();
// Delay_100ms(1);
// Volume_Mute();
switch(SystemStatus)
{
case STATUS_STOP: // STOP -> PLAY
Status_Change(STATUS_PLAY);
break;
case STATUS_PLAY: // PLAY -> PAUSE
Status_Change(STATUS_PAUSE);
// VDD_Off();
break;
case STATUS_PAUSE: // PAUSE -> PLAY
Status_Change(STATUS_PLAY);
break;
default: break;
}
break;
*/
case RW_KEY:
if(MP3_Files==0) return;
if(SystemStatus==STATUS_PLAY)
{
if(!Time0_Over)
{
Volume_Mute();
File_Num_Dec();
MMU_Reset();
Play_Cnt=0;
}
}
break;
case FF_KEY:
if(MP3_Files==0) return;
if(SystemStatus==STATUS_PLAY)
{
if(!Time0_Over)
{
Volume_Mute();
File_Num_Inc();
MMU_Reset();
Play_Cnt=0;
}
}
break;
case BASS_KEY:
if(Hold_Changed)
{
Hold_Changed = 0;
return;
}
switch(EQ_Mode)
{
/*
case NORMAL_MODE: Bass_Up_Mode(); break;
case BASS_UP_MODE: Treble_Up_Mode(); break;
case TREBLE_UP_MODE: Bass_Treble_Up_Mode(); break;
case BASS_TREBLE_UP_MODE: Normal_Mode(); break;
default: break;
*/
case NORMAL_MODE: Set_EQ_Mode(BASS_UP_MODE); break;
case BASS_UP_MODE: Set_EQ_Mode(TREBLE_UP_MODE); break;
case TREBLE_UP_MODE: Set_EQ_Mode(BASS_TREBLE_UP_MODE); break;
case BASS_TREBLE_UP_MODE: Set_EQ_Mode(NORMAL_MODE); break;
default: break;
}
break;
default: break;
}
RW_Enable=0;
FF_Enable=0;
Time0_Over = 0;
if(SystemStatus != STATUS_PLAY) Start_Power_Off_Time();
break;
case PLAY_KEY:
// Green_Light(1,2);
/*
if(Released) Timer0_Start(250);
else if(Same_Key)
{
if(Time0_Over) Power_Off();
}
break;
*/
if(MP3_Files==0) return;
if(~Released) return;
// VDD_On();
// Delay_100ms(1);
// Volume_Mute();
switch(SystemStatus)
{
case STATUS_STOP: // STOP -> PLAY
Status_Change(STATUS_PLAY);
break;
case STATUS_PLAY: // PLAY -> PAUSE
Status_Change(STATUS_PAUSE);
// VDD_Off();
break;
case STATUS_PAUSE: // PAUSE -> PLAY
Status_Change(STATUS_PLAY);
break;
default: break;
}
break;
/*
case STOP_KEY:
if(Released)
{
Timer0_Start(200);
if(SystemStatus != STATUS_STOP)
{
Status_Change(STATUS_STOP);
}
}
else if(Same_Key)
{
if(Time0_Over) Power_Off();
}
break;
*/
case RW_KEY:
if(MP3_Files==0) return;
if(SystemStatus==STATUS_PLAY)
{
// if(Timer0_Check(100)) RW_Enable=1;
if(Released)
{
Timer0_Start(100);
}
else if(Same_Key)
{
if(Time0_Over)
{
RW_Enable=1;
}
}
}
else
{
if(!Timer0_Check(100)) return;
File_Num_Dec();
}
break;
case FF_KEY:
if(MP3_Files==0) return;
if(SystemStatus==STATUS_PLAY)
{
// if(Timer0_Check(100)) FF_Enable=1;
if(Released)
{
Timer0_Start(100);
}
else if(Same_Key)
{
if(Time0_Over)
{
FF_Enable=1;
}
}
}
else
{
if(!Timer0_Check(100)) return;
File_Num_Inc();
}
break;
case BASS_KEY:
if(Released) Timer0_Start(250);
else if(Same_Key)
{
if(Time0_Over)
{
// Yellow_Light(1, 3);
Hold = ~Hold;
Hold_Changed=1;
Time0_Over = 0;
}
}
/*
if(Released)
{
// Red_Light(3, 1);
switch(EQ_Mode)
{
case NORMAL_MODE: Bass_Up_Mode(); break;
case BASS_UP_MODE: Treble_Up_Mode(); break;
case TREBLE_UP_MODE: Bass_Treble_Up_Mode(); break;
case BASS_TREBLE_UP_MODE: Normal_Mode(); break;
default: break;
}
}
*/
break;
/*
case TREBLE_KEY:
break;
*/
/*
case BASS_KEY&UP_KEY:
if(Old_Key_Code==BASS_KEY) Released=1;
if(!Timer0_Check(50)) return;
if(Bass == MAX_BASS) return;
Bass++;
Bass_Adj();
break;
case BASS_KEY&DOWN_KEY:
if(Old_Key_Code==BASS_KEY) Released=1;
if(!Timer0_Check(50)) return;
if(Bass == 0) return;
Bass--;
Bass_Adj();
break;
*/
/*
case TREBLE_KEY&UP_KEY:
if(Old_Key_Code==TREBLE_KEY) Released=1;
if(!Timer0_Check()) return;
if(Treble == MAX_TREBLE) return;
Treble++;
Treble_Adj();
Poll_LCD();
break;
case TREBLE_KEY&DOWN_KEY:
if(Old_Key_Code==TREBLE_KEY) Released=1;
if(!Timer0_Check()) return;
if(Treble == 0) return;
Treble--;
Treble_Adj();
Poll_LCD();
break;
*/
case UP_KEY:
if(!Timer0_Check(30)) return;
if(Volume == MAX_VOLUME) return;
// if(Volume<20) Volume++;
Volume++;
// if(SystemStatus==STATUS_PLAY) Volume_Adj();
Volume_Adj();
break;
case DOWN_KEY:
if(!Timer0_Check(30)) return;
if(Volume == 0) return;
// if(Volume<=20) Volume--;
Volume--;
// if(SystemStatus==STATUS_PLAY) Volume_Adj();
Volume_Adj();
break;
default:
// Yellow_On();
// Yellow_Off();
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -