jak wyświetlić na LCD wartość binarną z lini DATA ?


ma takie pytanie, jeśli w liniach data zapiszę sobie coś takiego:

dta1:
data &b01111111 , &b10111111 , &b11011111 , &b11101111 , &b11110111 , &b11111011 , &b11111101 , &b11111110

to jak wyświetlić dokładnie tak jak jest w liniach data?
muszę zadeklarować do tego zmienną typu string? jeśli zadeklaruję to jako string to kompilator wywala mi błąd. a jeśli zadeklaruję jako byte to wyświetla mi liczbę dziesiętną a nie binarną. jakieś propozycje?

napisałem dokładnie coś takiego:
jest to nawiązanie do programu kolegi o grze gdzie wykorzystujemy matrycę 8x8 i chciałem być pewny że odpowiednie porty przyjmują prawidłowe wartości.

$PROG &HFF , &HA4 , &HD9 , &H00    ' generated. Take care that the chip supports all fuse bytes.
 
 
$regfile = "m8def.dat"
$crystal = 8000000
 
CONFIG LCDPIN = PIN , DB4 = pind.4 , DB5 = pind.5 , DB6 = pind.6 , DB7 = pind.7 , E = pind.3 , RS = pind.2
Config Lcd = 16 * 2
config pinc.5 = input
config pinc.4 = input
 
 
p1 alias pinc.5                    'przycisk 1
p2 alias pinc.4                    'przycisk 2
 
dim d as byte
dim b as byte
dim data_1 as byte
dim data_2 as byte
dim punkt as byte
cursor off
 
punkt = 0
d = punkt / 8
b = 8 * d
b = punkt - b
cls
 
 
do
if p1 = 0 then
  incr punkt
  waitms 150
end if
if p2 = 0 then
  decr punkt
  waitms 150
end if
if punkt >= 64 then
   punkt = 0
end if
 
d = punkt / 8
b = 8 * d
b = punkt - b
 
data_1 = lookup(d , dta)
data_2 = lookup(b , dta1)
 
home
 
 
lcd "d=" ; d
locate 1 , 6
lcd data_1 ; "   "
lowerline
 
 
lcd "b=" ; b
locate 2 , 6
lcd data_2 ; "  "
 
loop
end
 
 
dta:
data &b10000000 , &b01000000 , &b00100000 , &b00010000 , &b00001000 , &b00000100 , &b00000010 , &b00000001
 
 
dta1:
data &b01111111 , &b10111111 , &b11011111 , &b11101111 , &b11110111 , &b11111011 , &b11111101 , &b11111110




Portret użytkownika rafliczek22

Wyświetlać po kolei bity

Wyświetlać po kolei bity bajtu czyli tak np.:

data.7;data.6;data.5;data.4;data.3;data.2;data.1;data.0

wtedy po kolei na lcd będziesz widzieć poszczególne bity, a tak w ogóle to robisz tak dla pogłębienia wiedzy, czy będzie to w jakimś konkretnym projekcie?

Portret użytkownika rafliczek22

Wyświetlać po kolei bity

Wyświetlać po kolei bity bajtu czyli tak np.:

data.7;data.6;data.5;data.4;data.3;data.2;data.1;data.0

wtedy po kolei na lcd będziesz widzieć poszczególne bity, a tak w ogóle to robisz tak dla pogłębienia wiedzy, czy będzie to w jakimś konkretnym projekcie?

EDIT:

Oczywiście data to zmienna którą chcesz wyświetlić, ale tak samo możesz zrobić z WORD-em, tylko musisz zacząć od:
data.15;data.14;data.13 itd...
Może istnieje łatwiejszy sposób ale mi taki na myśl nie przychodzi.

Portret użytkownika rafliczek22

Znalazłem właśnie w helpie

Znalazłem właśnie w helpie łatwiejszy sposób:

tworzysz zmienną string*9 i zapisujesz; string=bin(zmienna), możesz też obejrzeć jak wygląda w hexie; string*3, i zapisujesz string=hex(zmienna)

Portret użytkownika matrix

podziękowania

chciałem podziękować koledze wyżej. działa jak złoto. dla chętnych soft niżej. udało mi się użyć tylko jednej zmiennej typu string do obliczania dwóch różnych danych.

$PROG &HFF , &HA4 , &HD9 , &H00    ' generated. Take care that the chip supports all fuse bytes.
 
 
$regfile = "m8def.dat"
$crystal = 8000000
 
'===========================
'=== konfiguracje portow ===
'===========================
 
CONFIG LCDPIN = PIN , DB4 = pind.4 , DB5 = pind.5 , DB6 = pind.6 , DB7 = pind.7 , E = pind.3 , RS = pind.2
Config Lcd = 16 * 2
config pinc.5 = input
config pinc.4 = input
 
'==============
'=== aliasy ===
'==============
 
p1 alias pinc.5                    'przycisk 1
p2 alias pinc.4                    'przycisk 2
 
'============================
'=== deklaracje zmiennych ===
'============================
 
dim d as byte                      'udawany port B
dim b as byte                      'udawany port D
dim data_1 as byte
dim data_2 as byte
dim punkt as byte
dim tekst as string * 9            'zmienna do wyswietlania wartosci binarnej poru
cursor off
 
punkt = 0                          'nadaje zmiennej wartosc 0
cls
 
'=============================
'=== petla glowna programu ===
'=============================
 
do
if p1 = 0 then
  incr punkt
  waitms 150
end if
if p2 = 0 then
  decr punkt
  waitms 150
end if
if punkt >= 64 then
   punkt = 0
end if
 
d = punkt / 8                      'dziele zmienna przez 8 zeby uzyskac ktore miejsce z tabeli trzeba pobrac
b = 8 * d                          'otrzymany wynik mnoze x 8
b = punkt - b                      'a nastepnie od zmiennej punkt odejmuje ow wynik
                                   'w ten sposob otrzymuje miejsce w drugiej tabeli
home
 
data_1 = lookup(d , dta)           'pobieram wartosci z tabeli pierwszej
tekst = bin(data_1)                'i do zmiennej tekst przypisuje binarna wartosc zmiennej data_1
lcd "d=" ; d                       'wyswietlam dziesietna wartosc portu d
locate 1 , 6
lcd tekst                          'a nastepnie wartosc binarna za pomoca zmiennej tekst
lowerline
 
data_2 = lookup(b , dta1)          'pobieram wartosci z tabeli drugiej
tekst = bin(data_2)                'i do zmiennej tekst przypisuje binarna wartosc zmiennej data_2
lcd "b=" ; b                       'wyswietlam dziesietna wartosc portu b
locate 2 , 6
lcd tekst                          'a nastepnie wartosc binarna za pomoca zmiennej tekst
 
loop
end
 
'==========================
'=== linie polecen DATA ===
'==========================
 
dta:
data &b10000000 , &b01000000 , &b00100000 , &b00010000 , &b00001000 , &b00000100 , &b00000010 , &b00000001
 
 
dta1:
data &b01111111 , &b10111111 , &b11011111 , &b11101111 , &b11110111 , &b11111011 , &b11111101 , &b11111110