?? keyboard.c
字號:
/*********************************************************************************
* *
* FileName: Keyboard.c *
* Function: keyboard scaner *
* SystemName: NDS18000-BSC *
* CPU: ATMEL AT89C52 *
* Startup: 14/Oct/2002 *
* Author: XuYiBo *
* *
*********************************************************************************/
#include <AT89X52.H>
#include <intrins.h>
#include "NDSBSCUI.H"
#include "Keyboard.h"
#include "General.h"
unsigned char data ucKeyHold; //
unsigned char data ucKeyBuffer[KEYBUFFER_LEN];
unsigned char data *ucKeyHead;
unsigned char data *ucKeyTail;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/******************************************************************************
* *
* Initialize Keyboard scan function *
* *
******************************************************************************/
void InitKeyboard(void)
{
ucKeyHold = HOLD_VALUE;
ucKeyHead = ucKeyBuffer;
ucKeyTail = ucKeyBuffer;
}
/******************************************************************************
* *
* If KeyBuffer is empty,retnrn 0 *
* else return 1 *
* *
******************************************************************************/
unsigned char IsKeyBUfEmpty(void)
{
if( ucKeyHead != ucKeyTail)
return 1;
else
return 0;
}
/******************************************************************************
* *
* Get a key from KeyBuffer *
* *
******************************************************************************/
unsigned char GetKey(void)
{
unsigned char ucTmpKey;
ucTmpKey = *(ucKeyHead++);
if( ucKeyHead == ucKeyBuffer+KEYBUFFER_LEN )
{
ucKeyHead = ucKeyBuffer;
}
return ucTmpKey;
}
/******************************************************************************
* *
* Timer0,Keyboard scan *
* *
******************************************************************************/
void timer0 ( ) interrupt TIMER0INT using 1
{
unsigned char ucTmpKey1;
unsigned char ucTmpKey2;
if( --ucKeyHold == 0 )
{
KEYBOARDPORT=0xf0;
DelayCycle(0x08);
ucTmpKey1 = KEYBOARDPORT; //high 4Bit
if( ucTmpKey1 != 0xf0)
{//Key down
KEYBOARDPORT=0x0f;
DelayCycle(0x08);
ucTmpKey2 = KEYBOARDPORT; //low 4Bit
if( ucTmpKey2 != 0x0f)
{//Key Down
switch(ucTmpKey1)
{
case 0xe0: //Key4
switch(ucTmpKey2)
{
case 0x0e: //Key0
*(ucKeyTail++) = Key_1;
break;
case 0x0d: //Key1
*(ucKeyTail++) = Key_5;
break;
case 0x0b: //Key2
*(ucKeyTail++) = Key_9;
break;
case 0x07: //Key3
*(ucKeyTail++) = Key_F3;
break;
default:
break;
}
break;
case 0xd0: //Key5
switch(ucTmpKey2)
{
case 0x0e:
*(ucKeyTail++) = Key_2;
break;
case 0x0d:
*(ucKeyTail++) = Key_6;
break;
case 0x0b:
*(ucKeyTail++) = Key_0;
break;
case 0x07:
*(ucKeyTail++) = Key_F4;
break;
default:
break;
}
break;
case 0xb0: //Key6
switch(ucTmpKey2)
{
case 0x0e:
*(ucKeyTail++) = Key_3;
break;
case 0x0d:
*(ucKeyTail++) = Key_7;
break;
case 0x0b:
*(ucKeyTail++) = Key_F1;
break;
case 0x07:
*(ucKeyTail++) = Key_F5;
break;
default:
break;
}
break;
case 0x70: //Key7
switch(ucTmpKey2)
{
case 0x0e:
*(ucKeyTail++) = Key_4;
break;
case 0x0d:
*(ucKeyTail++) = Key_8;
break;
case 0x0b:
*(ucKeyTail++) = Key_F2;
break;
case 0x07:
*(ucKeyTail++) = Key_Enter;
break;
default:
break;
}
break;
default:
break;
}
if( ucKeyTail == ucKeyBuffer+KEYBUFFER_LEN )
{
ucKeyTail = ucKeyBuffer;
}
ucKeyHold = HOLD_VALUE;
}
else
{
ucKeyHold = 1;
}
}
else
{//
ucKeyHold = 1;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -