MIPS Template: Rozdiel medzi revíziami
Z SensorWiki
(7 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
− | Záverečný projekt predmetu MIPS / LS2024 - ''' | + | Záverečný projekt predmetu MIPS / LS2024 - '''Daniel Samuel Bobocký''' |
− | == Zadanie == | + | == Zadanie - Klávesnica 4x4 s radičom MH1KK1 == |
− | + | Cieľom tohto zadania je pripojiť klávesnicu 4x4 s radičom MH1KK1 k Arduino Uno R3. | |
− | [[ | + | [[Súbor:600px-OBRArduino]] |
'''Literatúra:''' | '''Literatúra:''' | ||
Riadok 17: | Riadok 17: | ||
== Analýza a opis riešenia == | == Analýza a opis riešenia == | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Riadok 34: | Riadok 27: | ||
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;"> | <tab name="AVR C-code"><source lang="c++" style="background: LightYellow;"> | ||
#include <avr/io.h> | #include <avr/io.h> | ||
+ | #include <util/delay.h> | ||
+ | #include <avr/interrupt.h> | ||
+ | |||
+ | // 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; // PD0-PD3 ako výstupné (riadky), PD4-PD7 ako vstupné (stĺpce) | ||
+ | PORTD = 0xF0; // Povolenie pull-up rezistorov na vstupných pinoch | ||
+ | } | ||
+ | |||
+ | // 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)))) { // Skontrolovanie, či je stĺpec LOW | ||
+ | while (!(PIND & (1 << (col + 4)))); // Počkaj, kým kláves nie je uvoľnený | ||
+ | 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 baud) { | |
− | / | + | unsigned int ubrr = F_CPU / 16 / baud - 1; |
− | + | UBRR0H = (unsigned char)(ubrr >> 8); | |
+ | UBRR0L = (unsigned char)ubrr; | ||
+ | UCSR0B = (1 << TXEN0) | (1 << RXEN0); // Povoliť vysielač a prijímač | ||
+ | UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bitová komunikácia | ||
+ | } | ||
− | + | // Funkcia na odoslanie znaku cez UART | |
+ | void uart_send(char data) { | ||
+ | while (!(UCSR0A & (1 << UDRE0))); | ||
+ | UDR0 = data; | ||
} | } | ||
− | + | // Funkcia na prijímanie znaku cez UART | |
− | < | + | char uart_receive() { |
− | + | while (!(UCSR0A & (1 << RXC0))); | |
+ | return UDR0; | ||
+ | } | ||
+ | |||
+ | int main(void) { | ||
+ | uart_init(9600); // Inicializácia UART s baud rate 9600 | ||
+ | keypad_init(); // Inicializácia klávesnice | ||
+ | sei(); // Povolenie globálnych prerušení | ||
+ | |||
+ | 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; | ||
+ | } | ||
− | |||
</source></tab> | </source></tab> | ||
</tabs> | </tabs> | ||
Riadok 60: | Riadok 110: | ||
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]] | Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]] | ||
− | |||
=== Overenie === | === Overenie === |
Verzia zo dňa a času 22:56, 11. jún 2024
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 Arduino Uno R3.
Literatúra:
Obsah
Analýza a opis riešenia
Algoritmus a program
Algoritmus programu je....
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
// 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; // PD0-PD3 ako výstupné (riadky), PD4-PD7 ako vstupné (stĺpce)
PORTD = 0xF0; // Povolenie pull-up rezistorov na vstupných pinoch
}
// 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)))) { // Skontrolovanie, či je stĺpec LOW
while (!(PIND & (1 << (col + 4)))); // Počkaj, kým kláves nie je uvoľnený
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 baud) {
unsigned int ubrr = F_CPU / 16 / baud - 1;
UBRR0H = (unsigned char)(ubrr >> 8);
UBRR0L = (unsigned char)ubrr;
UCSR0B = (1 << TXEN0) | (1 << RXEN0); // Povoliť vysielač a prijímač
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bitová komunikácia
}
// Funkcia na odoslanie znaku cez UART
void uart_send(char data) {
while (!(UCSR0A & (1 << UDRE0)));
UDR0 = data;
}
// Funkcia na prijímanie znaku cez UART
char uart_receive() {
while (!(UCSR0A & (1 << RXC0)));
return UDR0;
}
int main(void) {
uart_init(9600); // Inicializácia UART s baud rate 9600
keypad_init(); // Inicializácia klávesnice
sei(); // Povolenie globálnych prerušení
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;
}
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:
Zdrojový kód: zdrojaky.zip
Overenie
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.