add PULLUP for keyboard

This commit is contained in:
cuu 2021-06-12 20:56:18 +08:00
parent 03cf255599
commit 191626d736
5 changed files with 55 additions and 20 deletions

View File

@ -34,5 +34,6 @@ class DEVTERM {
//USBSerial *_Serial;//_Serial = &Serial; //USBSerial *_Serial;//_Serial = &Serial;
}; };
#define KEYBOARD_PULL 1 // 1 for PULLUP, 0 FOR PULLDOWN
#endif #endif

View File

@ -2,7 +2,6 @@
uint8_t read_io(uint8_t io) { uint8_t read_io(uint8_t io) {
if(digitalRead(io) == LOW ){ if(digitalRead(io) == LOW ){
return 0; return 0;
}else { }else {

View File

@ -20,7 +20,7 @@
#define MATRIX_KEYS 64 // 8*8 #define MATRIX_KEYS 64 // 8*8
#ifndef DEBOUNCE #ifndef DEBOUNCE
# define DEBOUNCE 5 # define DEBOUNCE 20
#endif #endif
void init_rows(); void init_rows();

View File

@ -11,13 +11,37 @@ static uint8_t matrix[MATRIX_ROWS];
static uint8_t matrix_debouncing[MATRIX_COLS]; static uint8_t matrix_debouncing[MATRIX_COLS];
static uint8_t matrix_prev[MATRIX_ROWS]; static uint8_t matrix_prev[MATRIX_ROWS];
uint8_t read_kbd_io(uint8_t io) {
#if defined KEYBOARD_PULL && KEYBOARD_PULL == 0
if(digitalRead(io) == LOW ){
return 0;
}else {
return 1;
}
#elif defined KEYBOARD_PULL && KEYBOARD_PULL == 1
if(digitalRead(io) == LOW ){
return 1;
}else {
return 0;
}
#endif
}
void init_rows(){ void init_rows(){
int i; int i;
for(i=0;i<8;i++) { for(i=0;i<8;i++) {
#if defined KEYBOARD_PULL && KEYBOARD_PULL == 0
pinMode(matrix_rows[i],OUTPUT); pinMode(matrix_rows[i],OUTPUT);
digitalWrite(matrix_rows[i],LOW); digitalWrite(matrix_rows[i],LOW);
pinMode(matrix_rows[i],INPUT_PULLDOWN);
pinMode(matrix_rows[i],INPUT_PULLDOWN); #elif defined KEYBOARD_PULL && KEYBOARD_PULL == 1
pinMode(matrix_rows[i],INPUT_PULLUP);
#endif
} }
} }
@ -51,23 +75,33 @@ uint8_t matrix_scan(void) {
uint8_t data; uint8_t data;
for(int col = 0; col < MATRIX_COLS;col++){ for(int col = 0; col < MATRIX_COLS;col++){
data = 0; data = 0;
digitalWrite(matrix_cols[col],HIGH);
#if defined KEYBOARD_PULL && KEYBOARD_PULL == 1
digitalWrite(matrix_cols[col],LOW);
#elif defined KEYBOARD_PULL && KEYBOARD_PULL == 0
digitalWrite(matrix_cols[col],HIGH);
#endif
delayMicroseconds(30); delayMicroseconds(30);
data =( data =(
( read_io(matrix_rows[0]) << 0 ) | ( read_kbd_io(matrix_rows[0]) << 0 ) |
( read_io(matrix_rows[1]) << 1 ) | ( read_kbd_io(matrix_rows[1]) << 1 ) |
( read_io(matrix_rows[2]) << 2 ) | ( read_kbd_io(matrix_rows[2]) << 2 ) |
( read_io(matrix_rows[3]) << 3 ) | ( read_kbd_io(matrix_rows[3]) << 3 ) |
( read_io(matrix_rows[4]) << 4 ) | ( read_kbd_io(matrix_rows[4]) << 4 ) |
( read_io(matrix_rows[5]) << 5 ) | ( read_kbd_io(matrix_rows[5]) << 5 ) |
( read_io(matrix_rows[6]) << 6 ) | ( read_kbd_io(matrix_rows[6]) << 6 ) |
( read_io(matrix_rows[7]) << 7 ) ( read_kbd_io(matrix_rows[7]) << 7 )
); );
#if defined KEYBOARD_PULL && KEYBOARD_PULL == 1
digitalWrite(matrix_cols[col],HIGH);
#elif defined KEYBOARD_PULL && KEYBOARD_PULL == 0
digitalWrite(matrix_cols[col],LOW); digitalWrite(matrix_cols[col],LOW);
#endif
if (matrix_debouncing[col] != data) { if (matrix_debouncing[col] != data) {
matrix_debouncing[col] = data; matrix_debouncing[col] = data;
keyboard_debouncing.deing = true; keyboard_debouncing.deing = true;

View File

@ -12,7 +12,9 @@ static uint16_t keys_prev;
void init_keys(){ void init_keys(){
int i; int i;
for(i=0;i<KEYS_NUM;i++) { for(i=0;i<KEYS_NUM;i++) {
pinMode( keys_io[i],INPUT_PULLUP);
pinMode( keys_io[i],INPUT_PULLUP);
} }
} }
@ -23,13 +25,12 @@ uint8_t scan_keys(){
data = 0; data = 0;
delayMicroseconds(30); delayMicroseconds(30);
for(int i = 0;i < KEYS_NUM;i++) { for(int i = 0;i < KEYS_NUM;i++) {
s = read_io(keys_io[i]);
s ^= 1;
s = digitalRead(keys_io[i]); //HIGH =0,LOW = 1 data |= s << i;
if( s == LOW ){
data |= 1 << i;
}else {
data |= 0 << i;
}
} }
if ( keys_debouncing != data ) { if ( keys_debouncing != data ) {