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 

 Re: 3 FRAGEN ZU ZEITSCHALTPROGRAMM Kategorie: Programmierung Basic (von hecktor - 4.09.2005 0:20)
 Als Antwort auf Re: 3 FRAGEN ZU ZEITSCHALTPROGRAMM von ManfredW - 2.09.2005 16:20
hecktor nutzt:  CC1-M-Unit V1.1

> Hallo,
> Du benutzt ein Programm von meiner homepage.
> Die Antworten habe ich eingefügt.
> MfG ManfredW
> >

ERSTMAL EIN BERICHT VOM ALTEN PROGRAMM DANACH EINE WEITERE KLEINE FRAGE ZU
DER NEUEN PROGRAMMVERSION. ICH GEBE NUN SEIT TAGEN DIE VERSCHIEDENEN VERSUCHE IN DIE C-CONTROL EIN  SIND NICHT WENIGE ABER ICH HOFFE MIT DEINER HILFE
MANFRED WIRDS SCHON WERDEN    (ENDSCHULDIGE DAS ICH DEN MÜLL ZWISCHEN DEN ZEILEN NOCH NICHT AUSSORTIERT HABE)                                      DANKE NOCHMALS



> >
> > > > define  LINE     byte[1]
> > define  CHAR     byte[1]
> > define  POS      byte[1]
> > define  BARS     byte[1]
> > define  BIN      byte[1]
> > define  DEZ      byte[1]
> > 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
> > 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]
> > define ProgNr       byte[2]
> > define Wartezeit    byte[3] '
> > define Schritt      byte[4]
> > define x    byte[5]
> > define Bytefrei6    byte[6]
> > define wert1        byte[7]
> > define wert2        byte[8]
> > define wert12          word[4]
> > define wert3        byte[9]
> > define key          byte[10]
> > define Bit81_88     byte[11]
> > define Zaehler1     byte[12]
> > define Zaehler2     byte[13]
> > define Zykluszeit      byte[14]
> > define TimerAlt        word[8]
> > define wert1Bit0           Bit [49]
> > 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]
> > define FlankeZeitpuls      Bit[81]
> > define TastaturFlanke      Bit[82]
> > define AufrufbitKey7       Bit[83]'
> > define AufrufbitKey9       Bit[84]'
> > define BitFrei5            Bit[85]'
> > define BitFrei6            Bit[86]
> > define SekPuls             Bit[87]'
> > define LoeschLCD           Bit[88]
> >  sys lcd_init
> >  sys lcd_clr
> >  Zaehler1 = 127
> >  Zaehler2 = 65
> > #Anfang
> >  if ProgNr < 1 then goto ende12
> >  SekPuls  = OFF
> >  wert1 = second
> >  if wert1Bit0 = FlankeZeitpuls  then goto ende1
> >  FlankeZeitpuls = wert1Bit0
> >  SekPuls  = ON
> >  AufrufbitKey7  = OFF
> >  AufrufbitKey9  = OFF
> > #ende1
>
> Hier kannst Du schrittunabhängiges Programm einfügen, z.B Vibration
HABE ICH VERSUCHT  FUNZT NICHT RICHTIG RELAIS FALLEN ALLE DAUERHAFT AB
> >  if (Wartezeit = 0) then goto Schritt
> >  if (sekpuls = OFF) then goto Ende12
> >  Wartezeit = Wartezeit -1 '
> >  goto Ende12
> > #Schritt
> >  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 '
>
> >  'WIE SAEGE ICH DEM PROGRAMM DAS vschalter7 und Key = 7 DAS SELBE AUSLÖSEN
> >  'if vschalter7 then key = 7 'funzt nicht
> Du kannst den Eingang Tastatur nicht einschalten sondern nur abfragen.
> Das byte Key kannst Du zwar mit 7 setzen, doch im Keydecoder wird es sofort wieder rückgesetzt, weil dort geprüft wird, ob Taste 7 gedrückt wurde.
> Wenn Du Dich daran halten würdest, was ich Dir früher schon geantwortet habe, wertest Du AufrufbitKey7 aus. Dann kannst  vschalter7 oder Taste7 drücken und dieselbe Funktion auslösen.
AufrufbitKey7HABE ICH AUCH SCHON VORHER VERSUCHT FUNZT IMMER NOCHNICHT
>
> >  Schritt = 1
> >  goto Ende12
> > #Schritt1
> >  ventled5 = OFF '
> >  Wartezeit = 10 '
> >  Goto Schrittweiter
> > #Schritt2 '
> > 'if AufrufbitKey7 then goto SCHRITTWEITER  FUNKTIONIETRT HIER NICHT DESHALB DAS #VIBRATIONSABSCHALTUNG
> Wo ist hier das Unterprogramm #Vibrationsabschaltung?
> Während der Wartezeit wird der Schritt nicht durchlaufen und AufrufbitKey7 wird im Tasturbaustein rückgesetzt, denn es ist nur ein Zyklus eingeschaltet.GEHT ABER FÜR MEINE GESCHICHTE PRIMA SO
>
> >  pumpled6 = OFF : wiled1 = ON : schrled3 = ON  '
> >  Wartezeit = 10'
> >  Goto Schrittweiter
> > #Schritt3 '
> >  schrled3 = OFF : wiled1 = OFF : waled2 = ON'
> >  Wartezeit = 10'x
> >  Goto Schrittweiter
> > #Schritt4 '
> >   waled2 = OFF :wiled1 = ON : schlled4 = ON :'
> >  Wartezeit = 10'
> >  Goto Schrittweiter
> > #Schritt5
> >   schlled4 = OFF : wiled1 = OFF :waled2 = ON
> >  Wartezeit = 10'
> >  Goto Schrittweiter
> > #Schritt6
> >  waled2 = OFF :ventled5 = ON
> >  Wartezeit = 5'
> >  Goto Schrittweiter
> > #Schritt7
> >  pumpled6 = ON
> >  Wartezeit = 5'
> >  goto Schrittweiter
> > #Schritt8
> >  Wartezeit = 5'
> >  if wschalter8 = OFF then goto Anfang
> Hier springst Du zum Anfang ohne andere Funktionen LCD, Tastatur usw, zu bearbeiten.
> Es muss goto Ende12 sein. STIMMT JA FUNZT  MUSSTE ABER RELAIS 2 MAL IN SCHRITT  NOCHMALS ABSCHALTEN WEIL ZUERSTWEISSDERTEUFELWARUMAUCHNICHTRICHTIG
> > #Schrittweiter
> >  Schritt = Schritt + 1
> > #Ende12
> >  Zykluszeit = (Timer - TimerAlt)'
> >  TimerAlt = Timer
> >  gosub Tastatur  
> >  Goto LCD'        
> > #Tastatur
> >  gosub key_decode  
> >  if key < 199 then goto Taste
> >  TastaturFlanke = OFF
> >  x = 1
> >  Return
> > #Taste  
> >  if key =3 then goto plusvar
> >  if key =6 then goto MinusZaehler2  
> >  if ProgNr >< 1 then goto TastaturFlanke'
> > #TastaturFlanke'
> >  if TastaturFlanke = ON then Return '
> >  TastaturFlanke = ON
> >  if key =1 then goto ProgNrPlus  
> >  if ProgNr >< 1 then return '
> Ab hier arbeitet nur Programm 1
> >  if Key = 7 then AufrufbitKey7 = ON
> Die folgende Zeile soll nicht im Tastaturbaustein stehen, sondern im zuständigen Schritt.
HABE ICH VERSUCHT  KEIN FUNZT NICHT
> Wenn die Funktion dauerhaft gebraucht wird, soll sie vor dem Schrittregister FUNZT NICHT /RICHTIGstehen und die Vibrationsabschaltung wird einmalig durchlaufen, weil nach meiner früheren Antwort vor der Tastatur steht AufrufbitKey7 = OFF.
> goto ist zulässig, return des Unterprogramms wird benutzt.
> >  if AufrufbitKey7 then goto Vibrationabschaltung
> >  if Key = 9 then AufrufbitKey9 = ON
> sinngemäß wie vor
> >  if AufrufbitKey9 then goto Runterfahren
> >  return
> > #key_decode
>
> Hier wird Dein Key = 7 überschrieben
> >  key=255
> > #nochmal
> >  wert3 = key_val
> >  if wert3 > 240 then return
> >  Key = key -1                
> >  if wert3 = key_val then goto TasteAusgeben
> >  if Key > 240 then goto nochmal
> >  return                        
> > #TasteAusgeben
> >  if wert3>=0   then key=10  
> >  if wert3>14  then key=7    
> >  if wert3>36  then key=4  
> >  if wert3>57  then key=1  
> >  if wert3>70  then key=0  
> >  if wert3>100 then key=8  
> >  if wert3>122 then key=5  
> >  if wert3>142 then key=2  
> >  if wert3>163 then key=11
> >  if wert3>183 then key=9  
> >  if wert3>204 then key=6  
> >  if wert3>225 then key=3  
> >  return
> > #LCD
> >  if LoeschLCD = OFF then goto Anzeige
> >  LoeschLCD = OFF :sys LCD_CLR
> > #Anzeige
> >  if ProgNr =1 then goto LCDprg1
> >  if ProgNr =2 then goto LCDprg2
> >  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 '
> >  wert1 = ProgNr :gosub Zahl1'        
> >  sys LCD_PRINT:print" dr": gosub ue : sys LCD_PRINT:print"cke Taste 1"
> >  sys LCD_LINE2 '
> >  sys LCD_PRINT:print"f":gosub ue:sys LCD_PRINT:print"r Prog 1 bis 7"
> >  goto Anfang '
> > #LCDprg1
> >  sys LCD_LINE1
> >  DEZ = ProgNr : SYS LCD_DEZ              
> >  sys LCD_PRINT:print"  warte "
> >  DEZ = Wartezeit : SYS LCD_DEZ : sys LCD_PRINT:print" sec"
> >  goto LCD67'
> > #LCDprg2
> >  sys LCD_LINE1 '
> >  DEZ = ProgNr : SYS LCD_DEZ              
> >  sys LCD_PRINT:print"  warte "
> >  DEZ = Wartezeit : SYS LCD_DEZ : sys LCD_PRINT:print" sec"
> >  goto LCD67
> > #LCD67
> >  sys LCD_LINE2 '
> >  sys LCD_PRINT:print"Schritt "
> >  DEZ = Schritt : SYS LCD_DEZ
> >  goto Anfang
> > #ProgNrPlus
> >  ProgNr = ProgNr + 1
> >  LoeschLCD = ON  '
> >  if ProgNr > 8 then ProgNr = 1
> >  return
> > #Vibrationabschaltung
> > schrled3 = OFF : schlled4 = OFF :wiled1 = OFF : waled2 = ON : return
> > 'SCHRITTWETITER STATT SCHRLED3 U.S.W FUNKTIONIETRT HIER NUR EINMAL
> Das liegt in Deiner Macht, je nachdem was Du programmierst.
>  
> > #Runterfahren
> > 'WAS MUSS HIER STEHEN DAS ICH WIEDER IN DAS ERSTE PROGRAMM (DRÜCKE 1-7)KOMME?
> ProgNr = 1              ProgNr = 0 FUNZT GUT
> return, bzw. goto ..
>
> > #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
> > #Zahl5
> >  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 '
> >  if wert12 >= 1000 then CHAR = wert12 MOD 10000 /1000 +&H30 else  CHAR = &H20
> >  SYS LCD_WRT
> > #Zahl3Word '
> >  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
> > #Zahl3
> >  if wert1 >= 100 then CHAR = wert1/100 +&H30 else CHAR = &H20
> >  SYS LCD_WRT
> > #Zahl2 '
> >  if wert1 >= 10 then CHAR = wert1 MOD 100 /10 +&H30 else  CHAR = &H20
> >  SYS LCD_WRT
> > #Zahl1
> >  CHAR = wert1 mod 10 +&H30
> >  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
> >
> >
> sys-Prog fehlt hier
> >
> Brauchst Du denn mehrere  Programme (ProgNr) ? JA  EIN 2TES ZUM ABSCHALTEN /RUNTERFAHREN DESHALB NUN MEINE NEUE FRAGE : WAS HABE ICH BEI SCHRITT6 FALSCH GEMACHT UND VSCHALTER7 HAB ICH AUCHNOCHNICHT ,WOHIN GENAU MIT DEM  'if vschalter7 then AufrufbitKey7
> >
> 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 leds        byteport[1]
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 AufrufbitKey7       Bit[83]'
define AufrufbitKey0       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
 AufrufbitKey7  = OFF
 AufrufbitKey0  = OFF
