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

📄 keyboard.c

📁 LCD及键盘、RS232通信控制源代码、采用keil c51环境编译
💻 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 + -