Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[8051 ATMEL][asembler] klawiatura + obsługa.

csdominik 22 May 2009 01:00 3934 1
  • #1
    csdominik
    Level 11  
    Witam, jestem w trakcie realizacji mojego 1wszego projektu na AT89S52.
    Od niedawna jestem szczęśliwym posiadaczem klawiatury "telefonicznej" 12 przyciskowej(niestety nie jest to klawiatura matrycowa, i ma 14 wyprowadzeń) , dotychczas nie udało mi się jej dobrze "obsłużyć".
    Chciałbym sczytywać 4 bajtowy kod wpisany z klawiatury (przykładowo 1234) a następnie zapisać go w rejestrze (w tym przypadku w rejestrach, ponieważ każdy może pomieścić 0-255) w celu porównania go z poprawnymi kodami znajdującymi się na przykład w TAB1.

    proszę o pomoc.
    dołączam moje próby :
     
            MOV R0,#0
    KLAWIATURA: 
    	MOV P1,#11111111B             ;
    	SETB P2.2                           ;
    	SETB P2.3                           ; to są porty na których mam podłączoną  klawiaturę
    	SETB P2.4                           ; wysyłam na nie 1 logiczną aby sterować nimi za pomocą "0"
    	SETB P2.5                            ;
    	JNB P2.4,GWIAZDKA 
    	JNB P1.0,ZERO 
    	JNB P2.5,KRZYZ 
    	JNB P1.7,SIEDEM 
    	JNB P2.2,OSIEM                     ; tutaj sprawdzam czy któryś klawisz został wciśnięty
    	JNB P2.3,DZIEWIEC 
    	JNB P1.4,CZTERY 
    	JNB P1.5,PIEC 
    	JNB P1.6,SZESC 
    	JNB	 P1.1,JEDEN 
    	JNB P1.2,DWA 
    	JNB P1.3,TRZY 
    	JMP KLAWIATURA
    
    ZERO: 
    	JNB P1.0,$                           ; próba eliminacji drgań ?
    	MOV A,#00000000B 	          ; wpisuję to co zostało naciśnięte do (czyli 0) do A
    	LCALL DODAWANIE              ; tutaj miałem zamiar dodać te wartości (w 4 etapach, tysiace, setki do 1 rejestru,  oraz dziesiątki i jedności do drugiego? itd)
    	MOV DPTR,#MESSAGE0        ; wysyłam na LCD wciśnięta wartość
    	CALL LCD_STRING               ;jw
         INC R0
       CJNE R0,#4, KLAWIATURA                   ; sprawdzam która to cyfra z kolei jeśli 4 to skok do wpisane
    	JMP WPISANE               ; jeśli nie to wracam do oczekiwania na kolejne przyciśniecie któregoś z klawiszów
    	
    JEDEN: 
    	JNB P1.0,$ 
    	MOV A,#00000001B 	
    	DEC R0 
    	LCALL DODAWANIE 
    	MOV DPTR,#MESSAGE0 
           INC R0
       CJNE R0,#4, KLAWIATURA
    	JMP WPISANE
    
    itd.
    

    no właśnie... i co ma być pod "DODAWANIE"(w domysle kolejnych cyfr - może w ogóle to usunąć?) i "WPISANE"
    oraz jak porównać mój wynik z TAB1.
    proszę o podpowiedzi, (także krytyczne) nawet pozornie błaha podpowiedz może posunąć wiele do przodu,mnie po prostu skończyły się pomysły.
    pozdrawiam Dominik
  • #2
    csdominik
    Level 11  
    niestety nie udało mi się rozwiązać tego problemu (czyt. sprawdzania 4 bitowego kodu).
    nigdzie nie umiałem znaleźć choćby powierzchownego wyjaśnienia działania tablic w asemblerze. (jeśli ktoś wie gdzie znajdę takie info - proszę o PW)

    zauważyłem że sporo osób czytało mój post, więc samolubnie uznając go za ciekawy, napiszę moje, proste rozwiązanie.
    ostatecznie zadanie rozpracowałem, bez tablic - ale na rejestrach, co za tym idzie kody są 3 bitowe i to TYLKO od 0 do 255.
    po sczytaniu z klawiatury 3 bitów - np 123 - zamieniam to na 1x100 + 2x10 + 3 i wrzucam do rejestru R1 (po kolei sprawdzając czy jest aktualnie wpisywana wartość SETEK DZIESIĄTEK czy JEDNOŚCI)
    w prostej pętli (z xorem) sprawdzam czy zawartość rejestru R1 równa się któremuś z prawidłowych kodów ( w domyśle w rejestrach R3,R4,R5 znajdują się programowo wpisywane - tak, na sztywno przy każdym uruchomieniu - "prawidłowe" kody oraz w rejestrze R2 znajduje się ew. dodany z klawiatury kod, w moim programie np. *155 dodaje kod 155 do rejestru R2 - i jest on "prawidłowy")

    pozdrawiam Dominik