
Lägre förklaring:
Jag har en MikroBasic-kod som bl.a består av en liten procedur för att skriva ut tecken på valfri plats på en LCD-display. Genom att skriva t.ex lcd_skriv("H", 3, %1100, %0001) så hamnar det ett H på kolumn 1, rad 2. (Trean betyder att jag vill ange en position.)
För att displayen ska visa innehållet i en variabel har jag tidigare skrivit:
Kod: Markera allt
ByteToStr(value_c, hela)
antal = length(hela)
for tecken = 0 to antal
skriv = hela[tecken]
lcd_skriv(skriv, rs_bit_c, var1_c, var2_c)
next tecken
För att slippa skriva det varje gång så ordnade jag en procedur så att man bara behöver skriva lcd_variabel2(value_c, 3, %1100, %0001). Den proceduren ser ut såhär:
Kod: Markera allt
sub procedure lcd_variabel2(dim value_c, rs_bit_c, var1_c, var2_c as byte)
ByteToStr(value_c, hela)
antal = length(hela)
for tecken = 0 to antal
skriv = hela[tecken]
lcd_skriv(skriv, rs_bit_c, var1_c, var2_c)
next tecken
end sub
Nu kommer vi till problemet: När jag har med raden lcd_variabel2(dim value_c, rs_bit_c, var1_c, var2_c as byte) så blir den översta raden på displayen full med svarta rutor. Den undre raden är tom. Om jag plockar bort kod-raden ovan så fungerar hela programmet (som bl.a visar en meny på displayen.)
Vad 17 beror detta fel på?
Jag har en liknande procedur som den ovan som fungerar fint. Den gör att man kan skriva ut innehållet i strängar på displayen:
Kod: Markera allt
sub procedure lcd_variabel(dim value_b as string[3], dim rs_bit_b, var1_b, var2_b as byte)
'Gör så att man kan skicka hela ORD till displayen.
'Skicka data om vilken position som texten ska skrivas ut på.
if rs_bit_b = 3 then
RS = 0 ' Instruktionsläge
LATA = var1_b
lcd_vanta
LATA = var2_b
lcd_vanta
RS = 1 ' Teckenläge
rs_bit = 1
end if
antal = length(value_b)
for tecken = 0 to antal
skriv = value_b[tecken]
lcd_skriv(skriv, rs_bit, var1_b, var2_b)
next tecken
end sub
Någon som har en idé på vad felet beror på?
Avslutar med koden för proceduren lcd_skriv:
Kod: Markera allt
sub procedure lcd_skriv(dim value, rs_bit, var1, var2 as byte)
'value = vad som ska skrivas.
'rs_bit = RS-läget. Om det är 3 så körs positions-delen.
'var = Tja, Vilken position det ska skrivas på.
' 1 för att skriva text. 0 för data.
if rs_bit = 1 then RS = 1 end if
if rs_bit = 0 then RS = 0 end if
'Skicka data om vilken position som texten ska skrivas ut på.
if rs_bit = 3 then
RS = 0 ' Instruktionsläge
LATA = var1
lcd_vanta
LATA = var2
lcd_vanta
RS = 1 ' Teckenläge
rs_bit = 1 ' För att resten ska flyta på som om man haft rs_bit = 1 från början.
end if
oversta = 0
understa = 0
flytta = 0
skicka = 0
'Tar value och delar till varsin variabel.
'T.ex om value = 01000010 så delas det så att oversta = 0100 och understa = 0010.
oversta = value >> 4
if rs_bit = 1 then skicka = oversta OR 16 end if' Lägg till en RS-bit.
LATA = skicka ' Skicka översta delen
lcd_vanta ' E och vänta
flytta = value << 4 'Flyttar fyra steg åt vänster för att de fyra översta ska försvinna.
understa = flytta >> 4 'Flytta tillbaka igen och nu har de tidigare översta försvunnit.
if rs_bit = 1 then skicka = understa OR 16 end if' Lägg till en RS-bit.
LATA = skicka ' Skicka understa delen
lcd_vanta ' E och vänta
end sub