Mam taki problem, jest sobie wyswietlacz z N3310 zapiety do AVR ATmega8535 ... wszystko ladnie pieknie ...
w sekcji "data" mam wpisane czcionki .... wykombinowalem sobie taki programi ktory pobiera pewien ciag znakow typu string , czyta je zank po znaku i wysyla an LCD ..niestety nie dziala :(
Napis = "NAPIS" X3 = Len(napis) For V = 1 To X3 L1 = Mid(napis , V , 1) For L2 = 1 To 6 Ud = Lookup(l2 , L1) Udata Ud Next L22 Next V
Pytanie co jest nie tak ewentulanie jak wy sobie z takim problemem radzcie aby wypisac dowolny wyraz na taki LCD ?
Didn't find your answer? Ask the community — no account required.
B
BartekK
Robgold napisał(a):
patrz powyzej, moze ta glupia literowka jest powodem ?
I
invalid unparseable
U¿ytkownik "BartekK" snipped-for-privacy@drut.org napisa³ w wiadomo¶ci news:dj2bgg$g4p$ snipped-for-privacy@nemesis.news.tpi.pl...
Nie ..niestety ..to juz poprawilem ....
Nie wiem jak zmusic ten kompilator aby odczytal dany wyraz i potem odczytla z tabel co ma wyslac na wyswietlacza :|
obecnie wykombinowalem cos takiego :
Napis = "ACCD" ' napis do wyswietlenia
X3 = Len(napis) ' sprawdz dlugosc napisu i przypisz doz miennej x3 For V = 1 To X3 ' petla od 1 do dlugosci napisu( tutaj 4) L1 = Mid(napis , V , 1) ' przypisuje zmiennje L1 kolejne litery napisu w zaleznosci do petli v=1 to L1=A ; v=2 to L1=C itd... L3 = Asc(l1) ' przypisz do zmiennej l3 kod ASCII litery odczytanej Ls = L3 - 65 ' Ls = znak ASCII - 65 co dla litery A daje 0 Ls = Ls * 6 ' ustawia pcozatek petli dla litery A bedzie to 0 Le = Ls + 6 ' ustawia koniec petli dla odczytu litery z tabeli tutaj 6 Restore Asci2 For L2 = Ls To Le ' petla od Ls do Le ( dla literki A od 0 -6 ) Read Ud ' odczytaj talbice ASCII2 do zmiennej Ud Udata Ud ' wywolanie podprogramu wyslania danych do LCD Next L2
Next V
Asci2: Data &H00 , &H7C , &H12 , &H11 , &H12 , &H7C 'A Data &H00 , &H7F , &H49 , &H49 , &H49 , &H36 'B Data &H00 , &H3E , &H41 , &H41 , &H41 , &H22 'C Data &H00 , &H7F , &H41 , &H41 , &H41 , &H3E 'D Data &H00 , &H7F , &H49 , &H49 , &H49 , &H41 'e Data &H00 , &H7F , &H09 , &H09 , &H09 , &H01 'F Data &H00 , &H3E , &H41 , &H49 , &H49 , &H3A 'G
Niestety zamiast wyswietlic napis ACCD t dostaje A A A A i to z tkaimi spacjami :|
Funkcja RESTORE , zawsze zeruje index na tablicę , czyli pobieranie danych z tablicy przez READ , w każdym przypadku rozpoczynasz od 1-go elementu.
Jeden z możliwych sposobów: 'Utórz zmienną 10 znakową typu STRING(kompilator zarezerwuje 11 bajtów , bo STRING ZAWSZE jest zakończony "0"), oraz tablicę , która zjamuje ten sam obszar RAM-u co zmienna "Napis".Umożliwia to , bezpośredni dostęp do znaków w STRING-u jak do bajtów. Dim Napis As String * 10 At $60 , Tabela(11) As Byte At $60 Overlay Dim A As Byte , B As Byte , C As Byte , D As Byte Const Maxstring = 11 'maksymalny zadeklarowany rozmiar zmiennej "napis" +1 Napis = "gfedcba"
For A = 1 To Maxstring B = Tabela(a) If B = 0 Then Exit For 'koniez znaków w zmiennej "napis" B = B And &HDF 'skonwertuj do Upper B = B - 65 'odejmij bazę B = B * 6 'oblicz index dla tablicy Asci2 For C = 0 To 5 D = Lookup(b , Asci2) 'to_LCD(D) 'wyślij kolejno na LCD , 1...6 bajtów definicji znaku Incr B Next C Next A ;---------------- I to wszystko ;-)
Piotrek
I
invalid unparseable
Dzieki, przejrzalem na oczy teraz
Hm...rpoblem jest taki ze napis ma miec rozna dlugosc .... hm..no ale to jakies wyjscie jest ...
Wczesniej mialem taka procedure :
Napis = "TEMPERATURA" X3 = Len(napis) For V = 1 To X3 L1 = Mid(napis , V , 1) For L2 = 1 To 6 Ud = Lookup(l2 , L1) Udata Ud Next L22
Niestety w miejscu podstawienia do lookup funkcja ta jak gdyby nie umiala "lyknac" zmiennej L1 ktora jest typu string*1 Jesli udalo by mi sie to obejsc moglbym wysylac dowolny ciag znakow za kazdym razem pobierajc z tabelki tylko poszczegolna trzcionke. Oczywiscie wtedy kazda literka jest osobna tablica czyli
A w czym problem ?? Byłbym zapomniał ;) Jakiego uC wykorzystujesz ??
Zadeklaruj zmienna "Napis" o takiej długości , jaką ma najdłuższy napis do wyświetlenia np. Dim Napis As String * 50 At $60,Tablica(51) As Byte At $60 Overlay.
Za cho...ę nie kumam co ta procedurka ma robić ??
W ramie będzie : TEMPERATURA i na końcu "0" (zero)
Wiadomo ...
To też ...
Dla V1=1 -> L1=&H54 czyli literka "T"
Kolejna pętelka ...
I tu , gdybyś nawet mógł pobrać bajt z L1, to index(L2) wynosi &H54(dec84) i w "Ud" masz krzaki !!!
Aby "dobrać" się do odpowiedniej etykiety , gdzie umieściłeś "czcionkę" dla "literek" , to musiałbyś zastosować mnuuuuustwo CASE
Zrobisz jak zechcesz , ale ja nie widzę żadnego problemu. Zawsze też do dyspozycji stoi kod w Asm. Pamiętaj że:"Najlepsze rozwiązanie , to proste rozwiązanie ..."
Pzdr Piotrek
I
invalid unparseable
U¿ytkownik "Piotrek Sz." snipped-for-privacy@gazeta.pl napisa³ w wiadomo¶ci news:dj3nte$m24$ snipped-for-privacy@inews.gazeta.pl...
ATMega 8535 docelowo M16
Wstawilem teraz cos takiego i dziala :
Napis = "ACCD"
X3 = Len(napis) ' dlugosc napisu For V = 1 To X3 L1 = Mid(napis , V , 1) L3 = Asc(l1) Ls = L3 - 65 ' oblicz baze Ls = Ls * 6 For L2 = 1 To 6 Ud = Lookup(ls , Asci2) Udata Ud Incr Ls Next L2 Next V
Asci2: Data &H00 , &H7C , &H12 , &H11 , &H12 , &H7C 'A Data &H00 , &H7F , &H49 , &H49 , &H49 , &H36 'B Data &H00 , &H3E , &H41 , &H41 , &H41 , &H22 'C Data &H00 , &H7F , &H41 , &H41 , &H41 , &H3E 'D Data &H00 , &H7F , &H49 , &H49 , &H49 , &H41 'E
Tablica wyglada tak jak powyzej
Naprowadziles mnie z tym ze restore leci od poczatku. Narazie to dziala a ze przywiazuje sie do swoich rozwizan narazie pozostane przy nim ;) Jak padnie siegne po twoje zapewne rownie dobre ...zrestza kazde dzialajace jest dobre :)
W tej chwili podstawiam do Lookup wartosc startowa od ktorej ma odczytac 6 kolejnych znakow z tablicy i wepchnac na LCD i tyle :)
Dzieki duze za pomoc ..bo zrozumiem czyjegos programu i znalezienie bledow to duza sztuka
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.