51 lines
2.2 KiB
C
51 lines
2.2 KiB
C
/*
|
|
* core.c
|
|
*
|
|
* Created: 13.04.2023 14:28:40
|
|
* Author: mrnek
|
|
*/
|
|
#include <avr/io.h>
|
|
#include <stdbool.h>
|
|
#include "app.h"
|
|
|
|
#define MASK_PIND 0b11110000
|
|
|
|
void check_physical_keys_state(struct key *keys) {
|
|
uint8_t row1;
|
|
PORTC &= ~(1 << 3);
|
|
row1 = PIND & MASK_PIND;
|
|
if (row1 & (1 << 4)) keys[0].is_physical_pressed = false; else keys[0].is_physical_pressed = true;
|
|
if (row1 & (1 << 5)) keys[1].is_physical_pressed = false; else keys[1].is_physical_pressed = true;
|
|
if (row1 & (1 << 6)) keys[2].is_physical_pressed = false; else keys[2].is_physical_pressed = true;
|
|
if (row1 & (1 << 7)) keys[3].is_physical_pressed = false; else keys[3].is_physical_pressed = true;
|
|
PORTC |= (1 << 3);
|
|
|
|
PORTC &= ~(1 << 2);
|
|
row1 = PIND & MASK_PIND;
|
|
if (row1 & (1 << 4)) keys[4].is_physical_pressed = false; else keys[4].is_physical_pressed = true;
|
|
if (row1 & (1 << 5)) keys[5].is_physical_pressed = false; else keys[5].is_physical_pressed = true;
|
|
if (row1 & (1 << 6)) keys[6].is_physical_pressed = false; else keys[6].is_physical_pressed = true;
|
|
if (row1 & (1 << 7)) keys[7].is_physical_pressed = false; else keys[7].is_physical_pressed = true;
|
|
PORTC |= (1 << 2);
|
|
|
|
PORTC &= ~(1 << 1);
|
|
row1 = PIND & MASK_PIND;
|
|
if (row1 & (1 << 4)) keys[8].is_physical_pressed = false; else keys[8].is_physical_pressed = true;
|
|
if (row1 & (1 << 5)) keys[9].is_physical_pressed = false; else keys[9].is_physical_pressed = true;
|
|
if (row1 & (1 << 6)) keys[10].is_physical_pressed = false; else keys[10].is_physical_pressed = true;
|
|
if (row1 & (1 << 7)) keys[11].is_physical_pressed = false; else keys[11].is_physical_pressed = true;
|
|
PORTC |= (1 << 1);
|
|
|
|
PORTC &= ~(1 << 0);
|
|
row1 = PIND & MASK_PIND;
|
|
if (row1 & (1 << 4)) keys[12].is_physical_pressed = false; else keys[12].is_physical_pressed = true;
|
|
if (row1 & (1 << 5)) keys[13].is_physical_pressed = false; else keys[13].is_physical_pressed = true;
|
|
if (row1 & (1 << 6)) keys[14].is_physical_pressed = false; else keys[14].is_physical_pressed = true;
|
|
if (row1 & (1 << 7)) keys[15].is_physical_pressed = false; else keys[15].is_physical_pressed = true;
|
|
PORTC |= (1 << 0);
|
|
}
|
|
|
|
void debounce(struct key *undebounce_keys) {
|
|
|
|
}
|