Matrix keypad 4x4 & ATmega644PA

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
Smolák Martin
Stály člen
Stály člen
Príspevky: 272
Dátum registrácie: 11 Sep 2007, 00:00
Bydlisko: Jaroměř
Vek: 29

Matrix keypad 4x4 & ATmega644PA

Príspevok od používateľa Smolák Martin » 08 Feb 2013, 23:18

Napsal jsem program, ale nefunguje úplně přesně. V příloze je v excelu je vytvořený návrh klávesnice. U tlačítek(zkřížení čáry) jsou hodnoty, které jsou napsané na klávesnici a v závorkách je napsaná hodnota, která by se měla navrátit. Děkuji předem za odpovědi.

Kód: Vybrať všetko

#define F_CPU 16000000UL
#include "lcd.h"
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#include <stdbool.h>
#define KEYPAD_DDR  DDRA
#define KEYPAD_PORT	PORTA
#define KEYPAD_PIN	PINA

uint8_t keypressed()
{
	uint8_t row,column;

    KEYPAD_PORT |= 0b00001111;
	 
    for(column=0;column<4;column++)
    {
        KEYPAD_DDR &= ~(0b11111111);

        KEYPAD_DDR|=(0b00010000<<column);
        for(row=0;row<4;row++)
        {
           if(!(KEYPAD_PIN & (0b00000001<<row)))
           {
              return (row*4+column);
           }
	    }
     }
 return 255;
 }

void main(void)
{	
	InitLCD(LS_NONE);
	char znak;
    while(1)
    {
		_delay_ms(1000);
		znak = keypressed();
		LCDWriteIntXY(0,0,znak,3);
    }
}
P.S. špatně jsou tyto klávesy:

-klávesa 1 zobrazuje adresu 1, má být 0
-klávesa 2 zobrazuje adresu 2, má být 1
-klávesa 3 zobrazuje adresu 3, má být 2
-klávesa A zobrazuje adresu 0 střídavě s 255, má být 3
-klávesa 5 zobrazuje adresu 5 střídavě se 4, má být 5
-klávesa 6 zobrazuje adresu 6 střídavě se 4, má být 6
-klávesa B zobrazuje adresu 4 střídavě se 7, má být 7
Prílohy
matrixkeypad.pdf
(173.51 KiB) 44 stiahnutí
0
Martin Smolák

  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok