LCD 2*16 asembler

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

LCD 2*16 asembler

Post autor: kaliska5 » 05 paź 2010, 19:39

Witam. Wiem ze pełno tematów na ten temat, czytałem większość ale nie znalazłem odpowiedzi.Walczę z w wyświetlaczem LCD 2*16 w asemblerze 8051. Wyświetlacz się inicjuje (znika górna linijka) ale nic na nim się nie wyświetla. Kontrast dobrze ustawiony.Oto kod:

Kod: Zaznacz cały

$MOD51                                 
$DEBUG(asm.aof)  
RS         equ     P1.0
E         equ     P1.1
LCDBUS     equ     P2
main:
call LCDINIT
call delay
mov A,#0
call LCDDDRAM
call delay
mov A,#11111111B
call LCDWRITECHAR
call delay
jmp koniec
;############################################################################
LCDDDRAM:
clr     E
clr     RS
setb     ACC.7
mov LCDBUS,A
SETB     E
ret
LCDWRITECHAR:
clr     E
setb     RS
mov LCDBUS,A
SETB     E
ret
;########################################################################
DELAY:
mov A,#50
MOV R3,A
L1:
MOV R2,#10
L2:
MOV R1,#48
L3:
DJNZ R1,L3
DJNZ R2,L2
DJNZ R3,L1
RET


LCDINIT:
CLR        RS
CLR        E 
CALL DELAY
CALL DELAY
mov LCDBUS,#00110000B
setb     E
clr     E
call DELAY
mov LCDBUS,#00110000B
setb     E
clr     E
call DELAY
mov LCDBUS,#00110000B ;3 razy to samo 
setb     E
clr     E
call delay
mov LCDBUS,#00101000B     ;function set
setb     E
clr     E
call delay
mov LCDBUS,#00001010B    ;display on/off
setb     E
clr     E
call delay
mov LCDBUS,#00000001B    ;clear
setb     E
clr     E
call delay
mov LCDBUS,#00000111B    ;entry mode
setb     E
clr     E
mov LCDBUS,#00010100B    ;shift
setb     E
clr     E
ret
;########################################################################################
koniec:
nop
jmp koniec
end

keruseykaryu

Post autor: keruseykaryu » 06 paź 2010, 5:44

Czemu stałe opóźnienia w inicjalizacji? Notka sterownika, tam jest opisana procedura soft resetu.

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 10 lis 2010, 14:54

Witam!
Czy kolega próbował wyświetlać napis, czy tylko jeden znak? Nie wczytywałem się dokładnie w cały listing, ale:
1. Można dodać jeszcze polecenie "Return Home" - kursor wraca na pozycję 1 wyświetlacza
2. UWAGA! Jeśli kolega chciał wyświetlić tylko jeden znak to nic dziwnego, że nie było go widać: zapis do DDRAM następuje przy OPADAJĄCYM zboczu strobu E - reasumując, w procedurze LCDWRITECHAR nigdy nie wyświetlisz ostatniego znaku zapisywanego ciągu, bo pin strobu E będzie w stanie wysokim, co nie pozwoli zapisać znaku do DDRAM.
PZDR GrzesiekG

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 10 lis 2010, 18:52

Juz dawno poradziłem sobie z tym. Rzeczywiście miałem na odwrót zapis (sygnał E).Juz wszystko działa.

ODPOWIEDZ