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

📄 key.c

📁 基于arm—LPC2103的LCD12232的驱动程序
💻 C
字号:
#include "lpc21xx.h"
#include "Key.h"							  // **********************键盘接口参数*****************************//
#define KeyIn1  0x01<<18	  //		Connection							ruturn scan Num		//
#define KeyIn2  0x01<<19	  //																//
#define KeyIn3  0x01<<22	  //	KeyIn1	----|---|---|---|---		   --1 --2 --3 --4 --	//
#define KeyIn4  0x01<<24	  //	KeyIn2	----|---|---|---|---		   --5 --6 --7 --8 --	//
#define KeyOut1 0x01<<26	  //	KeyIn3 	----|---|---|---|---		   --9 --10--11--12--	//
#define KeyOut2 0x01<<		  //	KeyIn4 	----|---|---|---|---		   --13--14--15--16--	//
#define KeyOut3 0x01<<28	  //																//
#define KeyOut4 0x01<<30	  //		KeyOut1 KeyOut2 KeyOut3 KeyOut4							//
							  //******************************************************************


#define KeyIn	(KeyIn1 |KeyIn2 |KeyIn3 |KeyIn4)
#define KeyOut	(KeyOut1|KeyOut2|KeyOut3|KeyOut4)
int KeyFIFO(int OptCode,char OptNum);
enum OptCodeType {PUSH,POP,CLR,CHECK};

void KeyInit(void)
{	//PINSEL0=0;
	IO0DIR|=KeyOut;
	IO0DIR&=KeyIn;
}

uint KeyScan(void)			//called every 10ms.
{	static uchar KeyStu;
	uint i,j;
	IO0CLR|=KeyOut;
	KeyStu<=1;
	if ((IO0PIN & KeyIn)==KeyIn)
		KeyStu|=0x01;
	KeyStu&=0x07;
	if(KeyStu==0x03)			
	{	 //Key Press ON 
		IO0SET|=KeyOut;
		IO0ClR|=KeyOut1;
		if((IO0PIN & KeyIn)!=KeyIn)					// 1
			i=1;	
		else
		{
			IO0SET|=KeyOut;
			IO0ClR|=KeyOut2;	
			if((IO0PIN & KeyIn)!=KeyIn)				// 2
			i=2;     
			else
			{
				IO0SET|=KeyOut;
				IO0ClR|=KeyOut3;
				if((IO0PIN & KeyIn)!=KeyIn)			// 3
				i=3;
				else
				{
				IO0SET|=KeyOut;
				IO0ClR|=KeyOut4;	
				if((IO0PIN & KeyIn)!=KeyIn)			// 4
				i=4;
				} 
			}
		}
		if(i)
		{
			if (IO0PIN&KeyIn1) j=0;
			else if(IO0PIN&KeyIn2) j=1;  
			else if(IO0PIN&KeyIn3) j=2; 
			else if(IO0PIN&KeyIn4) j=3;
			else i=0;
			
		}
	}		
	if(KeyStu==0x5)	 	KeyStu=0x07;   	//
	IO0SET|=KeyOut;	
	return(j*4+i);
}

void KeyMng()
{	static uint KeyNum=0,KeyTime=0,InputMode=0;
	uint i;
	i=KeyScan();
	if(i)
		KeyFIFO(PUSH,NUM[i]);
}

enum OptCodeType {PUSH,POP,CLR,CHECK};
/*********************************************************************************************************
** Function name:		int SentFIFO(int OptCode,char OptNum)
** Descriptions:		FIFO函数,用作发送缓存
** input parameters:    OptCode (PUSH	POP		CLR		CHECK	OTHER)
						OptNum	(DATA  	NUll	NULL 	NULL	NULL)
** Returned value:      int		(0/1 	0/DATA	1		Long	0	)
** output parameters:	无
*********************************************************************************************************/
int KeyFIFO(int OptCode,char OptNum)
{	  
	#define FIFO_Size 8
	static char FIFO[FIFO_Size],ptIN,ptOUT;
	switch(OptCode)
	{
		case PUSH :
		if(ptOUT==((ptIN+1)%FIFO_Size)) return 0 ;
		else 
		{
			FIFO[ptIN]=OptNum;	
			ptIN=(ptIN+1)%FIFO_Size;
			return	1;
		} 
		case POP :
		if(ptIN==ptOUT) return(0);
		else
		{ 	
			OptNum=FIFO[ptOUT];
			ptOUT=(ptOUT+1)%FIFO_Size;
			return(OptNum);
		}
		case CLR :
		ptOUT=ptIN;
		return 1;
		case CHECK:
		if(ptOUT>ptIN) return(ptOUT-ptIN);
		else return (ptIN-ptOUT);
		default:
		return 0;
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -