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

📄 key.c

📁 瑞萨的DOME板LIN主从节点程序调试通过可以使用
💻 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 + -