原理图
头文件
#ifndef __BUTTON_MATRIX_H__
#define __BUTTON_MATRIX_H__
#include <reg52.h>
#define BUTTON_DOWN_IF(ButtonDownState, position) (((ButtonDownState) & (0x0001 << (position))) != 0)
extern unsigned int readButtonDown();
#endif
源文件
#include "buttonMatrix.h"
unsigned int readButtonDown() {
unsigned int state = 0xffff;
unsigned char scanPort;
P3 = 0xf0;
if (P3 != 0xf0) {
for (scanPort = 0; scanPort < 4; scanPort++) {
P3 = ~(0x08 >> scanPort);
state = (state << 4) | (P3 >> 4);
}
}
return ~state;
}