📄 keypad.c
字号:
#include "includes.h"
#include "consol.h"
#include "keypad.h"
static void Delay60us(void)
{
unsigned int i;
for (i=0;i<0x9ff;i++);
}
void PrintKeyScanCode(U32 OriValue)
{
switch (OriValue)
{
case KEYPAD0:
CONSOL_Printf("KEYPAD0");
break;
case KEYPAD1:
CONSOL_Printf("KEYPAD1");
break;
case KEYPAD2:
CONSOL_Printf("KEYPAD2");
break;
case KEYPAD3:
CONSOL_Printf("KEYPAD3");
break;
case KEYPAD4:
CONSOL_Printf("KEYPAD4");
break;
case KEYPAD5:
CONSOL_Printf("KEYPAD5");
break;
case KEYPAD6:
CONSOL_Printf("KEYPAD6");
break;
case KEYPAD7:
CONSOL_Printf("KEYPAD7");
break;
case KEYPAD8:
CONSOL_Printf("KEYPAD8");
break;
case KEYPAD9:
CONSOL_Printf("KEYPAD9");
break;
case KEYPADADD:
CONSOL_Printf("KEYPAD \"+\"");
break;
case KEYPADSUB:
CONSOL_Printf("KEYPAD \"-\"");
break;
case KEYPADDOT:
CONSOL_Printf("KEYPAD \".\"");
break;
case KEYPADMUL:
CONSOL_Printf("KEYPAD \"*\"");
break;
case KEYPADDIV:
CONSOL_Printf("KEYPAD \"/\"");
break;
case KEYPADENTER:
CONSOL_Printf("KEYPAD enter");
break;
case KEYPADNUMLK:
CONSOL_Printf("KEYPAD NumLock");
break;
}
CONSOL_Printf(" 扫描码:0x%x\n", OriValue);
}
void MatrixKeypad_Init(void)
{
//行 input
rGPBCON &= ~(0x3 << 20); //GPB10 C0
rGPBUP &= ~(0x1 << 10);
rGPCCON &= ~(0x3<<14 | 0x3<<12 | 0x3<<10); //GPC7 GPC6 GPC5 C1 C2 C3
rGPCUP &= ~(0x1<<7 | 0x1<<6 | 0x1<<5);
rGPGCON &= ~(0x3<<8 | 0x3<<6); //GPG4 GPG3 C4 C5
rGPGUP &= ~(0x1<<4 | 0x1<<3);
//列 output
rGPGCON &= ~(0x3<<10 | 0x3<<4);
rGPGCON |= (0x1<<10 | 0x1<<4);
rGPECON &= ~(0x3<<22);
rGPECON |= (0x1<<22);
rGPHCON &= ~(0x3<<20);
rGPHCON |= (0x1<<20);
}
U32 MatrixKeypad_ReadScanCode(void)
{
int i;
U32 t1, t2, t3, ScanCode = 0;
for(i=0; i<4; i++)
{
rGPGDAT |= 0x1<<2;
rGPGDAT |= 0x1<<5;
rGPEDAT |= 0x1<<11;
rGPHDAT |= 0x1<<10;
switch(i)
{
case 0:
rGPGDAT &= ~(0x1<<2);
break;
case 1:
rGPGDAT &= ~(0x1<<5);
break;
case 2:
rGPEDAT &= ~(0x1<<11);
break;
case 3:
rGPHDAT &= ~(0x1<<10);
break;
}
Delay60us();
Delay60us();
t1 = ((~(rGPBDAT)) & (0x1<<10 ) ) >> 10;
t2 = ((~(rGPCDAT)) & (0x1<<7 | 0x1<<6 | 0x1<<5) ) >> 4;
t3 = ((~(rGPGDAT)) & (0x1<<4 | 0x1<<3 ) ) << 1;
ScanCode |= (t1 | t2 | t3) << (i*6);
}
return ScanCode;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -