📄 key.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 + -