?? kbd_task.c
字號:
/*C**************************************************************************
* NAME: kbd_task.c
*----------------------------------------------------------------------------
* Copyright (c) 2006 Atmel.
*----------------------------------------------------------------------------
* RELEASE: C51 Sample
* REVISION: 1.00
*----------------------------------------------------------------------------
*
*****************************************************************************/
#include "system\reg51.h"
#include "system\compiler.h"
#include "system\config.h"
#include "driver\io_def.h"
#include "kbd_task.h" /* scheduler definition */
#include "driver\kbd_drv.h" /* kbd driver definition */
#include "dts_task.h" /* kbd driver definition */
static Byte kbd_state; /* keyboard task state */
/*F**************************************************************************
* NAME: kbd_task_init
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Keyboard task initialisation
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void kbd_task_init (void)
{
//kbd_state = KBD_IDLE; /*按鍵任務狀態(BYTE)*/
//gl_key_press = FALSE; /* 按鍵是否壓住標志?,no key pressed */
//gl_key = NO_KEY; /*按鍵值,初使狀態為空*/
kbd_init(); /* keyboard initialization */
}
/*F**************************************************************************
* NAME: ref_mode_task
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Mode task
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
* STATES:
* MODE_BOOT boot state
* MODE_DOWNLOAD file download mode
* MODE_SONG song playing mode
* MODE_VOICE voice playing & recording mode
* MODE_TOOL tool mode
* MODE_IDLE idle mode (switch back to first task)
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void ref_mode_task (void)
{
kbd_process();
//if((!MPOWER)&&(gl_key != KEY_MainPower)){
// ;
// }
//else {
switch(gl_key)
{
case KEY_BAND:
if(kbd_process()){
//P1_5 = ~P1_5;
if(vol_flag == High) break;
dts_AutoScan();
gl_key_repeat = TRUE;
gl_key = NO_KEY;
}
break;
case KEY_FF:
if(kbd_process()){
if(vol_flag == High) break;
if(CDPOWER){
if(!DtsMen_flag){ /* if the state is setp ,dec and inc */
dts_FerInc();
dts_GetFer();
disp_state = DISP_INIT;
gl_key_repeat = TRUE;
gl_key = NO_KEY;
}
else {
//Mem_add += 0x02;
dts_MemWriteFer();
}
}
}
break;
case KEY_FR:
if(kbd_process()){
//P1_5 = ~P1_5;
if(vol_flag == High) break;
dts_FerDec();
dts_GetFer();
disp_state = DISP_INIT;
gl_key_repeat = TRUE;
gl_key = NO_KEY;
}
break;
case KEY_MainPower:
if(kbd_process()){
MPOWER = ~MPOWER;
if(MPOWER) sch_scheduler_init();
vol_flag = Low;
disp_state = DISP_INIT;
gl_key_repeat = TRUE;
gl_key = NO_KEY;
}
break;
case KEY_VOL_INC:
if(gl_kbd_tick>KEY_LOOP){
if(vol_value<32){
vol_value++;
I2c_WriteByte (SC7313_ADD, VOL_Step_Map[vol_value]);
gl_kbd_tick = 0;
vol_tick = 0;
disp_state = DISP_INIT;
vol_flag = High;
}
}
if((vol_value == 32)&&(vol_flag == 0)){
vol_flag = High;
disp_state = DISP_INIT;
}
gl_key = NO_KEY;
break;
case KEY_VOL_DEC:
if(gl_kbd_tick>KEY_LOOP){
if(vol_value>0){
vol_value--;
I2c_WriteByte (SC7313_ADD, VOL_Step_Map[vol_value]);
gl_kbd_tick = 0;
vol_tick = 0;
disp_state = DISP_INIT;
vol_flag = High;
}
}
if((vol_value == 0)&&(vol_flag == 0)){
vol_flag = High;
disp_state = DISP_INIT;
}
gl_key = NO_KEY;
break;
case KEY_EQ_PROG:
if(kbd_process()){
if(vol_flag == High) break;
if(CDPOWER){
dts_MemReadFer();
}
gl_key_repeat = TRUE;
gl_key = NO_KEY;
}
break;
case KEY_ALBUM:
if(kbd_process()){
//P1_5 = ~P1_5;
if(vol_flag == High) break;
if(CDPOWER){
//dts_MemReadFer();
DtsMen_flag = ~DtsMen_flag;
disp_state = DISP_INIT;
}
gl_key_repeat = TRUE;
gl_key = NO_KEY;
}
break;
case KEY_CD:
if(kbd_process()){
CDPOWER = Low;
gl_key_repeat = TRUE;
gl_key = NO_KEY;
}
break;
case KEY_RADIO:
if(kbd_process()){
CDPOWER = High;
gl_key_repeat = TRUE;
gl_key = NO_KEY;
}
break;
case KEY_TAPE:
if(kbd_process()){
TAPE_POWER = ~TAPE_POWER;
gl_key_repeat = TRUE;
gl_key = NO_KEY;
}
break;
default : ;
}
//}
}
/*F**************************************************************************
* NAME: kbd_task
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Keyboard task
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void kbd_task (void) /*鍵盤時間間隔狀態判斷子程序*/
{
kbd_task_init();
//gl_key = kbd_decode(); /* 讀鍵盤鍵值,程序段在kbd_drv.c文件,read key pressed */
//if(gl_key != NO_KEY) {
if(kbd_decode()) {
DelayX1ms(8); /* 防抖動8mS */
}
if( kbd_decode()){
gl_key = kbd_decode(); /* Key value detect,return the key operation value */
}
else key_flag = Low;
ref_mode_task(); /* Key operation 處理*/
}
/*F**************************************************************************
* NAME: kbd_process
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Keyboard task
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit kbd_process (void) /*鍵盤時間間隔狀態判斷子程序*/
{
if((key_flag == Low)&&(gl_key_repeat == TRUE)){ /* KEY is up ,can not process */
gl_key_repeat = FALSE; /* key up, Clr key keep flag */
return(0);
}
if((key_flag == High)&&(gl_key_repeat == FALSE)){ /* KEY is keep ,can process */
return(1);
}
else return(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -