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

DSM-51, asembler: Zamiana tekstu na LCD po naciśnięciu ENTER

mateo23_88 02 Mar 2008 19:04 3291 12
REKLAMA
  • #1 4866297
    mateo23_88
    Poziom 11  
    Posty: 42
    Witam,
    mam na zaliczenie z pracowni napisać taki program:
    na wyświetlaczu LCD w Dsm-51 w pierwszej lini ma być moje imie i nazwisko a w lini pod spodem imie i nazwisko kolegi z tym ze ma zawierac polskie znaki.z tym sobie umię poradzić. problem jest w tym ze po naciśnięciu klawisza ENTER na klawiaturze matrycowej imiona i nazwiska mają się zamienić miejscami (gorna linia na miesjce dolnej i na odwrót).mam już coś takiego i dalej nie rusze:


    LJMP START
    ORG 100H
    START:

    MOV R0,#LCDWC
    MOV R1,#LCDRC

    MOV A,#48H
    LCALL WRITE

    INC R0
    MOV DPTR,#LITERA
    MOV R3,#8


    LOOP:

    CLR A
    MOVC A,@A+DPTR
    LCALL WRITE
    INC DPTR
    DJNZ R3,LOOP

    DEC R0

    MOV A,#1
    LCALL WRITE

    MOV A,#0FH
    LCALL WRITE
    ;kursora

    INC R0
    MOV DPTR,#TEXT


    WRITE_TXT:
    CLR A
    MOVC A,@A+DPTR
    JZ TEXT_END
    LCALL WRITE
    INC DPTR
    SJMP WRITE_TXT

    TEXT_END:
    DEC R0
    MOV DPTR,#KEY_COD

    LOOP1:
    LCALL WAIT_KEY
    CJNE A,#0AEH,NO_DOWN
    DOWN:
    MOVX A,@R1
    JB ACC.7,DOWN
    MOVX A,@R1
    CPL ACC.6
    SETB ACC.7
    ACALL WRITE
    SJMP LOOP

    NO_DOWN:
    MOV R2,A
    MOVC A,@A+DPTR

    JZ WRITE_DAT

    ACALL WRITE
    SJMP LOOP1

    WRITE_DAT:
    MOV A,R2
    ADD A,#30H
    INC R0
    ACALL WRITE
    DEC R0
    SJMP LOOP

    ;**************************************
    ;Podprogram wpisu danych lub instrukcji
    ;na wyświetlacz LCD
    ;Zakłada prawidłowe adresy w R0 i R1

    WRITE:
    MOV R2,A
    BUSY:
    MOVX A,@R1
    JB ACC.7,BUSY
    MOV A,R2
    MOVX @R0,A
    RET
    ;**************************************
    ;Tabela przekodowania numeru klawisza
    ;na instrukcję, 0->klawisz jako znak
    KEY_COD:
    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
    ;**************************************
    ;Tabela bajtów definiujących literę 'ś'
    LITERA:
    DB 00000010B
    DB 00000100B
    DB 00001110B
    DB 00010000B
    DB 00001110B
    DB 00000001B
    DB 00011110B
    DB 00000000B

    ;**************************************
    TEXT:
    DB 'Imie i nazwisko '

    DB 'Mi',1,' Uszatek ',0




    Bardzo proszę o pomoc kogoś kto sie na tym zna, można nawet całkiem przerobić to co juz mam, byle było w asemblerze i pod 8051.


    [Temat poprawiłem. Regulamin, punkt 11.1. Mariusz Ch.]
  • REKLAMA
  • #2 4866393
    Michal19881
    Użytkownik obserwowany
    Posty: 1015
    Pomógł: 57
    Ocena: 62
    Wrzuć ten kod do Jagody i zobacz jak działa.
  • REKLAMA
  • #3 4868002
    mateo23_88
    Poziom 11  
    Posty: 42
    wiem jak działa.wyświetla sie tak jak trzeba, sa polski znaki ale nie mogę sobie poradzić z tą zamiana po naciśnieciu klawisza ENTER
  • REKLAMA
  • #4 4868010
    grzegorz568
    Poziom 10  
    Posty: 58
    Pomógł: 1
    Ocena: 5
    Witam!
    Nie znam dokładnie architektury dsm51 ale problem polega na tym, że dane obu kolesi masz w jednej tabelce i najprosciej byloby zobic druga tabelke np text1 gdzie dane bedziesz mial w odwrotnej kolejnosci. Po napisaniu na matrycy text uc czeka na kawisz enter, a kiedy go otrzyma rbi t samo co na podzatku (bez definiowania polsich znakow) z tym, ze do DPTR wpisyjesz adres text1 - juz
    Pozdro :D
  • #5 4869596
    mateo23_88
    Poziom 11  
    Posty: 42
    Jak zndefiniować ten klawisz "enetr"? Jakiego rozkazu użyć? Może jakiś przykład?
  • #6 4870437
    uzdzik
    Poziom 17  
    Posty: 275
    Pomógł: 13
    Ocena: 15
    sprawdź sobie jaką wartość masz w A po naciśnięciu ENTER a później zrób skok warunkowy
  • #7 4879870
    mateo23_88
    Poziom 11  
    Posty: 42
    Dobra powiem tak, jestem w tym zielony. jeśli ktoś mi pomoże a raczej napisze ten program tak zeby działał na Dsm-51 na podstawie tego co umieściłem na gorze lub całkiem od nowa to ofiaruję połowę punktów jakie posiadam jeśli program bedzie chodził prawidłowo.jestem laikiem w programowaniu i sam nie dam rady.
  • #8 4897347
    mateo23_88
    Poziom 11  
    Posty: 42
    ludzie proszę pomózcie, mam to w poniedzialek oddac gotowe.oddam wszystkie punkty jakie mam za zrobienie tego...

    Moderowany przez _PREDATOR_19:49 11.3.2008:

    Używaj DSM-51, asembler: Zamiana tekstu na LCD po naciśnięciu ENTER.
    Jesteż na forum od dawna, ostrzeżenie!
    Proszę w swoich wypowiedziach używać polskich znaków diakrytycznych - ą, ę, ś, ł itd.

  • #9 4897598
    Michal19881
    Użytkownik obserwowany
    Posty: 1015
    Pomógł: 57
    Ocena: 62
    Kolego naucz się edytować posty, ponadto nie licz na gotowca.
  • REKLAMA
  • #10 4900792
    mateo23_88
    Poziom 11  
    Posty: 42
    a co innego mi pozostało skoro tego nie umie i nie rozumie a muszę to zaliczyć, mam nadzieje że znajdzie się jakaś dobra dusza i mi pomoże. dla zaawansowanego programisty nie będzie to większym problemem.
  • #11 4900958
    Leoo
    Poziom 16  
    Posty: 155
    Pomógł: 11
    Ocena: 12
    Cz kod, który Kolega przedstawił jest działający, czy kompilacja przebiegła bezbłędnie?
  • #12 4901244
    mateo23_88
    Poziom 11  
    Posty: 42
    tak kompilacja przebiega bezbłędnie, wpisuje na wyświetlacz LCD zadane wyrazy ale nie mogę sobie poradzić z tym ENTER'em i zamianą miejscem po jego wciśnięciu.
  • #13 4902298
    Leoo
    Poziom 16  
    Posty: 155
    Pomógł: 11
    Ocena: 12
    Nie mogę oczywiście napisać za Kolegę ale może coś podpowiem.
    Klawisz "enter" jest zdefiniowany w tablicy KEY_COD: w ostatniej pozycji "DB 0AEH ;Enter". Najprostszą metodą będzie utworzenie drugiej tablicy TEXT z odwrotnym zapisem i przesłanie jej do LCD.
    Na razie program działa w pętli i cały czas wysyła dane do LCD (o ile się nie mylę), co wcale nie jest konieczne.

