📄 keyboard.c
字号:
/******************************************************************************************
* 目的:键盘 IO
* 功能:基本键盘 IO 读入
* 模块依赖:硬件 键盘控制 IC 资料
******************************************************************************************/
#include "compiler.h"
#include "Keyboard.h"
//////////////////////////////////////////////////////////////////////////
// Deifine Of KeyPort
//////////////////////////////////////////////////////////////////////////
#define KEY1 P4_bit.P4_0 // KEY1. P4.1
#define KEY2 P4_bit.P4_1 // KEY2. P4.2
//////////////////////////////////////////////////////////////////////////
// Extern Port P4
//////////////////////////////////////////////////////////////////////////
__sfr __no_init volatile union
{
unsigned char P4 ; // Extern Port Of KeyBoard Scaner
struct // P4 Struct
{
unsigned char P4_0 : 1;
unsigned char P4_1 : 1;
unsigned char P4_2 : 1;
unsigned char p4_3 : 1;
unsigned char : 1;
unsigned char : 1;
unsigned char : 1;
unsigned char : 1;
} P4_bit;
} @ 0xE8;
////////////////////////////////////////////////////////////////////////////
volatile unsigned char KeyBuf;
unsigned char KeyOuput;
////////////////////////////////////////////////////////////////////////////
/*
**-------------------------------------------------------------------------------------
** 内部按键扫描函
**-------------------------------------------------------------------------------------
*/
void ScanKey(void)
{
KEY1 = 1;
KEY2 = 1;
if( !KEY1 )
{
if ( !KEY2 ) KeyBuf = 3;
else KeyBuf = 2;
}
else //K1 = H
{
if ( !KEY2 )
{
KeyBuf = 1;
}
else //K2 = H
{
KEY1 = 0;
if ( !KEY2 ) //K2 = L
{
KEY1 = 1;
KEY2 = 0;
if (!KEY1) KeyBuf = 4;
else KeyBuf = 6;
}
else
{
KEY1 = 1;
KEY2 = 0;
if (!KEY1)
{
KeyBuf = 5;
}
else KeyBuf = 0;
}
}
}
KEY1 = 1;
KEY2 = 1;
if( ( KeyOuput != KeyBuf ) && KeyBuf )
{
KeyOuput = KeyBuf;
KeyBuf = KEY_NULL;
}
}
/*
**-------------------------------------------------------------------------------------
** 外部按键扫描函
** KeyMode - 0: 死等按键 非0: 快速扫描
**-------------------------------------------------------------------------------------
*/
unsigned char GetAKey( char KeyMode )
{
volatile UINT i;
UCHAR TempKey;
TempKey = KEY_NULL;
if( !KeyMode )
{
KeyBuf = KEY_NULL;
while( ( KEY_NULL == KeyBuf ) ) //Wait For Press Down
{
}
TempKey = KeyOuput;//NULL
for( i=0; i<10000; i++ ); //Time Of Effactive Press Down
if( KeyOuput == TempKey ) //Relaese
{
TempKey = KeyOuput;
}
else
{
TempKey = KEY_NULL;
}
KeyOuput = KEY_NULL;
KeyBuf = KEY_NULL;
}
else
{
if( KeyOuput != KEY_NULL )
{
TempKey = KeyOuput; //Press Down
for( i=0; i<10000; i++ ); //Time Of Effactive Press Down
if( KeyOuput == TempKey ) //Relaese
{
TempKey = KeyOuput;
}
else
{
TempKey = KEY_NULL;
}
KeyOuput = KEY_NULL;
KeyBuf = KEY_NULL;
}
}
return ( TempKey );
}
//----------------------------------------------------------------- End Of File -------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -