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

DSM-51 program na klawiaturze matrycowej

07 Gru 2010 22:48 2508 9
  • Poziom 8  
    Chciałbym napisać program w asemblerze na wyświetlaczu LCD mający na celu odczytywanie i szeregowanie liczb od najmniejszej do największej. Kompletnie nie wiem jak się do tego zabrać :cry: wiec prosiłbym o pomoc. Program ma działać w ten sposób że po wpisaniu z klawiatury 3 liczb obojętnie jakich (jednocyfrowych) program ma je uporządkować w kolejności od najmniejszej do największej np. wpisuje 472 klikam powiedzmy jakiś klawisz i liczby pojawiają się w kolejności 247.
    Z góry dziękuje za wszelka pomoc i porady jakich komend użyć.

    Podkreślam że szukałem już wcześniej na elektrodzie jak i w googlach podobnych tematów lecz bez skutku :| Jeśli czegoś nie znalazlem (w co wątpie) prosze mi to udowodnić popierając jakimś sensownym linkiem...
  • Poziom 15  
    Witam.

    Jest pewnie wiele algorytmów sortowania, które można tu zastosować. Od czego zacząć? Myślę, że od wczytania danych i umieszczenia ich we właściwych komórkach pamięci (zmiennych). Później trzeba znaleźć najmniejszą z nich i ją wyświetlić. Potem szukamy większej i ją też wyświetlamy. Na koniec to samo z trzecią. Albo inaczej, ustawiam zmienną pomocniczą = 0, sprawdzam kolejno moje 3 zmienne, czy są równe wartości zmiennej pomocniczej, jeżeli tak to wyświetlam. W kolejnym przebiegu pętli podnoszę o 1 wartość zmiennej pomocniczej i ponawiam sprawdzanie. Kończę zabawę, gdy dojdę z wartością zmiennej pomocniczej do 9.
    Lepiej chyba najpierw wymyślić w ogółach jak rozwiązać problem (można sobie narysować grafy), a dopiero później ubrać to rozwiązanie w szaty konkretnego języka programowania.

    Pozdrawiam.
  • Poziom 8  
    Wiem tylko że można ten algorytm zrealizować za pomocą rozkazu CJNE korzystam z lektury autorstwa Gałka/Gałka "Podstawy Programowania Mikrokontrolera 8051" lecz jest ona napisana nieco nieprzystępnie;/ może zna ktoś lepsze podręczniki do programowania?
  • Poziom 14  
    Czy umiesz:
    1. Odczytać daną z klawiatury ?
    2. Wpisać ta daną do dowolnej komórki pamięci danych?
    3. Wyświetlić na wyświetlaczu LCD zawartość komórki pamięci?
    jeśli nie to musisz to opanować, a potem poczytać o sortowaniu np bąbelkowym
    pozdrawiam rs
  • Poziom 8  
    jeśli chodzi o używanie klawiatury matrycowej i wyswietlanie użytych liczb na wyswietlaczu to mniej wiecej wiem o co biega bo taki program mam w ksiażce napisany..a o co chodzi z tą segregacją bombelkową to jest to z cjne bo nauczyciel nie wspominał o czymś takim..?
  • Poziom 14  
    Sortowanie a nie segregacja.
    Jak już odczytasz dane z klawiatury, to musisz je poukładać wg zadanej kolejności tzn rosnąco lub malejąco. To układanie nazywa się sortowaniem.
    Sortowanie można przeprowadzić na kilka sposobów. Jednym z nich jest sortowanie bąbelkowe. Twoje zadanie polega teraz na zrozumieniu na czym ono polega, potem ułożeniu algorytmu i napisaniu programu, który może wykorzystywać rozkaz CJNE. Powodzenia rs
  • Poziom 8  
    romsik, a mogłbyś to mi trochę bardziej wytłumaczyć tzn. jakich rozkazów mam użyć i jak to mniej więcej ma wyglądać bo na razie to tylko same sprawy nazwałbym to ogólnikowe.. a mnie potrzebne są konkrety muszę to zrobić na ten poniedziałek :|
  • Poziom 14  
    musisz użyć następujących rozkazów:
    MOV
    CJNE
    JC (albo JNC)
    INC
    DJNZ



    MOV to nawet kilka razy :)
    a tak serio to ja za Ciebie zadania nie napiszę
    będą konkretne pytania to będą konkretne odpowiedzi.
    Sortowanie bąbelkowe polega na porównywaniu sąsiednich danych i przestawieniu ich jeżeli są ułożone w złej kolejności i tak po kolei sąsiad z sąsiadem. Dane są posortowane jeżeli po sprawdzeniu wszystkich danych nie było żadnego przestawiania
    pozdrawiam rs
  • Poziom 8  
    Code:
    LJMP   START
    
       ORG   100H
    START:

       LCALL   LCD_CLR
       MOV   DPTR,#KEY_CODE ;adres tablicy kodów

    LOOP_NO:
       MOV   R0,#CSKB0   ;adres klawiszy 0..7
       MOVX   A,@R0      ;odczyt stanu klawiszy
       CPL   A
       JNZ   KEY_YES      ;czy klawisz naciśnięty
       INC   R0      ;adres klawiszy 8..
       MOVX   A,@R0
       CPL   A
       JZ   LOOP_NO      ;czy klawisz naciśnięty

    KEY_YES:         ;eliminacja drgań styków
       MOV   R2,A      ;zapamiętaj stan klawiszy
       MOV   A,#10
       LCALL   DELAY_MS
       MOVX   A,@R0      ;odczyt stanu klawiszy
       CPL   A
       XRL   A,R2      ;porównaj z zapamiętanym
       JNZ   LOOP_NO      ;czy stan stabilny -
                ;klawisz nadal naciśnięty

       MOV   A,R2      ;stan klawiszy do A
             ;ustaw wstępną wartość R2
             ;zależnie od zestawu klawiszy
       MOV   R2,#07H      ;klawisze 8..
       CJNE   R0,#CSKB0,LOOP_NR
       MOV   R2,#0FFH   ;klawisze 0..7

    LOOP_NR:         ;przekodowanie klawisza
       INC   R2      ;kod 1z8 na numer 0..15
       RRC   A
       JNC   LOOP_NR

       MOV   A,R2      ;przekodowanie klawisza
       MOVC   A,@A+DPTR   ;na kody znaków wyśw. LCD
                ;za pomocą tablicy kodów
       LCALL   WRITE_DATA   ;wypisz kod klawisza
       
    LOOP_YES:
       MOV   R0,#CSKB0   ;adres klawiszy 0..7
       MOVX   A,@R0      ;odczyt stanu klawiszy
       CPL   A
       JNZ   LOOP_YES   ;czy klawisz zwolniony
       INC   R0      ;adres klawiszy 8..
       MOVX   A,@R0      ;odczyt stanu klawiszy
       CPL   A
       JNZ   LOOP_YES   ;czy klawisz zwolniony

       SJMP   LOOP_NO      ;powrót do oczekiwania
                ;na naciśnięcie klawisza

    ;**************************************
    ;Tablica kodów znaków LCD dla klawiszy
    KEY_CODE:
       DB   30H,31H,32H      ;0,1,2
       DB   33H,34H,35H      ;3,4,5
       DB   36H,37H,38H      ;6,7,8
       DB   39H,3CH,3EH      ;9,<,>
       DB   5EH,76H,7FH      ;^,v,Esc
       DB   0AEH         ;Enter

    gdzie ''wcisnąć'' i jak ma wyglądać ten program z sortowaniem ?


    Kod umieszczamy w znacznikach [code] - proszę o tym pamiętać.
    [zumek]
  • Poziom 14  
    zaraz po wpisaniu danych do pamięci :)
    pozdrawiam rs