INFO - FAQ - CC2-Forum - CCPro-Forum |
|
heute das kleinere problem wie sage ich diesen programm das key7 und vschalter8 dasselbe sind oder wie fĂŒge ich dem vschalter 8 die selbe funktion an. danke schonmal '---- LCD PARMAMETERS ----- define LINE byte[1] define CHAR byte[1] define POS byte[1] define BARS byte[1] define BIN byte[1] define DEZ byte[1] '-- LCD SYSTEM ADDR ----- define LCD_INIT &H101 define LCD_CLR &H11D define LCD_LINE1 &H125 define LCD_LINE2 &H12A define LCD_POSL1 &H12F define LCD_POSL2 &H133 define LCD_SCRL &H13B define LCD_SCRR &H140 define LCD_BAR &H145 define LCD_BIN &H154 define LCD_DEZ &H1C3 define LCD_WRT &H1A4 define LCD_PRINT &H179 '-------------------------- '------ I/O PORTS --------- '-------------------------- 'define lcd_port byteport[2] 'define lcd_rs port[14] 'define lcd_rw port[13] 'define lcd_e port[15] define wiled1 port[1] define waled2 port[2] define schrled3 port[3] define schlled4 port[4] define ventled5 port[5] define pumpled6 port[6] define vschalter7 port[7] define wschalter8 port[8] define key_val ad[8] '-------------------------- '---- Variable ------- '-------------------------- define ProgNr byte[2] define Wartezeit byte[3] ' define Schritt byte[4] define x byte[5] define Bytefrei6 byte[6] define wert1 byte[7]'Schmierbyte define wert2 byte[8]'Schmierbyte define wert12 word[4]'Schmierword = byte 7,8 define wert3 byte[9] 'Schmierbyte define key byte[10]'------- KEY DECODER --------- define Bit81_88 byte[11]'11 (statische Bits)<<(bit 81 bis 88)<<<<<< define Zaehler1 byte[12] define Zaehler2 byte[13] define Zykluszeit byte[14]'Timer-Differenz define TimerAlt word[8]'= Byte 15,16 (Altwert) define wert1Bit0 Bit [49]'fĂŒr bit-Handling des byte wert1 define wert1Bit1 Bit [50] define wert1Bit2 Bit [51] define wert1Bit3 Bit [52] define wert1Bit4 Bit [53] define wert1Bit5 Bit [54] define wert1Bit6 Bit [55] define wert1Bit7 Bit [56] 'bits zu Byte 11 define FlankeZeitpuls Bit[81]'Flankenbit define TastaturFlanke Bit[82]'Flankenbit define BitFrei3 Bit[83]' define BitFrei4 Bit[84]' define BitFrei5 Bit[85]' define BitFrei6 Bit[86] define SekPuls Bit[87]' define LoeschLCD Bit[88] 'Aufruf LCD löschen sys lcd_init sys lcd_clr 'Vorbesetzung Zaehler1 = 127 Zaehler2 = 65 '######################################################## #Anfang ' Hauptprogramm if ProgNr < 1 then goto ende12 ' 3.1 Zeittakt SekPuls = OFF wert1 = second if wert1Bit0 = FlankeZeitpuls then goto ende1 FlankeZeitpuls = wert1Bit0 SekPuls = ON #ende1 ' 3.2 Steuerprogramm ' *** Schrittsteuerung mit Wartezeiten *** 'In jedem Schritt kann eine Wartezeit gesetzt werden, die rĂŒckwĂ€rts gegen Null lĂ€uft. 'Nach Ablauf der Wartezeit wird der eingeschaltete Schritt bearbeitet. if (Wartezeit = 0) then goto Schritt 'Wartezeit abgelaufen? ja ---> geh zu Schritt if (sekpuls = OFF) then goto Ende12 Wartezeit = Wartezeit -1 'Wartezeit minus 1 sek (Zeittakt siehe oben) goto Ende12 #Schritt ' Schrittregister bei Wartezeit NULL if (Schritt = 1) then goto Schritt1 ' if (Schritt = 2) then goto Schritt2 ' if (Schritt = 3) then goto Schritt3 ' if (Schritt = 4) then goto Schritt4 ' if (Schritt = 5) then goto Schritt5 ' if (Schritt = 6) then goto Schritt6 ' if (Schritt = 7) then goto Schritt7 ' if (Schritt = 8) then goto Schritt8 ' Schritt = 1 goto Ende12 #Schritt1 ' wait wschalter8 Goto Schrittweiter #Schritt2 ventled5 = OFF ' Wartezeit = 10 'x 1 sec Wartezeit setzen Goto Schrittweiter #Schritt3 ' pumpled6 = OFF : wiled1 = ON : schrled3 = ON ' Wartezeit = 10'x1 sec Wartezeit setzen Goto Schrittweiter #Schritt4 ' schrled3 = OFF : wiled1 = OFF : waled2 = ON' Wartezeit = 10'x1 sec Wartezeit setzen Goto Schrittweiter #Schritt5 ' waled2 = OFF :wiled1 = ON : schlled4 = ON ' Wartezeit = 10'x1 sec Wartezeit setzen Goto Schrittweiter #Schritt6 schlled4 = OFF : wiled1 = OFF :waled2 = ON Wartezeit = 10'x1 sec Wartezeit setzen Goto Schrittweiter #Schritt7 waled2 = OFF :ventled5 = ON Wartezeit = 5'x1 sec Wartezeit setzen Goto Schrittweiter #Schritt8 pumpled6 = ON Wartezeit = 5'x1 sec Wartezeit setzen wait NOT wschalter8 #Schrittweiter Schritt = Schritt + 1 ' Schritt-Nummer um 1 erhöhen #Ende12 'Messung der Zykluszeit des Programms 'Das Messprogramm bildet Differenz des aktuellen Timer-Werts zum vorherigen gespeicherten Altwert. Zykluszeit = (Timer - TimerAlt)' * 20 ' Anzeige *20 in Millisekunden TimerAlt = Timer ' Bildung des Altwerts gosub Tastatur ' Abfrage Tastatur Goto LCD' Anzeigen (LCD endet mit goto Anfang) '######################################################## ' *** Unterprogramme *** #Tastatur gosub key_decode 'Abfrage Taste gedrĂŒckt, sichere Version <<<<<<<<<<<<<<<<<< if key < 199 then goto Taste ' >199=keine Taste, 0 bis 9=Ziffer, 10=* 11=# TastaturFlanke = OFF x = 1 Return #Taste 'Auswertung und Befehlsgabe der Tastatur if key =3 then goto plusvar'PlusZaehler2 'ZĂ€hler stellen (Takten) if key =6 then goto MinusZaehler2 'ZĂ€hler stellen (Takten) if ProgNr >< 1 then goto TastaturFlanke' 'if key =2 then goto PlusZaehler1 'ZĂ€hler stellen (Takten) ' if key =5 then goto MinusZaehler1 'ZĂ€hler stellen (Takten) #TastaturFlanke' if TastaturFlanke = ON then Return ' Einzelschritt TastaturFlanke = ON 'nachfolgende Tasten lösen Einzelschritt aus if key =1 then goto ProgNrPlus 'Programm Nr stellen (Einzelschritt) 'if key =2 then goto PlusZaehler2 'ZĂ€hler stellen (Einzelschritt) 'if key =5 then goto MinusZaehler2 'ZĂ€hler stellen (Einzelschritt) if ProgNr >< 1 then return ' Relais schalten ' Relais EIN hier ists interissant 'if key = 8 then schrled3 = OFF : schlled4 = OFF ' Relais AUS if key = 7 then schrled3 = OFF : schlled4 = OFF :wiled1 = OFF : waled2 = ON 'if key = 7 then vschalter7 = not vschalter7 'Relais EIN-AUS 'if key >< 8 then return 'alternativ aufwĂ€ndiger 'if vschalter7 = OFF then vschalter7 = ON else vschalter7 = OFF 'Relais EIN-AUS return #key_decode 'Umsetzungstabelle auf Tastencode Applikationboard (Version Wilzeck) key=255 ' Vorbesetzung Anfang: (keine Taste gedrĂŒckt 240 bis 255) #nochmal wert3 = key_val if wert3 > 240 then return ' keine Taste gedrĂŒckt Key = key -1 '(SchleifenzĂ€hler) if wert3 = key_val then goto TasteAusgeben 'Wert stabil? if Key > 240 then goto nochmal ' max. 15-mal prĂŒfen return ' dann Abbruch #TasteAusgeben if wert3>=0 then key=10 ' KEY * if wert3>14 then key=7 ' KEY if wert3>36 then key=4 ' KEY if wert3>57 then key=1 ' KEY if wert3>70 then key=0 ' KEY if wert3>100 then key=8 ' KEY if wert3>122 then key=5 ' KEY if wert3>142 then key=2 ' KEY if wert3>163 then key=11 ' KEY # if wert3>183 then key=9 ' KEY if wert3>204 then key=6 ' KEY if wert3>225 then key=3 ' KEY return #LCD if LoeschLCD = OFF then goto Anzeige ' Aufruf LCD löschen (bei PrgPlus) LoeschLCD = OFF :sys LCD_CLR #Anzeige if ProgNr =1 then goto LCDprg1 if ProgNr =2 then goto LCDprg2 'u.s.w. SYS LCD_LINE1:sys LCD_PRINT:print" WEIL NICHT ALLES IN EINE ZEILE PASST": for wert1=1 to 22 SYS LCD_SCRL:pause 10 sys LCD_LINE1 ' Start Zeile 1 wert1 = ProgNr :gosub Zahl1' 'Spalte 1 sys LCD_PRINT:print" dr": gosub ue : sys LCD_PRINT:print"cke Taste 1" sys LCD_LINE2 ' Start Zeile 2 sys LCD_PRINT:print"f":gosub ue:sys LCD_PRINT:print"r Prog 1 bis 7" goto Anfang ' Ende Hauptprogramm #LCDprg1 sys LCD_LINE1 ' Start Zeile 1 DEZ = ProgNr : SYS LCD_DEZ 'Spalte 1 sys LCD_PRINT:print" warte " DEZ = Wartezeit : SYS LCD_DEZ : sys LCD_PRINT:print" sec" goto LCD67' Ende Hauptprogramm #LCDprg2 sys LCD_LINE1 ' Start Zeile 1 DEZ = ProgNr : SYS LCD_DEZ 'Spalte 1 sys LCD_PRINT:print" warte " DEZ = Wartezeit : SYS LCD_DEZ : sys LCD_PRINT:print" sec" goto LCD67 #LCD67 sys LCD_LINE2 ' Start Zeile 2 sys LCD_PRINT:print"Schritt " DEZ = Schritt : SYS LCD_DEZ goto Anfang ' Ende Hauptprogramm #ProgNrPlus ProgNr = ProgNr + 1 LoeschLCD = ON ' Aufruf LCD löschen (jeweils bei ProgNrPlus) if ProgNr > 8 then ProgNr = 1 return #PlusZaehler1 ' Zaehler1 = Zaehler1 +1 :return #MinusZaehler1 ' Zaehler1 = Zaehler1 -1 :return #PlusZaehler2 ' Zaehler2 = Zaehler2 +1 :return #MinusZaehler2 ' Zaehler2 = Zaehler2 -1 :return #PlusVar ' Zaehler2 = Zaehler2 + x x = x + 1 return 'Ausgabe von Zahlen im word #Zahl5 ' 5-stellige Zahl ausgeben if wert12 <0 then gosub Minus else gosub space wert12 = abs (wert12) if wert12 >= 10000 then CHAR = wert12 /10000 +&H30 else CHAR = &H20 SYS LCD_WRT #Zahl4 ' 4-stellige Zahl ausgeben if wert12 >= 1000 then CHAR = wert12 MOD 10000 /1000 +&H30 else CHAR = &H20 SYS LCD_WRT #Zahl3Word ' 3-stellige Zahl ausgeben (wert gröĂer 255) if wert12 >= 100 then CHAR = wert12 MOD 1000 /100 +&H30 else CHAR = &H20 SYS LCD_WRT if wert12 >= 10 then CHAR = wert12 MOD 100 /10 +&H30 else CHAR = &H20 SYS LCD_WRT CHAR = wert12 MOD 10 +&H30 SYS LCD_WRT Return 'Ausgabe von Zahlen im Byte, fĂŒhrende Null wird Space #Zahl3 ' 3-stellige Zahl ausgeben (Byte max 255) if wert1 >= 100 then CHAR = wert1/100 +&H30 else CHAR = &H20 'Space SYS LCD_WRT #Zahl2 ' 2-stellige Zahl ausgeben if wert1 >= 10 then CHAR = wert1 MOD 100 /10 +&H30 else CHAR = &H20 SYS LCD_WRT #Zahl1 ' 1-stellige Zahl ausgeben CHAR = wert1 mod 10 +&H30 SYS LCD_WRT : Return 'Ausgabe von Zahlen im Byte als HEX-Zahl #Hex '2-stellig CHAR = wert1 /16 'linkes Nibble if CHAR < 10 then CHAR = CHAR +&H30 else CHAR = (CHAR -10)+&H41 SYS LCD_WRT CHAR = wert1 MOD 16 'rechtes Nibble if CHAR < 10 then CHAR = CHAR +&H30 else CHAR = (CHAR -10)+&H41 SYS LCD_WRT : Return #Space CHAR = &H20 :SYS LCD_WRT :Return #Plus CHAR = &H2B :SYS LCD_WRT :Return #Minus CHAR = &H2D :SYS LCD_WRT :Return #ae CHAR = &HE1 :SYS LCD_WRT :Return #oe CHAR = &HEF :SYS LCD_WRT :Return #ue CHAR = &HF5 :SYS LCD_WRT :Return goto Anfang '--------------- DISPLAY TREIBER ---------------------- syscode "lcddrv11.s19" |
Antwort schreiben |