INFO - FAQ - CC2-Forum - CCPro-Forum |
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 |