@ Christopher1
danke, es funktioniert!))
Hi,
du musst dafür natürlich das Config machen, also µC auswählen und so.
Du musst das mit AND in einer Zeile schreiben, außerdem musst du das mit END abschießen.
Schreib das Programm das nächste mal bitte in Code Tags.
Hier der Code (hab ihn nicht getestet):
Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1000000 Schalter1 Alias Pina.0 Schalter2 Alias Pina.1 Schalter3 Alias Pina.2 Schalter4 Alias Pina.3 Config Pina.0 = Input Config Pina.1 = Input Config Pina.2 = Input Config Pina.3 = Input Do Cls If Pina.0 = 1 Then Lcd "3" Else Lcd "0" End If Waitms 100 Loop End
MfG Christopher \/
@ Christopher1
danke, es funktioniert!))
...genau - und damit kannst Du die Sache ziemlich vereinfachen. Du definierst eine Variable als Byte, setzt die Variable gleich PinA und setzt die ersten 4 Bits auf 0 (falls pinA.4 bis PinA.7 anderweitig besetzt sind). Damit hat Deine Variable genau den Wert, der auf den Ports A.0 bis A.3 in binärer Form anliegt. D.h. sind alle 4 Pins high, wäre die Variable 15, sind A.0, A.1 und A.3 high wäre die Variable 11 usw - ganz ohne UND-Verknüpfung. Den Wert der Variablen kannst Du dann direkt via LCD ausgeben!wie man merkt ist das ein Binäncode.
Als Code könnte das so aussehen:
Die Geschichte mit "Zahl = Zahl AND &B00001111 setzt die bits 7-4 der Variablen Zahl auf 0 (x UND 0 ergibt immer 0), während sie die bits 3-0 unbeinflusst lässt (x UND 1 ergibt immer x).Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1000000 Config LCD.... Dim Zahl as byte Do Zahl = Pina Zahl = Zahl AND &B00001111 LCD Zahl Loop
Alles klar?![]()
Daniel
> Alles klar?
nicht alles!))
ich verwende Port A.
und davon nur 4 pins. Also pa0, pa1, pa2, pa3.
es soll immer nur eine einstellige Zahl sein.
also nur 0-9.
pa0 =1 lcd-1
pa1 =1 Lcd-2
pa0+1 =1 Lcd-3
pa2=1 Lcd-4
pa2+0 =1 Lcd-5
u.s.w. bis 9.
Wenns dir nichts ausmacht, kannst du den code ausschnitt posten?
Währe sehr dankbar.
sorry für mein letzten post))))
also es funktioniert
Danke
PortA ist fertig.
wollte jetzt selbstständig weiter machen mit portD.
es gibt aber ein problem.
so sieht mein Quellcome aus:
$regfile = "m16def.dat"
$crystal = 8000000
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
Initlcd
Dim Zahl As Byte
Dim Zahl1 As Byte
Cls
Cursor Off
Do
Cls
Zahl = Pina
Zahl = Zahl And &B00001111
Zahl1 = Pind
Zahl1 = Zahl1 And &B00001111
Locate 1 , 1
Lcd Zahl
Locate 1 , 2
Lcd Zahl1
Waitms 50
Loop
End
was habe ich nun falsch gemacht?
Auf den ersten Blick gar nichtswas habe ich nun falsch gemacht?![]()
Was passiert denn genau? Oder was passiert nicht?
Vielleicht sind die 50 Millisekunden zu kurz - LCD-Displays brauchen verhältnismäßig viel Zeit, bis sie sichtbar (!) anzeigen. Hattest Du diese kurze Verzögerung auch drin, als es mit Port A funktionierte?
Ansonsten verlängere das doch mal auf mindestens 200ms. Und wenn´s dann noch nicht klappt, schreib doch mal was passiert!
Das problen ist gelöst.
aber noch ein ist da.
gibt es sowas auch für einen Grey-Code?
Danke
Auch wenn ich ihn noch nie benutzt habe: Der Befehl "GRAY2BIN" könnte Dir weiterhelfen. Ist in der Bascom-Hilfe in gewohnter Qualität beschrieben!
und sowas wie "GRAY2DEZ" gibt es nicht?
Nö - weil Mikrocontroller ausschließlich im Binärsystem rechnen und arbeiten![]()
Am Beispiel der Zahl 4 (im Gray-Code 0110):
PinA.2 und A.1 sind 1, der Rest ist 0.
Zahl = Pina
Zahl = Zahl AND &B00001111
LCD Zahl würde jetzt "6" auf das Display bringen.
Zahl = GRAY2BIN(Zahl) macht aus der Gray-4 (00000110) die Binär-4 (00000100)
LCD Zahl bringt jetzt "4" auf´s Display.
Nochmal: Dezimalzahlen kennt nur das Display! Im Controller wird immer mit Bytes gerechnet.
Lesezeichen