追晨小筑
张扬着易逝又不悔的青春。
/****************************************Copyright (c)**************************************************
**                                 driver program for lpc2100
**
**--------------文件信息--------------------------------------------------------------------------------
** 文件名: key.c
** 创建人: 林傅荣
** 日  期: 2011.8.4
** 描  述: 按键相关函数的实现
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include "config.h"

//Key_GPIO
#define 	K1	8
#define 	K2	9
#define 	K3	10
#define 	K4	11
#define 	K5	12
#define 	K7	13
#define 	K6	14
#define 	K8	15
int8u KeyScanLine(int8u column); 

//按键初始化
void KeyInit(int8u stat)
{
	if(0 == stat)
	{
		IO0DIR = IO0DIR & (~((1 << K1) | 
							 (1 << K2) | 
							 (1 << K3) | 
							 (1 << K4) | 
							 (1 << K5) | 
							 (1 << K6) | 
							 (1 << K7) | 
							 (1 << K8)));
	}
	else
	{
		IO0DIR = IO0DIR & (~((1 << K5) | 
							 (1 << K6) | 
							 (1 << K7) | 
							 (1 << K8)));
		IO0DIR = IO0DIR | (1 << K1) | 
						  (1 << K2) | 
						  (1 << K3) | 
						  (1 << K4);
	}
}

//按键扫描
int8u KeyScan(int8u stat)
{
	int32u KeyGPIO;
	int8u key = 0;
	
	if(0 == stat)
	{
		KeyGPIO = ((1 << K1) | 
				   (1 << K2) | 
				   (1 << K3) | 
				   (1 << K4) | 
				   (1 << K5) | 
				   (1 << K6) | 
				   (1 << K7) | 
				   (1 << K8));
		
		if((KeyGPIO & IO0PIN) != KeyGPIO)
		{
			OSTimeDly(50);
			if((KeyGPIO & IO0PIN) != KeyGPIO)
			{
				if(0 == (IO0PIN & (1 << K1)))
					key = 1;
				else if(0 == (IO0PIN & (1 << K2)))
					key = 2;
				else if(0 == (IO0PIN & (1 << K3)))
					key = 3;
				else if(0 == (IO0PIN & (1 << K4)))
					key = 4;
				else if(0 == (IO0PIN & (1 << K5)))
					key = 5;
				else if(0 == (IO0PIN & (1 << K6)))
					key = 6;
				else if(0 == (IO0PIN & (1 << K7)))
					key = 7;
				else if(0 == (IO0PIN & (1 << K8)))
					key = 8;		
					
				while((KeyGPIO & IO0PIN) != KeyGPIO);
			}
		}
	}
	else
	{
		IO0CLR = (1 << K1);
		IO0SET = (1 << K2) | 
				 (1 << K3) | 
				 (1 << K4);
		
		key = KeyScanLine(1);
		if(key != 0)
			return key;
			
		IO0CLR = (1 << K2);
		IO0SET = (1 << K1) | 
				 (1 << K3) | 
				 (1 << K4);
		
		key = KeyScanLine(2);
		if(key != 0)
			return key;
		
		IO0CLR = (1 << K3);
		IO0SET = (1 << K1) | 
				 (1 << K2) | 
				 (1 << K4);
		
		key = KeyScanLine(3);
		if(key != 0)
			return key;
		
		IO0CLR = (1 << K4);
		IO0SET = (1 << K1) | 
				 (1 << K2) | 
				 (1 << K3);
				 
		key = KeyScanLine(4);
		if(key != 0)
			return key;
	}
	return key;
}

//扫描每行
int8u KeyScanLine(int8u column)
{
	int8u key = 0;
	if(0 == (IO0PIN & (1 << K5)))
	{
		key = (column-1)*4 + 1;
		while(0 == (IO0PIN & (1 << K5)));
	}
	else if(0 == (IO0PIN & (1 << K6)))
	{
		key = (column-1)*4 + 2;
		while(0 == (IO0PIN & (1 << K6)));
	}
	else if(0 == (IO0PIN & (1 << K7)))
	{
		key = (column-1)*4 + 3;
		while(0 == (IO0PIN & (1 << K7)));
	}
	else if(0 == (IO0PIN & (1 << K8)))
	{
		key = (column-1)*4 + 4;
		while(0 == (IO0PIN & (1 << K8)));
	}
	return key;
}


/***************************************************************************************
**				End File
***************************************************************************************/

  

posted on 2011-08-17 11:44  flonlen  阅读(840)  评论(0编辑  收藏  举报