Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[AT89S51] [Asembler] Zamek szyfrowy na klaw. matryc.

JohnGibon 25 Mar 2009 21:39 1773 3
  • #1 25 Mar 2009 21:39
    JohnGibon
    Poziom 9  

    Witam, jeżeli ktoś jest mi wstanie pomóc byłbym bardzo wdzięczny.
    Muszę napisać program w assemblerze obsługujący klawiaturę matrycową i działający za zasadzie zamka szyfrowego.
    Polegał miałby on na tym, że użytkownik po wpisaniu cyfry ma 5 sekund na wpisanie kolejnej, jeżeli jej nie wpisze, program powraca do programu głównego a jeżeli wpisze, musi wpisać pozostałe 3 cyfry które uC porównuje z liczbą wpisaną do jakiegoś rejestru i jeżeli jest zapala np. diodę. Klawiatura to uniw. matrycowa 3x4.
    Program jaki znalazłem do obsługi klaw. matrycowej:
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=457383#457383
    myślę, że dla osoby "piszącej na co dzień" a w asseblerze jest to 10 min roboty, ja niestety nie mogę poradzić sobie z tym od tygodnia. A co najgorsze padł mi programator i jak na razie nie mogę jak pisać metodą "prób i błędów". Więc jeżeli znalazła by się jakaś osobą chcąca pomóc było by mi bardzo miło. Programowania po prostu pojąć nie mogę.

    0 3
  • #2 30 Mar 2009 23:23
    adamowicz
    Poziom 21  

    Napisz co ma być gdzie podłączone kolumny , rzędy i dioda może coś znajdę. Rozumiem, że program ma być w asm.
    Pozdrawiam

    0
  • #3 02 Kwi 2009 16:46
    Zaquadnik
    Poziom 27  

    Tu masz program (napisany przeze mnie daaaawno temu) do obsługi klawiatury matrycowej. Wysyła dane w zależności od klawisza przez UART.

    Code:

    tmod_set equ 020h               ;ustawienie Timera 1 w tryb 2
    th1_set equ 0F4h                ;wartosc poczatkowa licznika (do transmisji 2400 bodow/sek.)
    tl1_set equ 0F4h
    scon_set equ 050h               ;ustawienie portu szeregowego w tryb 1 i zezwolenie na odbior
    CTS equ P3.2
    CMD equ P3.3                  ;przypisanie liniom I/O odpowiednich funkcji (nazwy)
    c1 equ P1.3
    c2 equ P1.2
    c3 equ P1.1
    c4 equ P1.0
    w1 equ P1.7
    w2 equ P1.6
    w3 equ P1.5
    w4 equ P1.4

       mov SCON,#scon_set            ;zaladowanie ustawien do odpowiednich rejestrow
       mov TMOD,#tmod_set
       mov TH1,#th1_set
       mov TL1,#tl1_set
       setb CMD                      ;ustawienie linii CMD w stan wysoki (aktywna stanem niskim)
       clr CTS                    ;wyzerowanie linii CTS
       setb P3.0                 ;ustawienie linii RxD (odbioru) w stan nieaktywny (wysoki)
       setb TR1                      ;uruchomienie Timera 1

       setb TI                       ;ustawienie znacznika zakonczenia trnasmisji bajtu przez UART

    Klawisz:

       clr w1
       jnb c1,k_0
       jnb c2,k_1
       jnb c3,k_2
       jnb c4,k_3
       setb w1
       clr w2
       jnb c1,k_4
       jnb c2,k_5
       jnb c3,k_6
       jnb c4,k_7
       setb w2
       clr w3
       jnb c1,k_8
       jnb c2,k_9
       jnb c3,k_A
       jnb c4,k_B
       setb w3
       clr w4
       jnb c1,k_C
       jnb c2,k_D
       jnb c3,k_E
       jnb c4,k_F
       setb w4
       ljmp Klawisz

    k_0:
       mov R0,#00h
       ljmp nadawanie
    k_1:
       mov R0,#01h
       ljmp nadawanie
    k_2:
       mov R0,#02h
       ljmp nadawanie
    k_3:
       mov R0,#03h
       ljmp nadawanie
    k_4:
       mov R0,#04h
       ljmp nadawanie
    k_5:
       mov R0,#05h
       ljmp nadawanie
    k_6:
       mov R0,#06h
       ljmp nadawanie
    k_7:
       mov R0,#07h
       ljmp nadawanie
    k_8:
       mov R0,#08h
       ljmp nadawanie
    k_9:
       mov R0,#09h
       ljmp nadawanie
    k_A:
       mov R0,#0Ah
       ljmp nadawanie
    k_B:
       mov R0,#0Bh
       ljmp nadawanie
    k_C:
       mov R0,#0Ch
       ljmp nadawanie
    k_D:
       mov R0,#0Dh
       ljmp nadawanie
    k_E:
       mov R0,#0Eh
       ljmp nadawanie
    k_F:
       mov R0,#0Fh
       ljmp nadawanie
       
    nadawanie:
       
       clr TI
       mov SBUF,R0
       jnb TI,$
       ljmp nadawanie
       
    end

    0
  • #4 07 Kwi 2009 09:47
    JohnGibon
    Poziom 9  

    Problem rozwiązałem w całkiem inny sposób, ale dziękuje za chęć pomocy.

    0