Witam!
Tak jak temacie, mam problem z programem do obsługi klawiatury matrycowej 4x4,
Na stronie:
Link
Znalazłem kod:
Problem polega na tym, że jest to program do obsługi klawiatury 4x3.
Pomimo wielu prób, nie udało mi się go tak zmodyfikować, żeby działał dla klawiatury 4x4.
Bardzo proszę o pomoc!
Pozdrawiam!
Tak jak temacie, mam problem z programem do obsługi klawiatury matrycowej 4x4,
Na stronie:
Link
Znalazłem kod:
#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>
/**** DEFINICJE WŁASNYCH FUNKCJI ****/
/* Konfiguracja sprzętu */
void init(void)
{
/* Konfiguruj portu A jako wyjścia */
/* Wyświetlacz */
DDRA = 0xFF;
PORTA = 0xFF;
/* Klawiaturka PD0..PD7 */
DDRD = 0x0f;
PORTD = 0x7f;
}
/*
Funkcja zmienia bajt w kodzie binarnym na bajt
zakodowany w BCD
*/
unsigned char bin2bcd(unsigned char bin)
{
if(bin>99) return bin;
return bin/10<<4 | bin%10;
}
/*
Funkcja sprawdza kolejno wszystkie przyciski klawiatury
i zwraca numer pierwszego wciśniętego przycisku, albo zero,
gdy żaden przycisk nie został wciśnięty.
*/
unsigned char read_keypad(void)
{
unsigned char row,col,key;
for(row=0x7e,key=1; row>=0x77; row=(row<<1|0x1)&0x7f)
{
PORTD = row;
for(col=0x10; col< 0x80; col<<=1, key++)
if(!(PIND & col)) return key;
}
return 0;
}
/**** POCZĄTEK PROGRAMU ****/
/* Definicja funkcji main */
int main(void)
{
unsigned char key;
/* Konfiguracja portów we/wy */
init();
/* Nieskończona pętla */
for(;;)
if(key = read_keypad())
PORTA = bin2bcd(key);
}
Problem polega na tym, że jest to program do obsługi klawiatury 4x3.
Pomimo wielu prób, nie udało mi się go tak zmodyfikować, żeby działał dla klawiatury 4x4.
Bardzo proszę o pomoc!
Pozdrawiam!