Bascom - czytanie znakow z tabeli

Oct 17, 2005 6 Replies

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 ?



Robgold napisał(a):

patrz powyzej, moze ta glupia literowka jest powodem ?

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 :|

Robgold <robgold ANTYSPAM @interia.pl> napisał(a):

..

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

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: Data &H00 , &H7C , &H12 , &H11 , &H12 , &H7C B: Data &H00 , &H7F , &H49 , &H49 , &H49 , &H36 C: Data &H00 , &H3E , &H41 , &H41 , &H41 , &H22 D: Data &H00 , &H7F , &H41 , &H41 , &H41 , &H3E E: Data &H00 , &H7F , &H49 , &H49 , &H49 , &H41 F: Data &H00 , &H7F , &H09 , &H09 , &H09 , &H01

itd ...

Robgold <robgold ANTYSPAM @interia.pl> napisał(a):

..

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

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