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 

 wie sage ich diesem programm das Key7 und vschalter 8 dasselbe sind Kategorie: Programmierung Basic (von hecktor - 30.08.2005 23:47)
hecktor nutzt:  CC1-M-Unit V1.1
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

Bisherige Antworten:

Re: Key7 und wschalter 8 gleiche Funktion (von ManfredW - 31.08.2005 2:24)
    Re: Key7 und wschalter 8 gleiche Funktion (von hecktor - 31.08.2005 18:48)