INFO - FAQ - CC2-Forum - CCPro-Forum |
Hallo, Du benutzt ein Programm von meiner homepage. Die Antworten habe ich eingefügt. MfG ManfredW > > > > iCH BIN DOOF UND MUSS NUN EUCH FRAGEN: WAS MACH ICH FALSCH ? Was soll die Selbstbezichtigung? Wer programmiert, kann nicht doof sein sondern ist kreativ! > > ICH HABE 3 PROBLEME > > 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 > 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. > 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. > 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. > #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. Wenn die Funktion dauerhaft gebraucht wird, soll sie vor dem Schrittregister stehen 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 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) ? > Meine Homepage: http://manfred.wilzeck.de |
Antwort schreiben |