Bascom - czytanie znakow z tabeli
Masz problem? Zapytaj na forum elektroda.pl
From: "Robgold" <robgold ANTYSPAM _at_nospam_interia.pl>
Subject: Bascom - czytanie znakow z tabeli
Date: Mon, 17 Oct 2005 20:05:09 +0200
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 ?
From: BartekK <sibi_at_nospam_drut.org>
Subject: Re: Bascom - czytanie znakow z tabeli
Date: Tue, 18 Oct 2005 10:24:10 +0200
Robgold napisał(a):
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 - a nie Next L2 ?
Next V
patrz powyzej, moze ta glupia literowka jest powodem ?
--
| Bartlomiej Kuzniewski
| sibi_at_nospam_drut.org GG:23319 tel +48 696455098
| http://www.allegro.pl/show_user_auctions.php?uid=338173
From: "Robgold" <robgold ANTYSPAM _at_nospam_interia.pl>
Subject: Re: Bascom - czytanie znakow z tabeli
Date: Tue, 18 Oct 2005 15:51:26 +0200
Użytkownik "BartekK" <sibi_at_nospam_drut.org> napisał w wiadomości
news:dj2bgg$g4p$1_at_nospam_nemesis.news.tpi.pl...
Robgold napisał(a):
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 - a nie Next L2 ?
Next V
patrz powyzej, moze ta glupia literowka jest powodem ?
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 :|
From: "Piotrek Sz." <zumek.WYTNIJ_at_nospam_gazeta.pl>
Subject: Re: Bascom - czytanie znakow z tabeli
Date: Tue, 18 Oct 2005 18:58:10 +0000 (UTC)
Robgold <robgold ANTYSPAM _at_nospam_interia.pl> napisał(a):
..
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
Funkcja RESTORE , zawsze zeruje index na tablicę , czyli pobieranie danych z
tablicy przez READ , w każdym przypadku rozpoczynasz od 1-go elementu.
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 :|
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
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Robgold" <robgold ANTYSPAM _at_nospam_interia.pl>
Subject: Re: Bascom - czytanie znakow z tabeli
Date: Tue, 18 Oct 2005 22:03:52 +0200
Funkcja RESTORE , zawsze zeruje index na tablicę , czyli pobieranie danych
z
tablicy przez READ , w każdym przypadku rozpoczynasz od 1-go elementu.
Dzieki, przejrzalem na oczy teraz
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
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 ...
From: "Piotrek Sz." <zumek.WYTNIJ_at_nospam_gazeta.pl>
Subject: Re: Bascom - czytanie znakow z tabeli
Date: Tue, 18 Oct 2005 21:02:38 +0000 (UTC)
Robgold <robgold ANTYSPAM _at_nospam_interia.pl> napisał(a):
..
Hm...rpoblem jest taki ze napis ma miec rozna dlugosc .... hm..no ale to
jakies wyjscie jest ...
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.
Wczesniej mialem taka procedure :
Za cho...ę nie kumam co ta procedurka ma robić ??
Napis = "TEMPERATURA"
W ramie będzie : TEMPERATURA i na końcu "0" (zero)
X3 = Len(napis)
Wiadomo ...
For V = 1 To X3
To też ...
L1 = Mid(napis , V , 1)
Dla V1=1 -> L1=&H54 czyli literka "T"
For L2 = 1 To 6
Kolejna pętelka ...
Ud = Lookup(l2 , L1)
I tu , gdybyś nawet mógł pobrać bajt z L1, to index(L2) wynosi &H54(dec84) i w
"Ud" masz krzaki !!!
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
Aby "dobrać" się do odpowiedniej etykiety , gdzie umieściłeś "czcionkę" dla
"literek" , to musiałbyś zastosować mnuuuuustwo CASE
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 ...
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
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Robgold" <robgold ANTYSPAM _at_nospam_interia.pl>
Subject: Re: Bascom - czytanie znakow z tabeli
Date: Tue, 18 Oct 2005 23:21:38 +0200
Użytkownik "Piotrek Sz." <zumek.WYTNIJ_at_nospam_gazeta.pl> napisał w wiadomości
news:dj3nte$m24$1_at_nospam_inews.gazeta.pl...
Robgold <robgold ANTYSPAM _at_nospam_interia.pl> napisał(a):
..
Hm...rpoblem jest taki ze napis ma miec rozna dlugosc .... hm..no ale to
jakies wyjscie jest ...
A w czym problem ??
Byłbym zapomniał ;)
Jakiego uC wykorzystujesz ??
ATMega 8535 docelowo M16
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.
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
Aby "dobrać" się do odpowiedniej etykiety , gdzie umieściłeś "czcionkę"
dla
"literek" , to musiałbyś zastosować mnuuuuustwo CASE
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 ...
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 ..."
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