小磷光一

PS2键盘的键值判断

0
阅读(3440)

 

****************************************************************************/ 
#include "dm_bf5xx.h"
#include "dm_types.h"
#include "dm_ps2_codes.h"
#include 
/****************************************************************************
* 功能 :外部声明的变量
****************************************************************************/
extern volatile uint8_t key_up;	  	
extern volatile uint8_t key;	 
extern volatile uint8_t key2;
extern volatile uint8_t key3; 
/****************************************************************************
* 名称 : PS2_select
* 功能 : 选通PS2 键盘 245
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void PS_Clk_In()
{
  *pCtrIner_Flag_OE =~KEY_SW_OE;//KEY_SW_OE=0
  mdelay(500);
  *pCtrOut_Flag_C   = KEY_SW;//KEY_SW=1
  mdelay(500);
}
/****************************************************************************
* 名称 : PS2_DAT_DIR
* 功能 : 接到PS2键盘数据口的 PF 口设置为输入
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void PS2_KEYDAT_DIR()
{
*pFIO_DIR = (*pFIO_DIR)&(~SCL); // 输入允许
*pFIO_INEN |= SCL;
*pCtrOut_Flag_A = PS_DAT_DIR;
mdelay(500);

}
/****************************************************************************
* 名称 : Decode
* 功能 : 键盘查表并打印函数
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
extern volatile uint8_t key;
void Decode(void)
{
	int_t i;
	
 	if(key_up == 1)
    {
    	if(key==key3)
    	{
	        for(i=0;i<59;i++)
	        {
	             if(key == UnShifted[i][0])
	             {
	                  printf("THE KEY  is %c!\r\n",UnShifted[i][1]);
	                  key_up = 0;
	                  key = 0;key2 = 0;key3 = 0;
	             }
	        }  
    	}
    	else
    	{
    	key_up = 0;	
    	key = 0;key2 = 0;key3 = 0;
    	}
   
    } 
}