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