Podsumowanie tematu

LABEL_AI_GENERATED
Tematem dyskusji jest napisanie programu asemblerowego dla mikrokontrolera DSM-51 z wyświetlaczem LCD, który wyświetla w pierwszej linii imię i nazwisko autora, a w drugiej imię i nazwisko kolegi, z obsługą polskich znaków. Głównym problemem jest implementacja funkcji zamiany miejscami tych dwóch linii po naciśnięciu klawisza ENTER na klawiaturze matrycowej. Kod bazowy poprawnie wyświetla tekst z polskimi znakami, jednak brak jest obsługi zdarzenia naciśnięcia ENTER i odpowiedniej reakcji. Wskazano, że klawisz ENTER jest zdefiniowany w tablicy kodów klawiszy (KEY_COD) jako 0AEH. Proponowane rozwiązanie to utworzenie drugiej tablicy tekstowej z odwróconą kolejnością imion i nazwisk oraz po wykryciu naciśnięcia ENTER zmiana wskaźnika DPTR na tę tablicę i ponowne wyświetlenie tekstu. Zalecane jest sprawdzenie wartości w rejestrze A po naciśnięciu ENTER i wykonanie skoku warunkowego. Dyskusja podkreśla potrzebę obsługi przerwań lub pętli oczekującej na kod klawisza, a także unikanie ciągłego wysyłania danych do LCD bez potrzeby. Autor prosił o pomoc w napisaniu działającego programu, jednak otrzymał sugestie samodzielnej nauki i edycji kodu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA