logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AVT-2887: Obsługa klawiatury matrycowej - wyświetlacz pokazuje same zera

kkj 22 Lis 2010 22:22 1491 2
REKLAMA
  • #1 8777678
    kkj
    Poziom 12  
    Posty: 22
    Pomógł: 1
    Ocena: 1
    Witam.
    Posiadam zestaw AVT-2887. W ramach nauki postanowiłem spróbować napisać jakiś przykładowy program. Problem mam z obsługą przycisków (klawiatury matrycowej). Nie wiem jak się do tego zabrać. Na początku postanowiłem wyświetlić na wyświetlaczu stan wszystkich portów z którymi przyciski mają jakieś połączenie. Wydaje mi się, że po naciśnieciu któregoś z przycisków, któryś z portów powinien zmienić stan. Chciałbym się dowiedzieć dlaczego zawsze na wyświetlaczu pokazuje mi same zera, niezależnie od naciśniętych przycisków.

    Fragment mojego programu wygląda następująco:
    
    #include "Board.h"
    
    void init(void)
    {
    	AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PIOA);
    	
    	AT91C_BASE_PIOA->PIO_MDER = KEY0_MASK;
    	AT91C_BASE_PIOA->PIO_SODR = KEY0_MASK;
    	AT91C_BASE_PIOA->PIO_OER = KEY0_MASK | LCD_RS_MASK | LCD_ENA_MASK | LCD_DB4_MASK | LCD_DB5_MASK | LCD_DB6_MASK | LCD_DB7_MASK;
    	AT91C_BASE_PIOA->PIO_IFER = KEY0_MASK | KEY1_MASK | KEY2_MASK;
    	lcdInit();
    }
    
    int main( void )
    {
    	init();
    	lcdCls();
    	while(1)
    	{
    		lcdLocate(0, 0);
    		lcdByte(!(LCD_PIO->PIO_PDSR & LCD_DB4_MASK));
    		lcdLocate(0, 2);
    		lcdByte(!(LCD_PIO->PIO_PDSR & LCD_DB5_MASK));
    		lcdLocate(0, 4);
    		lcdByte(!(LCD_PIO->PIO_PDSR & LCD_DB6_MASK));
    		lcdLocate(0, 6);
    		lcdByte(!(LCD_PIO->PIO_PDSR & LCD_DB7_MASK));
    		lcdLocate(0, 8);
    		lcdByte(!(KEY1_PIO->PIO_PDSR & KEY1_MASK));
    		lcdLocate(0, 10);
    		lcdByte(!(KEY2_PIO->PIO_PDSR & KEY2_MASK));
    		
    
    		//wyłącznik
    		if (KEY0_PRESSED)
    		{
    			KEY0_PIO->PIO_CODR = KEY0_MASK;
    			break;
    		}
    	}
    }
    


    W załączniku dołączam schemat podłączenia przycisków.
    Załączniki:
    • AVT-2887: Obsługa klawiatury matrycowej - wyświetlacz pokazuje same zera schemat.jpg (221.3 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 8778226
    korrus666
    Poziom 40  
    Posty: 5219
    Pomógł: 584
    Ocena: 476
    Stany pinów nie mają prawa się zmienić. Klawiatura matrycowa ogólnie rzecz biorąc działa tak że trzeba na nią podawać odpowiednie sygnały żeby odczytać jaki przycisk jest wciśnięty. Poczytaj o klawiaturach matrycowych.
  • #3 8779896
    kkj
    Poziom 12  
    Posty: 22
    Pomógł: 1
    Ocena: 1
    Wcześniej, również próbowałem robić tak jak piszesz. Ten sposób rzeczywiście działa. Jednak z powodu, że przyciski i LCD są podłączone tymi samymi pinami, działały one tylko raz - do momentu wyświetlenia stanu portów. Problem już rozwiązany. Dzięki za pomoc.
REKLAMA