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

📄 kbd_task.c

📁 PLL的资料文档,包括资料
💻 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 + -