#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 '
 if (Schritt = 9) then goto Schritt9 '
 if (Schritt = 10) then goto Schritt10 '
 if (Schritt = 11) then goto Schritt11 '




 Schritt = 1
 goto Ende12

#Schritt1
 ventled5 = OFF '
 Wartezeit = 10 'x 1 sec Wartezeit setzen
 Goto Schrittweiter
#Schritt2 '
 pumpled6 = OFF : wiled1 = ON : schrled3 = ON  '
 Wartezeit = 10'x1 sec Wartezeit setzen

 Goto Schrittweiter
#Schritt3 '
 schrled3 = OFF : wiled1 = OFF : waled2 = ON'
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schritt4 '
  waled2 = OFF :wiled1 = ON : schlled4 = ON :'
 Wartezeit = 10'x1 sec Wartezeit setzen

 Goto Schrittweiter
#Schritt5
  schlled4 = OFF : wiled1 = OFF :waled2 = ON
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
 #Schritt6
 
if ProgNr =2 then goto Schrittweiter                          
if ProgNr =1 then goto Schritt8
#Schritt7
 deact leds: ventled5 = OFF
ProgNr = 0
return

#Schritt8
 Goto Schrittweiter
 #Schritt9
 waled2 = OFF :ventled5 = ON
 Wartezeit = 5'x1 sec Wartezeit setzen
 Goto Schrittweiter

#Schritt10
 pumpled6 = ON
 Wartezeit = 5'x1 sec Wartezeit setzen
 goto Schrittweiter
#Schritt11
 Wartezeit = 5'x1 sec Wartezeit setzen
 if wschalter8 = OFF then goto Ende12
if ProgNr =2 then goto Ende12


#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
 '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 AufrufbitKey7 = ON
if AufrufbitKey7 then goto Vibrationabschaltung
if Key = 0 then AufrufbitKey0 = ON
if AufrufbitKey0 then  ProgNr =2

 '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 > 1 then ProgNr = 1
 return
#Vibrationabschaltung
schrled3 = OFF : schlled4 = OFF :wiled1 = OFF : waled2 = ON : 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:

Antwort siehe Email an Hecktor (von ManfredW - 4.09.2005 11:21)