Program dla mikrokontrolera DSM 51
Program dla mikrokontrolera DSM 51
Mam napisać program który wyświetla płynący w lewo/prawo tekst, lecz musi on zawierać minimum 40 znaków. Mam taki problem że wyświetla około 20 i kolejne przechodzą do następnej linijki, a ma sobie płynąć caly czas w jednej. Pomóżcie!
DSM51 - Przypominają mi się stare dobre czasy......
Przypomnij mi jaki tam wyświetlacz siedzi?? 2x16 znaków??
Napisz też trochę więcej szczegółów:
- dokładnie który z kolei znak trafia do następnej linii
- czy korzystasz ze standardowych procedur DSM51 do obslugi LCD??
Jeśli korzystasz z procedur dsm51 to z tego co pamiętam te procedurki automatycznie przenoszą text dłuższy niż 16 znaków do następnej linijki.
w takim wypadku będziesz musiał sam napisać obsługę wyświetlacza, nie całą ale samo wpisywanie danych.
Pozdro
Przypomnij mi jaki tam wyświetlacz siedzi?? 2x16 znaków??
Napisz też trochę więcej szczegółów:
- dokładnie który z kolei znak trafia do następnej linii
- czy korzystasz ze standardowych procedur DSM51 do obslugi LCD??
Jeśli korzystasz z procedur dsm51 to z tego co pamiętam te procedurki automatycznie przenoszą text dłuższy niż 16 znaków do następnej linijki.
w takim wypadku będziesz musiał sam napisać obsługę wyświetlacza, nie całą ale samo wpisywanie danych.
Pozdro
Zgodnie z dokumentacją układu HD44780 powinno wejść dokładnie 40 znaków w każdej linijce ale jak jest wyświetlach na jakimś zamienniku to może być przez to taki zonk.
Nie pozostaje nic innego jak programowo "zasymulować" przesuwanie tekstu, zwłaszcza że nma sę przewijać minimum 40 znaków.
Zrób tak:
-trzymaj cały tekst w pamięci ram począwszy od adresu zapisanego w którymś rejestrze lub akumulatorze
a-zapisz do wyświetlacza 16 znaków
b-odczekaj jakiś czs np. 500ms
c-inkrementuj adres
d-sprawdź czy adres po zwiększeniu jest mniejszy oprzynajmniej 16 od adresu ostatniego znaku
e-jeśli tak skok do a
f-jeśli nie ustaw adres na pzoczątek i skocz do a
jak chcesz to w wolnej chwili skrobnę algorytm w asm tylko musiałbym znac nazwę procedurki dms51 czekającej ileś tam czasu (szło to jakoś LJMP,DELAY_MS; a w akumulatorze dawało sie ile ms ma czekać)
Nie pozostaje nic innego jak programowo "zasymulować" przesuwanie tekstu, zwłaszcza że nma sę przewijać minimum 40 znaków.
Zrób tak:
-trzymaj cały tekst w pamięci ram począwszy od adresu zapisanego w którymś rejestrze lub akumulatorze
a-zapisz do wyświetlacza 16 znaków
b-odczekaj jakiś czs np. 500ms
c-inkrementuj adres
d-sprawdź czy adres po zwiększeniu jest mniejszy oprzynajmniej 16 od adresu ostatniego znaku
e-jeśli tak skok do a
f-jeśli nie ustaw adres na pzoczątek i skocz do a
jak chcesz to w wolnej chwili skrobnę algorytm w asm tylko musiałbym znac nazwę procedurki dms51 czekającej ileś tam czasu (szło to jakoś LJMP,DELAY_MS; a w akumulatorze dawało sie ile ms ma czekać)
Z góry dzięki, to ten program który wyświetla wyraz iprzesuwa w lewo, trzeba go jakos zmodyfikowac:
Proszę stosować znaczniki [code] oraz [/code]. marcing
[ Dodano: 2007-02-20, 10:42 ]
Sorry ze tak poganiam ale masz juz cos? Musze gojuz niedlugo oddac. Mam nadzieje ze dasz rade.
[ Dodano: 2007-02-22, 11:42 ]
No i co dasz rade to zrobic bo mam tylko jeszcze jeden dzien. W sobote muszeto oddac.
Kod: Zaznacz cały
LJMP START
ORG 100H
START:
MOV R0,#LCDWC ;adres wpisu instrukcji
MOV R1,#LCDRC ;adres odczytu stanu
MOV A,#1 ;kasuj dane wy�wietlacza
LCALL WRITE
MOV A,#0FH ;w�Ącz wy�wietlacz,kursor
LCALL WRITE ;i mruganie kursora
INC R0 ;adres wpisu danych
MOV DPTR,#TEXT ;adres tekstu
WRITE_TXT:
CLR A ;pobranie kolejnego
MOVC A,@A+DPTR ;znaku tekstu
JZ TEXT_END ;bajt=0 - koniec tekstu
ACALL WRITE ;wpisanie na wy�wietlacz
INC DPTR ;modyfikacja adresu
;pobrania kolejnego znaku
SJMP WRITE_TXT ;pobierz kolejny znak
TEXT_END:
DEC R0 ;adres wpisu instrukcji
LOOP: ;p©tla animacji
MOV A,#4
LCALL DELAY_100MS ;co 0.4 sek
MOV A,#18H ;obr˘t danych w lewo
LCALL WRITE ;na wy�wietlaczu LCD
SJMP LOOP
;**************************************
;Podprogram wpisu danych lub instrukcji
;na wy�wietlacz LCD
;Zak�ada prawid�owe adresy w R0 i R1
WRITE:
MOV R2,A ;przechowanie danych
BUSY:
MOVX A,@R1 ;odczytanie stanu
JB ACC.7,BUSY ;oczekiwanie na BUSY=0
MOV A,R2 ;odtworzenie danych
MOVX @R0,A ;wys�anie danych
RET
;**************************************
TEXT:
DB '"MicroMade" Systemy',0
Proszę stosować znaczniki [code] oraz [/code]. marcing
[ Dodano: 2007-02-20, 10:42 ]
Sorry ze tak poganiam ale masz juz cos? Musze gojuz niedlugo oddac. Mam nadzieje ze dasz rade.
[ Dodano: 2007-02-22, 11:42 ]
No i co dasz rade to zrobic bo mam tylko jeszcze jeden dzien. W sobote muszeto oddac.
Ostatnio zmieniony 17 lut 2007, 20:56 przez kamil23, łącznie zmieniany 1 raz.