📄 sys_keyboard.c
字号:
/****************************************************************************
Copyright (c) 深圳市民德电子科技有限公司 http://www.szminde.cn
文件名称:sys_KeyBoard.c
版本号: 1.0
日期: 2005-05-25
说明: 此文件包含对ES-TAD7100开发板上的键盘进行操作的函数。
调用列表:--
修改历史:--
****************************************************************************/
#include "44b.h"
#include "sys_KeyBoard.h"
/*延时函数*/
extern void Delay(int time);
/*对扫描键盘后结果进行转换的数组*/
U8 keyBoard_KeyMap[]={0,1,4,7,15,2,5,8,14,3,6,9,12,13,11,10};
U16 FunctionKey = 0xffff;
/****************************************************************************
函数名称:GetScanKey()
说明: 扫描键盘上有无键被按下。
调用函数:Delay()
输入参数:无
输出参数:key 键盘扫描的结果
****************************************************************************/
U16 GetScanKey(void)
{
U16 key;
U32 i,temp;
for(i=1;i<0x10;i<<=1)
{
rPDATE |= 0xf0;
rPDATE &= ~(i<<4);
key <<= 4;
Delay(1);
temp = rPDATC;
key |= (temp&0xf);
}
return key;
}
/****************************************************************************
函数名称:GetKey()
说明: 取得键盘按键。
调用函数:GetScanKey()
Delay()
输入参数:无
输出参数:当有键按下时,返回按键的值;当无键按下时,返回-1。
****************************************************************************/
S32 GetKey(void)
{
int i=0;
U16 key=0xffff,tempkey=1;
static U16 oldkey=0xffff;
static U8 keystatus=0;
U8 keycnt=0;
while(1)
{
key=0xffff;
key=GetScanKey();
if(((key&FunctionKey)==FunctionKey)) // 没有按键按下
{
return -1;
}
oldkey=0xffff;
Delay(1500);
if(key!=GetScanKey())
continue;
if(oldkey!=key)
keystatus=0;
if(keystatus==0) // 第一次按下此键
{
keycnt=0;
keystatus=1;
}
else if(keystatus==1) // 重复此键
{
keycnt++;
if(keycnt==20)
keystatus=2;
else
continue;
}
oldkey=key;
break;
}
for(i=0;i<16;i++) // 查找按键
{
if((key&tempkey)==0 && (FunctionKey&tempkey)!=0)
break;
tempkey<<=1;
}
return keyBoard_KeyMap[i];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -