- LiTime Speicher und Akkus         
Ergebnis 1 bis 3 von 3

Thema: Wecker Quellcode

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    475

    Wecker Quellcode

    Anzeige

    Praxistest und DIY Projekte
    Hi da,
    hier der Quellcode des Weckers. Ich habe nichts gegen Komentare^^


    Code:
    DEFINE stund AS AD[1]
    DEFINE minut AS AD[2]
    DEFINE bstat AS AD[3]
    DEFINE set   AS AD[4]
    DEFINE waerme AS AD[7]
    
    
    DEFINE play  AS PORT[1]
    DEFINE fw    AS PORT[2]
    DEFINE rep   AS PORT[3]
    DEFINE dis   AS PORT[4]
    DEFINE lampe AS PORT[5]'kleiner Out für die LED
    DEFINE kugel AS PORT[6]'entspricht der Steckdose
    DEFINE kolb  AS PORT[8]
    DEFINE pumpe AS PORT[7] 
    
    DEFINE alts   AS BYTE'werden mit SETTIME benutzt 
    DEFINE altm   AS BYTE's = Stunde / m = Minute
    DEFINE wstun  AS BYTE'Weckstunde und
    DEFINE wminu  AS BYTE'-minute
    DEFINE cycle  AS BYTE
    DEFINE zzahl  AS BYTE
    DEFINE zahl   AS BYTE
    DEFINE mz     AS BYTE 'Wert der Einstellungsschleifen 
    DEFINE heizen AS BYTE
    DEFINE heizh  AS BYTE
    DEFINE merker AS BYTE 'zwei merker nötig, da bei der forward Schleife
    DEFINE merker2 AS BYTE'einer runtergezählt wird
    DEFINE malt    AS BYTE
    
    
    
    DEFINE scharf  AS BIT'on = wecken / off... 
    DEFINE nebel   AS BIT
    DEFINE out     AS BIT
    
    DEFINE sda AS PORT[9]
    DEFINE scl AS PORT[10]
    CONST MINUS=40h
    CONST BLANK=20h
    CONST DOT=2Eh
    CONST Z0=30h
    CONST Z1=31h
    CONST Z2=32h
    CONST Z3=33h
    CONST Z4=34h
    CONST Z5=35h
    CONST Z6=36h
    CONST Z7=37h
    CONST Z8=38h
    CONST Z9=39h
    CONST A=41h
    CONST B=42h
    CONST C=43h
    CONST D=44h
    CONST E=45h
    CONST F=46h
    CONST G=47h
    CONST H=48h
    CONST I=49h
    CONST J=4Ah
    CONST K=4Bh
    CONST L=4Ch
    CONST M=4Dh
    CONST N=4Eh
    CONST O=4Fh
    CONST P=50h
    CONST Q=51h
    CONST R=52h
    CONST S=53h
    CONST T=54h
    CONST U=55h
    CONST V=56h
    CONST W=57h
    CONST X=58h
    CONST Y=59h
    CONST Z=5Ah
    
    
    FUNCTION LCD_WRITE(BUF AS BYTE,LCDDATA AS BYTE)
    DEFINE EXTPORT  BYTEPORT[10]
    DEFINE OUTBYTE AS BYTE
    '--------- ------WRITE HI NIBBLE ------------------------
    OUTBYTE=BUF OR (LCDDATA SHR 4)
    EXTPORT=OUTBYTE OR 01000000b
    EXTPORT=OUTBYTE AND 10111111b
    '--------------- WRITE LO NIBBLE ------------------------
    OUTBYTE=BUF OR (LCDDATA AND 0Fh)
    EXTPORT=OUTBYTE OR 01000000b
    EXTPORT=OUTBYTE AND 10111111b
    END FUNCTION
    '-----------------------------------------------------
    FUNCTION LCD_CLR()
    LCD_WRITE(0,02h)
    LCD_WRITE(0,01h)
    PAUSE 2
    END FUNCTION
    '----------------------------------------------------
    FUNCTION LCD_INIT()
    DEFINE EXTPORT  BYTEPORT[10]
    EXTPORT=0
    LCD_WRITE(0, 38h)'0=WRITE CMD
    EXTPORT= 00000010b
    EXTPORT= 01000010b
    EXTPORT= 00000010b
    LCD_WRITE(0,28h)
    LCD_WRITE(0,0Ch)
    LCD_CLR()
    END FUNCTION
    '----------------------------------------------------
    FUNCTION LINE1(POS AS BYTE)
    LCD_WRITE(0,7Fh+POS)
    END FUNCTION
    '----------------------------------------------------
    FUNCTION LINE2(POS AS BYTE)
    LCD_WRITE(0,BFh+POS)
    END FUNCTION
    '----------------------------------------------------
    
    FUNCTION clr1 ()
    LINE1 (1)
    DO
    LCD_WRITE (20h, 20h)
    cycle = cycle + 1
    LOOP UNTIL cycle = 16
    cycle = 0
    END FUNCTION
    
    FUNCTION clr2 ()
    LINE2 (1)
    DO
    LCD_WRITE (20h, 20h)
    cycle = cycle + 1
    LOOP UNTIL cycle = 16
    cycle = 0
    END FUNCTION
    
    
    FUNCTION rready()
    LINE2 (1)
    LCD_WRITE (20h, R)
    LCD_WRITE (20h, E)
    LCD_WRITE (20h, A)
    LCD_WRITE (20h, D)
    LCD_WRITE (20h, Y) 
    LCD_WRITE (20h, 2Eh)
    LCD_WRITE (20h, T)
    LCD_WRITE (20h, O)
    LCD_WRITE (20h, 2Eh)
    LCD_WRITE (20h, R)
    LCD_WRITE (20h, U)
    LCD_WRITE (20h, M)
    LCD_WRITE (20h, B)
    LCD_WRITE (20h, L)
    LCD_WRITE (20h, E)
    END FUNCTION
    
    FUNCTION ssmooth()
    LINE2 (1)
    LCD_WRITE (20h, S)
    LCD_WRITE (20h, M)
    LCD_WRITE (20h, O)
    LCD_WRITE (20h, O)
    LCD_WRITE (20h, T) 
    LCD_WRITE (20h, H)
    END FUNCTION
    
    FUNCTION nne()
    LINE1 (1)
    LCD_WRITE (20h, N)
    LCD_WRITE (20h, E)
    END FUNCTION
    
    FUNCTION oon()
    LINE2 (1)
    LCD_WRITE (20h, O)
    LCD_WRITE (20h, N)
    END FUNCTION
    
    FUNCTION ooff()
    LINE2 (1)
    LCD_WRITE (20h, O)
    LCD_WRITE (20h, F)
    LCD_WRITE (20h, F)
    END FUNCTION
    
    FUNCTION U()
    LINE1(1)
    LCD_WRITE(20h, U)
    LCD_WRITE(20h, H)
    LCD_WRITE(20h, R)
    LCD_WRITE(20h, Z)
    LCD_WRITE(20h, E)
    LCD_WRITE(20h, I)
    LCD_WRITE(20h, T)
    END FUNCTION
    
    FUNCTION WZ()
    LINE1(1)
    LCD_WRITE(20h, W)
    LCD_WRITE(20h, E)
    LCD_WRITE(20h, C)
    LCD_WRITE(20h, K)
    LCD_WRITE(20h, Z)
    LCD_WRITE(20h, E)
    LCD_WRITE(20h, I)
    LCD_WRITE(20h, T)
    END FUNCTION
    
    FUNCTION T()
     LINE1(1)
    LCD_WRITE(20h, T)
    LCD_WRITE(20h, I)
    LCD_WRITE(20h, T)
    LCD_WRITE(20h, E)
    LCD_WRITE(20h, L)
    END FUNCTION
    
    FUNCTION WE()
    LINE1(1)
    LCD_WRITE(20h, W)
    LCD_WRITE(20h, E)
    LCD_WRITE(20h, C) 
    LCD_WRITE(20h, K)
    LCD_WRITE(20h, E) 
    LCD_WRITE(20h, N)
    END FUNCTION
    
    
    FUNCTION drucken()               'die Funktiion "drucken()"
    IF zzahl > 0 THEN zahl = 0       'wird sowohl für Minuten und Stunden   
    IF zzahl > 9 THEN zahl = 10      'genutzt und mit "LINE2(x)"
    IF zzahl > 19 THEN zahl = 20     'auf die Dis-Segmente gesetzt
    IF zzahl > 29 THEN zahl = 30     '
    IF zzahl > 39 THEN zahl = 40     '
    IF zzahl > 49 THEN zahl = 50     'mit den IF-Abfragen werden die zehner-Werte
                                     'von zzahl auf zahl kopiert
                                     'und in SELECT CASE zahl im DIS ausgegeben 
    SELECT CASE zahl                 'also nur eine Ziffer, danach geht der 
                                     'Courser zum nächstem Segment
           CASE 50                   '
                LCD_WRITE(20h, 35h) 
                zzahl = zzahl - 50   'die Subtraktionen sorgen dafür, 
                                     'dass von zzahl nur die Einer übrig 
           CASE 40                   'bleiben und in SELECT CASE zzahl 
                LCD_WRITE(20h, 34h)  'ausgegeben werden           
                zzahl = zzahl - 40
                
           CASE 30
                LCD_WRITE(20h, 33h)             
                zzahl = zzahl - 30
                
           CASE 20
                LCD_WRITE(20h, 32h)             
                zzahl = zzahl - 20
                
           CASE 10
                LCD_WRITE(20h, 31h)             
                zzahl = zzahl - 10
                
           CASE 0
                LCD_WRITE(20h, 30h)             
                
    END SELECT           
    
    SELECT CASE zzahl
       
           CASE 9
           LCD_WRITE(20h, 39h)
      
           CASE 8
           LCD_WRITE(20h, 38h)
           
           CASE 7
           LCD_WRITE(20h, 37h)
      
           CASE 6
           LCD_WRITE(20h, 36h)  
           
           CASE 5
           LCD_WRITE(20h, 35h)
      
           CASE 4
           LCD_WRITE(20h, 34h)
           
           CASE 3
           LCD_WRITE(20h, 33h)
      
           CASE 2
           LCD_WRITE(20h, 32h)              
                                                      
           CASE 1
           LCD_WRITE(20h, 31h)
      
           CASE 0
           LCD_WRITE(20h, 30h) 
    END SELECT
    zahl = 0
    END FUNCTION
    
    wstun = 0
    wminu = 0
    
    sda = ON
    scl = ON
    LCD_INIT()
    PAUSE 4
    
    
    
    malt = 1
    scharf = OFF
    #anfang
    IF set > 200 THEN
    dis = ON
       sda = ON
       scl = ON
       LCD_INIT()
       PAUSE 4
       mz = 1
       DO
       
         
         IF mz > 5  THEN mz = 1
         
                alts = stund / 11  'P3
                altm = minut / 4 'P3
    
     
             
                IF mz = 1 THEN
                   
                       IF (malt < MINUTE) OR (malt > MINUTE) THEN ' verhindert, dass das Dis dauernd aktualisiert wird (flimmert)
                          U()
                          LINE2(12)
                          zzahl = HOUR
                          drucken()
                          LCD_WRITE(20h, 20h)
                          zzahl = MINUTE
                          malt = MINUTE 
                          drucken()
                       END IF 
                       TIMER = 0
                     
                   IF bstat > 200 THEN 'durch den IF Befehl statt WAIT läuft das Prog in einer Schleife,
                      TIMER = 0        'wodurch die Uhrzeit auf dem Dis aktuallisiert werden kann.
                      mz = mz + 1
                      WAIT (bstat < 200) OR (TIMER > 25)'
                   END IF                               '
                      IF TIMER > 25 THEN                'ist Timer < 26, wird die Erhöhung von mz nicht
                         TIMER = 0                      'rückgängig gemacht und die nächste Einstellunsschleife
                         mz = mz - 1                    'angesprochen
                                    
                         DO
                         IF bstat < 200 THEN out = ON'würde diese Abfrage fehlen, würde man mit bstat = 255 in die DO Schleife gehen,
                                                     'was ohne das "out Bit" die Abbruchbedingung sofort erfüllen würde    
                         IF TIMER < 2 THEN 
                         LINE1(1)                                  'die 
                         U()                                       'Timerabfragen 
                         END IF                                    'bewirken
                                                                   'das blinken
                         IF TIMER > 25 THEN                        'des 
                            clr1()                                 'Uhrzeit
                         END IF                                    'schriftzuges
                         IF TIMER > 50 THEN TIMER = 0              
                                                                       
                         LINE2(12)                                 
                         zzahl = stund / 11                        
                         alts = zzahl                              
                         drucken()                                 
                         LCD_WRITE(20h, 20h)                       
                         zzahl = minut / 4                         
                         altm = zzahl                              
                         drucken()                                 
                         SETTIME alts, altm
                                                 
                         LOOP UNTIL (bstat > 200) AND (out = ON)  
                         WAIT bstat < 200                        
                       END IF
                      IF mz = 2 THEN 
                         clr2()
                         malt = 100
                      END IF
                     out = OFF
                  END IF   
    
                IF mz = 2 THEN
           
                   WZ()
                   LINE2(12)
                   zzahl = wstun
                   drucken()
                   LCD_WRITE(20h, 20h)
                   zzahl = wminu 
                   drucken()
                   TIMER = 0
                   IF bstat > 200 THEN
                      TIMER = 0 
                      mz = mz + 1
                      WAIT (bstat < 200) OR (TIMER > 25)
                   END IF
                      IF TIMER > 25 THEN
                         
                         TIMER = 0
                         mz = mz - 1
                         DO
                         IF bstat < 200 THEN out = ON
                         IF TIMER < 2 THEN  WZ()
                         
                         
                         IF TIMER > 25 THEN 
                         clr1()
                         END IF
                         IF TIMER > 50 THEN TIMER = 0                     
                         LINE2(12)           
                         zzahl = stund / 11
                         wstun = zzahl
                         drucken()
                         LCD_WRITE(20h, 20h)
                         zzahl = minut / 4
                         wminu = zzahl
                         drucken()
                         
                         IF wminu > 4 THEN                 'da der Kolben 5 Min
                            heizen = wminu - 5             'Heizzeit hat, muss 
                            heizh = wstun                  'dafür der Zeitpunkt
                         ELSE                              'bestimmt werden
                           IF wminu = 0 THEN heizen = 55
                           IF wminu = 1 THEN heizen = 56
                           IF wminu = 2 THEN heizen = 57
                           IF wminu = 3 THEN heizen = 58   
                           IF wminu = 4 THEN heizen = 59                  
                           heizh = wstun - 1
                         END IF
                           
                         LOOP UNTIL (bstat > 200) AND (out = ON) 
                         WAIT bstat < 200
                         out = OFF
                       END IF     
                   IF mz = 3 THEN 
                      clr2()
                      clr1()
                   END IF
                   out = OFF
                 END IF 
                 
                IF mz = 3 THEN
                
                   T()              
                   LINE2(1)
                   zzahl = merker
                   drucken()
                   
                   TIMER = 0  
                    IF bstat > 200 THEN
                      TIMER = 0 
                      mz = mz + 1
                      WAIT (bstat < 200) OR (TIMER > 25)
                   END IF
                      
                      IF TIMER > 25 THEN
                         TIMER = 0
                         mz = mz - 1
                         
                         DO
                         IF bstat < 200 THEN out = ON
                         IF TIMER < 2 THEN 
                         LINE1(1)
                         T()
                         
                         END IF
                         IF TIMER > 25 THEN 
                         clr1()
                         END IF
                         IF TIMER > 50 THEN TIMER = 0
                         LINE2(1)
                         zzahl = minut / 4
                         merker = zzahl
                         drucken()
                         LOOP UNTIL (bstat > 200) AND (out = ON)
                         WAIT bstat < 200
                    END IF
                    IF mz = 4 THEN clr2()
                  out = OFF
                END IF  
              
              IF mz = 4 THEN
              
                 WE()
                   
                   LINE2(1)
                   IF scharf = ON THEN rready()
                   IF scharf = OFF THEN ssmooth()
                  
                   WAIT (bstat > 200) OR (set < 200)'währe bstat > 200 einzigste Bedingung,
                                                    'könnte man mz 4 und 5 nicht beenden, ohne
                   TIMER = 0                        'bstat zu betätigen.
                      mz = mz + 1
                      WAIT (bstat < 200) OR (TIMER > 25)
                      IF TIMER > 25 THEN
                         TIMER = 0
                         mz = mz - 1
                         clr2()
                         IF scharf = ON THEN
                            scharf = OFF
                            kolb = scharf
                            ssmooth()
                         ELSE
                            scharf = ON 
                            rready()
                         END IF
                         WAIT bstat < 200
                      END IF 
                    END IF  
                    
              IF mz = 5 THEN
                 clr2()
                 LINE1(1)
                 LCD_WRITE(20h, N)
                 LCD_WRITE(20h, E)
                 LCD_WRITE(20h, B)
                 LCD_WRITE(20h, E) 
                 LCD_WRITE(20h, L)
                 
                 IF nebel = ON THEN oon()
                         IF nebel = OFF THEN ooff()
                    WAIT (bstat > 200) OR (set < 200)
               
                   TIMER = 0  
                      mz = mz + 1
                      WAIT (bstat < 200) OR (TIMER > 25)
                      IF TIMER > 25 THEN
                         TIMER = 0
                         mz = mz - 1
                         clr2()
                         IF nebel = ON THEN
                            nebel = OFF
                            kolb = nebel 
                            ooff()
                         ELSE
                            nebel = ON 
                            oon()
                         END IF
                         WAIT bstat < 200
                      END IF 
                      IF mz = 6 THEN clr2()
                    END IF                 
                                   
      LOOP UNTIL set < 200
      mz = 1
      dis = OFF
    END IF 
    
    IF (nebel = ON) AND (MINUTE = heizen) AND (heizh = HOUR)AND (scharf = ON) THEN kolb = ON
    
    
      
    IF (HOUR = wstun) AND (MINUTE = wminu) AND (scharf = ON) THEN
        
    
                 
                  play = ON 
                  PAUSE 11
                  play = OFF
                  PAUSE 10
         
                  IF merker > 0 THEN
                     merker2 = merker - 1
                     DO 
                       fw = ON 
                       PAUSE 10
                       fw = OFF
                       PAUSE 10
                       merker2 = merker2 - 1
                      
                     LOOP UNTIL merker2 = 0  
                   END IF
         
                 rep = ON 
                 PAUSE 10
                 rep = OFF
                 PAUSE 10
                 
                 
                         
                 merker = merker + 1
                 
    
         
                 lampe = ON
                 kugel = ON
                 DO
                 
                 IF (waerme < 105) AND (TIMER > 200) THEN  
                    pumpe = ON
                    PAUSE 50
                    pumpe = OFF
                    TIMER = 0
                    
                 END IF
                    IF bstat = 255 THEN
                       nebel = OFF
                       lampe = OFF
                       kugel = OFF
                       kolb = OFF
                       WAIT bstat < 255
                    END IF     
                LOOP UNTIL kugel = OFF
    
    
    
    END IF
         
    GOTO anfang
    
    END
    [/code]

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    53
    Beiträge
    2.803
    ....irgendwie einfach Quellcode ohne jeglichen weiteren Kommentar (warum, wieso & Co.) einzustellen halte ich gelinde gesagt für - gegenläufig sinnvoll -

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.10.2005
    Beiträge
    139
    bezieht sich wohl hier rauf

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test