蓝桥杯单片机将P36、P37换成了P42、P44
故三行矩阵的写法复杂了许多
其实就是将x的最高位给P44,次高位P42
换汤不换药的写法
#define SetKeyBoard(x) P4 = (P4&0xeb) | ((x>>7)<<4) | (((x>>6)&0x01)<<2);P3 = (P3&0xc0) | (x&0x3f)
#define GetKeyBoard() ((P4&0x10)<<3) | ((P4&0x04)<<4) | (P3&0x3f)
简化写法
#define SetKeyBoard(x) P4 = ((x>>7)<<4) | (((x>>6)&0x01)<<2);P3 = x
#define GetKeyBoard() ((P4&0x10)<<3) | ((P4&0x04)<<4) | (P3&0x3f)
最简化写法
#define SetKeyBoard(x) P4 = (x>>3) | (x>>4);P3 = x
#define GetKeyBoard() ((P4&0x10)<<3) | ((P4&0x04)<<4) | (P3&0x3f)
三行精髓
void KeyScan(void)
{
unsigned char ReadData;
SetKeyBoard(0x0f);
ReadData = GetKeyBoard();
SetKeyBoard(0xf0);
ReadData = (ReadData | GetKeyBoard()) ^ 0xff;
Trg = ReadData & (ReadData ^ Cont);
Cont = ReadData;
}