?? key.c
字號:
/****************************************************************/
/* 項目名稱 : R8C/23 CAN/LIN Demo Board */
/* : 樣例程序1 */
/* : 人機接口 */
/* 硬件環境 : R0K521237C000BB */
/* MCU型號 : R5F21237JFP */
/* C編譯器 : NC30WA,版本5.30.r02及以上 */
/* 文件名 : Key.c */
/* 功能簡介 : 鍵盤掃描和鍵功能 */
/* 版本 : 1.0 */
/* 作者 : 閆雋 */
/* 修訂歷史 : */
/* 修訂者 時間 版本 說明 */
/* 閆雋 2006/9/11 1.0 初版發行 */
/* */
/****************************************************************/
/* Copyright, 2006 RENESAS TECHNOLOGY CORPORATION & */
/* RENESAS SOLUTIONS CORPORATION */
/****************************************************************/
#include "..\inc\Comdef_r823.h"
#include "..\inc\Main.h"
#include "..\inc\Disp.h"
#include "..\inc\Misc.h"
#include "..\inc\Key.h"
uchar8 ucKey_temp;
uchar8 ucKey_ID;
uchar8 ucKey_delay_counter;
uchar8 ucFlag_backlight;
void vKey_exe( uchar8, uchar8 );
void vKey_read( void );
/*------------------------------------------------------
名稱 : vKey_exe
功能 : 響應鍵盤操作
入口 : ucMenu_ID, ucKey_ID
出口 : ucCursor_M1, ucCursor_M2, ucFlag_backlight, ucFlag_buzzer
調用 : vMisc_beep_100ms
寄存器 : P2.7, P3.0
------------------------------------------------------*/
void vKey_exe( uchar8 ucMenu, uchar8 ucKey )
{
switch ( ucMenu )
{
case ( HOME ):
switch ( ucKey )
{
case ( KI0 ):
case ( KI1 ):
case ( KI2 ):
case ( KI3 ):
// 進入下級菜單,初始化下級菜單的光標行號
ucCursor_M1 = 0;
break;
default: break;
}
break;
case ( M1_1 ): // 功能選擇界面 -- 選中第1行
case ( M1_2 ): // 功能選擇界面 -- 選中第2行
case ( M1_3 ): // 功能選擇界面 -- 選中第3行
switch ( ucKey )
{
case ( KI0 ): // 回車鍵
// 進入下級菜單,初始化下級菜單的光標行號
ucCursor_M2 = 0;
break;
case ( KI1 ): // 下方向鍵
if ( ucCursor_M1 < 2 )
{
ucCursor_M1 += 1;
}
else
{
}
break;
case ( KI2 ): // 上方向鍵
if ( ucCursor_M1 > 0 )
{
ucCursor_M1 -= 1;
}
else
{
}
break;
case ( KI3 ): // 返回鍵
// 返回上級菜單,復位本級菜單光標至首行
ucCursor_M1 = 0;
break;
default: break;
}
break;
case ( M2_1 ): // 背光開關界面
switch ( ucKey )
{
case ( KI0 ): // 回車鍵
if ( ucFlag_backlight == ON )
{
BKL_OFF;
ucFlag_backlight = OFF;
}
else
{
BKL_ON;
ucFlag_backlight = ON;
}
break;
case ( KI3 ):
// 返回上級菜單,復位本級菜單光標至首行
ucCursor_M2 = 0;
break;
default: break;
}
break;
case ( M2_2 ): // 按鍵聲音界面
switch ( ucKey )
{
case ( KI0 ): // 回車鍵
if ( ucFlag_buzzer == ON )
{
ucFlag_buzzer = OFF;
}
else
{
ucFlag_buzzer = ON;
}
break;
case ( KI3 ):
// 返回上級菜單,復位本級菜單光標至首行
ucCursor_M2 = 0;
break;
default: break;
}
break;
case ( M2_3 ):
break;
default: break;
}
}
/*------------------------------------------------------
名稱 : vKey_read
功能 : 掃描鍵盤,去掉抖動,識別操作意圖
入口 : P1
出口 : ucKey_ID, ucKey_temp, ucKey_delay_counter
調用 : 無
寄存器 : 無
------------------------------------------------------*/
void vKey_read( void )
{
if ( ucKey_temp == ( p1 & (uchar8)0x0f ))
{// 等待期間狀態未變
if ( ucKey_delay_counter < KEY_DELAY )
{
ucKey_delay_counter ++;
}
else if ( ucKey_delay_counter == KEY_DELAY ) // 等待10 * 10 = 100 ms
{// 等待期間狀態無變化,判斷為有鍵按下,計算鍵值
switch ( ucKey_temp )
{
case ( 0x0e ):
ucKey_ID = KI0;
break;
case ( 0x0d ):
ucKey_ID = KI1;
break;
case ( 0x0b ):
ucKey_ID = KI2;
break;
case ( 0x07 ):
ucKey_ID = KI3;
break;
default:
ucKey_ID = NO_KEY;
break;
}
ucKey_delay_counter ++;
}
else
{// 短按和長按時,忽略
ucKey_ID = NO_KEY;
}
}
else
{// 等待期間狀態有變化,判為干擾
ucKey_temp = ( p1 & (uchar8)0x0f );
ucKey_delay_counter = 0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -