Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Verstehe "And" und "OR" im Beispiel nicht Kategorie: Programmierung Basic (von Leo - 26.10.2007 18:18)
Hallo Heute!

Im folgenden Beispiel sind Befehlszeilen, die ich nicht nachvollziehen kann. Kann mir das jemand erläutern?
Ich habe die Befehlszeilen zu Anfang mit 3 Sternen markiert. Was bewirken die AND und OR Befehle hinter dem PUT? Was wird da gesendet?

Ich möchte Sonderzeichen erstellen und kann das Programm so nicht nachvollziehen.
Oder, weiß jemand was ich da noch einfügen muß um einen Pfeil nach oben und einen Pfeil nach unten darzustellen.

'-----------------------------------------------------------------
' CCTools I²C-Bus-Routinen für C-Control I V2.0
' zum PCF-LCD-Interface und I2C-Terminal
' CCTools 2005 (http://cctools.hs-control.de)
'-----------------------------------------------------------------
' Portbelegung des LCDs am PCFLCD-Interface und I2C-Terminal:
' PCF8574   LCD
'  P.0       RS  (Register Select)
'  P.1       R/W (Read/Write)
'  P.2       En  (Enable)
'  P.3       LCD-Beleuchtung
'  P.4       D4  (Datenleitung des LCDs, 4Bit-Mode)
'  P.5       D5  (Datenleitung des LCDs, 4Bit-Mode)
'  P.6       D6  (Datenleitung des LCDs, 4Bit-Mode)
'  P.7       D7  (Datenleitung des LCDs, 4Bit-Mode)
'-----------------------------------------------------------------


define SCL PORT[10]  ' Pull-Up mit je 10k empfohlen,
define SDA PORT[9] ' wenn die Busleitungen etwas länger gezogen werden (>1m)


define pd word[1]   'temporäres Word (nur für Printfunktion)
define pdlo byte[1] 'temporäres Byte (nur für Printfunktion)
define pdhi byte[2] 'temporäres Byte (nur für Printfunktion)
define i byte[3] 'temporäres Byte
define LCDData byte[4] 'temporäres Byte
define j byte[5] 'temporäres Byte (nur für Printfunktion)

'ASCII
Define A_ &H41 : Define B_ &H42 : Define C_ &H43 : Define D_ &H44 : Define E_ &H45
Define F_ &H46 : Define G_ &H47 : Define H_ &H48 : Define I_ &H49 : Define J_ &H4A
Define K_ &H4B : Define L_ &H4C : Define M_ &H4D : Define N_ &H4E : Define O_ &H4F
Define P_ &H50 : Define Q_ &H51 : Define R_ &H52 : Define S_ &H53 : Define T_ &H54
Define U_ &H55 : Define V_ &H56 : Define W_ &H57 : Define X_ &H58 : Define Y_ &H59 : Define Z_ &H5A
Define ak &H61 : Define bk &H62 : Define ck &H63 : Define dk &H64 : Define ek &H65
Define fk &H66 : Define gk &H67 : Define hk &H68 : Define ik &H69 : Define jk &H6A
Define kk &H6B : Define lk &H6C : Define mk &H6D : Define nk &H6E : Define ok &H6F
Define pk &H70 : Define qk &H71 : Define rk &H72 : Define sk &H73 : Define tk &H74
Define uk &H75 : Define vk &H76 : Define wk &H77 : Define xk &H78 : Define yk &H79 : Define zk &H7A
Define SPACE &H20 : Define MINUS &H2D : Define GLEICH &H3D : Define DPP &H3A
Define Dot &H2E
Define Line1 &H80 : Define Line2 &HC0 : Define Line3 &H94 : Define Line4 &HD4 'Für 4x20 LCD
'Define Line1 &H80 : Define Line2 &HC0 : Define Line3 &H90 : Define Line4 &HD0 'Für 4x16 LCD


define PCFLCD &h40 'PCFLCD an PCF8574 ohne A an 0.0.0
                   ' Kann auch als Variable definiert werden,
                   ' um zwischen mehreren Interfaces umzuschalten.


pause 1

'Programmbeginn

gosub PCFLCD_init

'Ausgabe von einzelnen Zeichen
 LCDData = T_ : gosub PCFLCD_Put
 LCDData = ek : gosub PCFLCD_Put
 LCDData = sk : gosub PCFLCD_Put
 LCDData = tk : gosub PCFLCD_Put

 LCDData = Line2 : gosub PCFLCD_CMD ' zu Zeile 2 des LCDs springen
 LCDData = C_ : gosub PCFLCD_Put
 LCDData = C_ : gosub PCFLCD_Put
 LCDData = T_ : gosub PCFLCD_Put
 LCDData = ok : gosub PCFLCD_Put
 LCDData = ok : gosub PCFLCD_Put
 LCDData = lk : gosub PCFLCD_Put
 LCDData = sk : gosub PCFLCD_Put
 LCDData = SPACE : gosub PCFLCD_Put
 LCDData = MINUS : gosub PCFLCD_Put
 LCDData = SPACE : gosub PCFLCD_Put
 LCDData = P_ : gosub PCFLCD_Put
 LCDData = C_ : gosub PCFLCD_Put
 LCDData = F_ : gosub PCFLCD_Put
 LCDData = L_ : gosub PCFLCD_Put
 LCDData = C_ : gosub PCFLCD_Put
 LCDData = D_ : gosub PCFLCD_Put

 pause 40
 LCDData = off : gosub PCFLCD_SetLight 'Beleuchtung ausschalten
 pause 20
 LCDData = on  : gosub PCFLCD_SetLight 'Beleuchtung einschalten
 gosub PCFLCD_Clear

