Operácie

Klávesnica s radičom MH1KK1 -

Zo stránky SensorWiki

Záverečný projekt predmetu MIPS / LS2024 - Daniel Samuel Bobocký


Zadanie - Klávesnica 4x4 s radičom MH1KK1

Cieľom tohto zadania je pripojiť klávesnicu 4x4 s radičom MH1KK1 k doske Arduino Uno R3. S touto klávesnicou budeme vypisovať stlačené znaky na obrazovku.

Vývojová doska ACROB.


Literatúra:


Analýza a opis riešenia

Každý pin klávesnice som pripojil na samostatný pin dosky PD3 až PD6 + 2 GND piny. Ku klávesnici nebola dostupná žiadna dokumentácia, takže pre priradenie pinov k tlačítku som musel použiť multimeter.

Radič MH1KK1 spojený s klávesnicou 4x4.
Schéma radiča MH1KK1.


Algoritmus a program

Algoritmus programu je....


#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16000000UL // 16 MHz
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1

// Definícia riadkov a stĺpcov
#define ROWS 4
#define COLS 4

// Mapovanie kláves na 4x4 klávesnici
char keys[ROWS][COLS] = {
    {'7', '8', '9', 'V'},
    {'4', '5', '6', 'P'},
    {'1', '2', '3', 'S'},
    {'N', '0', '<', '+'}
};

// Funkcia na inicializáciu klávesnice
void keypad_init() {
    // Nastavenie riadkov ako výstupné a stĺpcov ako vstupné
    DDRD = 0x0F; 
    PORTD = 0xF0; 
}

// Funkcia na získanie stlačeného klávesu
char keypad_get_key() {
    for (int row = 0; row < ROWS; row++) {
        PORTD = ~(1 << row); // Nastavenie aktuálneho riadku na LOW

        _delay_ms(1); // Krátke oneskorenie

        for (int col = 0; col < COLS; col++) {
            if (!(PIND & (1 << (col + 4)))) {  
                while (!(PIND & (1 << (col + 4)))); 
                return keys[row][col]; // Vrátenie stlačeného klávesu
            }
        }
    }

    return '\0'; // Vrátiť NULL, ak žiadny kláves nie je stlačený
}

// Funkcia na inicializáciu UART
void uart_init(unsigned int ubrr) {
    UBRR0H = (unsigned char)(ubrr >> 8);
    UBRR0L = (unsigned char)ubrr;
    UCSR0B = (1 << TXEN0); // Povoliť vysielač
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bitová komunikácia
}

// Funkcia na odoslanie znaku cez UART
void uart_send(char data) {
    while (!(UCSR0A & (1 << UDRE0))); // Čakať, kým je vysielací buffer prázdny
    UDR0 = data;
}

int main(void) {
    uart_init(MYUBRR); // Inicializácia UART
    keypad_init(); // Inicializácia klávesnice

    while (1) {
        char key = keypad_get_key(); // Získanie stlačeného klávesu

        if (key) {
            uart_send(key); // Odoslanie stlačeného klávesu cez UART
        }
    }

    return 0;
}
}

Médiá:bobocky.avr.zip

Overenie

Aplikácia.

Video:

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.