'Ausgabe von Festtexten mit Hilfe von Tabellen
 j = 0 : gosub PCFLCD_Print 'Tabellenoffset
 LCDData = Line2 : gosub PCFLCD_CMD
 j = 9 : gosub PCFLCD_Print 'Tabellenoffset 9 Words = 18Byte

'Ausgabe des aktuellen Sekunden-Werts an Zeile 2 ab Spalte 12
 #loop
  LCDData = Line2+12 : gosub PCFLCD_CMD
  j = second : gosub PCFLCD_Zahl
  pause 10
 goto loop

end

'---------------------------------------
' Trick, um die Table-Funktion für Festtexte zu "mißbrauchen"
' max. 512 Byte pro Tabelle (1 Eintrag = 2 Byte)
' Achtung ! Experimentel !
table LCDtext
tabend
print "CCTools - PCFLCD"; 'Index 0 bis 8 Text (=16Zeichen, 18Byte)
                          'Index 0 lobyte = print-Token
                          'Index 0 hibyte = erstes Zichen
                          'Index 8 hibyte= ASCII 0 für "Text-Ende"
print "29.09.2005";       'Index 9 bis 14 = Text
                          'Index 9 lobyte = print-Token
                          'Index 9 hibyte = erstes Zichen
                          'Index 14 hibyte = ASCII 0 für "Text-Ende"


'---------------------------------------
' PCF-LCD-Routinen (für PCF-LCD-Interface & I2C-Terminal
'---------------------------------------
#PCFLCD_SetLight
 print "#ON_IIC#";
 print "#STOP#";
 print "#START#";
 put PCFLCD
 put ((LCDData<>0) and &h08)
 print "#STOP#";
 print "#OFF#";
return

#PCFLCD_init 'Initialisieren des Displays
 print "#ON_IIC#";
 print "#STOP#";
 print "#START#";
 put PCFLCD OR 1
 get i
 i=i AND &h08
 print "#STOP#";
 print "#START#";
 put PCFLCD
 'Function Set 8 Bit
*** put &h30 or i
*** put &h30 or i
***put &h34 or i
*** put &h30 or i
 pause 1
***put &h34 or i
***put &h30 or i
***put &h34 or i
***put &h30 or i

 ' Function Set 4 Bit
***put &h24 or i
*** put &h20 or i
 pause 1
 print "#STOP#";

 LCDData = &h28 : gosub PCFLCD_CMD 'Function Set, 2 Zeilen, 5x7 Punkte
 LCDData = &h0C : gosub PCFLCD_CMD 'Cursor Off, display On
 LCDData = &h06 : gosub PCFLCD_CMD 'Entry-Mode; inkrement, Cursor-shift

#PCFLCD_Clear 'Löschen des Displayinhalts
 LCDData = &h01 : gosub PCFLCD_CMD
 pause 1
return

#PCFLCD_CMD ' Kommandobyte senden
 print "#ON_IIC#";
 print "#STOP#";
 print "#START#";
 put PCFLCD OR 1
 get i
 ***i=i AND &h08
 print "#STOP#";
 print "#START#";
 put PCFLCD

***put (LCDData and &hF0) or &h4 or i
*** put (LCDData and &hF0) or i
*** put (LCDData shl 4) or &h4 or i
***put (LCDData shl 4) or i
 print "#STOP#";
 print "#OFF#";
return

#PCFLCD_PUT 'Zeichen senden
 gosub PCFLCD_Start
 gosub PCFLCD_SubPut
 print "#STOP#";
 print "#OFF#";
return

#PCFLCD_Print ' Zeichenfolge ausgeben.
 gosub PCFLCD_Start
 looktab LCDtext,j,pd
 if pdlo=0 then goto Printloopend
 #Printloop
  LCDData = pdlo : if pdlo<>31 then gosub PCFLCD_SubPut
  if pdhi=0 then goto Printloopend
  LCDData = pdhi : gosub PCFLCD_SubPut
  j=j+1
  looktab LCDtext,j,pd
 if pdlo<>0 then goto Printloop
 #Printloopend
 print "#STOP#";
 print "#OFF#";
return

#PCFLCD_SubPut
 put (LCDData and &hF0) or &h5 or i
 put (LCDData and &hF0) or &h1 or i
 put (LCDData shl 4) or &h5 or i
 put (LCDData shl 4) or &h1 or i
return

#PCFLCD_Zahl1 '1 stellige Zahl ausgeben
 gosub PCFLCD_Start
 goto PCFLCD_SubZahl1
#PCFLCD_Zahl2 ' 2 stellige Zahl ausgeben
 gosub PCFLCD_Start
 goto PCFLCD_SubZahl2
#PCFLCD_Zahl
 gosub PCFLCD_Start
 if j>99 then LCDdata=(j/100)+&h30 else LCDData=SPACE
 gosub PCFLCD_SubPut
#PCFLCD_SubZahl2 ' 2 stellige Zahl ausgeben
 if j> 9 then LCDData=((j/10) mod 10)+&h30 else LCDData=SPACE
 gosub PCFLCD_SubPut
#PCFLCD_SubZahl1 '1 stellige Zahl ausgeben
 LCDData=(j mod 10)+&h30
 gosub PCFLCD_SubPut
 print "#STOP#";
 print "#OFF#";
return

#PCFLCD_Start
 print "#ON_IIC#";
 print "#STOP#";
 print "#START#";
 put PCFLCD OR 1
 get i
 i=i AND &h08
 print "#STOP#";
 print "#START#";
 put PCFLCD
return

 Antwort schreiben

Bisherige Antworten:

Re: Verstehe "And" und "OR" im Beispiel nicht (von Jürgen - 27.10.2007 15:55)