'****************************************************************
'*  Name    : PC klok                                           *
'*  Author  : Stijn Coenen [Stynus]                             *
'*  Notice  : Copyright (c) 2009 [www.elektronicastynus.be]     *
'*          : All Rights Reserved                               *
'*  Date    : 17/10/2009                                        *
'*  Version : 1.0                                               *
'*  elektronicastynus.be/Projecten/Klokken/PC_Klok/index.php    *
'****************************************************************
Device 16F767
Config WDT_Off, PWRTE_Off, HS_OSC , PWRTE_ON
XTAL = 20
Declare ALL_DIGITAL     TRUE   

'LCD
Declare LCD_DTPIN       PORTB.4 
Declare LCD_ENPIN       PORTB.3
Declare LCD_RSPIN       PORTB.2
Declare LCD_INTERFACE   4
Declare LCD_LINES       2

'Relais
Symbol  Power        =  PORTC.3     : TRISC.3 = 0
Symbol  Startpuls    =  PORTC.2     : TRISC.2 = 0

'Knoppen
Symbol  Knop_U       =  PORTA.0     : TRISA.0 = 1 
Symbol  Knop_R       =  PORTA.1     : TRISA.1 = 1 
Symbol  Knop_E       =  PORTA.2     : TRISA.2 = 1            
Symbol  Knop_L       =  PORTA.3     : TRISA.3 = 1
Symbol  Knop_D       =  PORTA.4     : TRISA.4 = 1 

'Real time clock
Symbol  Reg_Seconden =  $00 
Symbol  Reg_Minuten  =  $01
Symbol  Reg_Uren     =  $02
Symbol  Reg_Dag      =  $03
Symbol  Reg_Datum    =  $04
Symbol  Reg_Maand    =  $05
Symbol  Reg_Jaar     =  $06
Symbol  Reg_Min_on   =  $08
Symbol  Reg_Uren_on  =  $09
Symbol  Reg_Min_off  =  $10
Symbol  Reg_Uren_off =  $11
Symbol  Lezen        =  %11010001
Symbol  Schrijven    =  %11010000
Symbol  SDA          =  PORTC.1
Symbol  SLC          =  PORTC.0
Dim     Seconden        As Byte
Dim     Minuten         As Byte
Dim     Uren            As Byte
Dim     Datum           As Byte
Dim     Maand           As Byte
Dim     Jaar            As Byte
Dim     Min_On          As Byte
Dim     Uur_On          As Byte
Dim     Min_Off         As Byte
Dim     Uur_Off         As Byte
Dim     bcd_in          As Byte
Dim     bcd_uit         As Byte 

'Statusbits
Dim     Power_status    As Bit

'Menu
Dim     Menu_Item       As Byte

'Afsluiten
Dim     Uitschakeltijd  As Byte

'Timer
Dim     Timer_OnOff     As Bit
Dim     temp            As Byte

'Tijd instellen
Dim     Tijd[6]         As Byte
Dim     Max_Val         As Byte
Dim     Temp_Tijd       As Byte
'****************************************************************
Clear
Cls
DelayMS 500
                '1234567890123456
Print At 1,1,   " PC schakelklok "
Print At 2, 1,  "ElektronicaStynu"
DelayMS  250
Print At 2, 1,  "lektronicaStynus"
DelayMS  250
Print At 2, 1,  "ektronicaStynus."
DelayMS  250
Print At 2, 1,  "ktronicaStynus.b"
DelayMS  250
Print At 2, 1,  "tronicaStynus.be"

DelayMS 1000
'****************************************************************



Main:
    Cls
    DelayMS 200
    While 1 = 1
        I2CIN  SDA, SLC, Lezen, Reg_Uren,       [Uren] 
        I2CIN  SDA, SLC, Lezen, Reg_Minuten,    [Minuten]
        I2CIN  SDA, SLC, Lezen, Reg_Seconden,   [Seconden] 
        bcd_in      = Uren
        GoSub         bcd_to_bin 
        Uren        = bcd_uit
        bcd_in      = Minuten
        GoSub         bcd_to_bin
        Minuten     = bcd_uit
        bcd_in      = Seconden
        GoSub         bcd_to_bin
        Seconden    = bcd_uit
        Print At 1,1, DEC2 Uren, ":",  DEC2 Minuten, ":", DEC2 Seconden
        
        GoSub Tijd_Controleren
        
        If Power_status = 1 Then
            Print At 1,10, "PC: On "
        Else
            Print At 1,10, "PC: Off"
        EndIf    
        
        I2CIN  SDA, SLC, Lezen, Reg_Jaar, [Jaar]
        I2CIN  SDA, SLC, Lezen, Reg_Maand, [Maand]
        I2CIN  SDA, SLC, Lezen, Reg_Datum, [Datum]     
        bcd_in      = Jaar
        GoSub         bcd_to_bin 
        Jaar        = bcd_uit
        bcd_in      = Maand
        GoSub         bcd_to_bin
        Maand       = bcd_uit
        bcd_in      = Datum
        GoSub         bcd_to_bin
        Datum       = bcd_uit    
        Print At 2,1, DEC2 Datum, "/",  DEC2 Maand, "/", DEC2 Jaar
        Print At 2,10, "-Menu-"
                
        If Knop_E = 0 Then
            DelayMS 20
            While Knop_E = 0: Wend
            GoTo Menu
        EndIf
        
        DelayMS 200
    Wend
GoTo Main
'****************************************************************
Menu:
    Cls
    DelayMS 200
    Print At 1,1, "Menu: ->"
    Menu_Item = 0    
    While 1 = 1
        Select Menu_Item
            Case 0
                If Power_status = 0 Then
                    Print At 1,10, "Boot PC"
                Else
                    Print At 1,10, "PC Off "
                EndIf 
                If Timer_OnOff = 0 Then    
                    Print At 2,10, "Tmr On " 
                 Else
                    Print At 2,10, "Tmr Off" 
                EndIf   
            Case 1
                If Timer_OnOff  = 0 Then    
                    Print At 1,10, "Tmr On " 
                 Else
                    Print At 1,10, "Tmr Off" 
                EndIf   
                Print At 2,10, "EditClk"
            Case 2    
                Print At 1,10, "EditClk"
                Print At 2,10, "EditTmr"
            Case 3    
                Print At 1,10, "EditTmr"
                Print At 2,10, "Back   "
            Case 4
                Print At 1,10, "Back   "
                If Power_status = 0 Then
                    Print At 2,10, "Boot PC"
                Else
                    Print At 2,10, "PC OFF "
                EndIf 
        EndSelect  
        'Bladeren in menu:
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Menu_Item < 4 Then
                Inc Menu_Item
            Else 
               Menu_Item = 0
            EndIf 
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            Else 
               Menu_Item = 4
            EndIf
        EndIf
        'Menu item enteren
        If Knop_E = 0 Then 
            DelayMS 20 
            While Knop_E = 0: Wend
            Select Menu_Item
                Case 0
                    'Pc opstarten/afsluiten overwrite
                    GoTo Pc_boot
                Case 1
                    'Timer opzetten voor vanavond downloaden
                    GoTo tmr_op
                Case 2    
                    'Tijd op de klok aanpassen
                    GoTo Pas_Tijd_Aan
                Case 3    
                    'Tijd "aan" tijd van de pc aanpassen
                    GoTo Aan_Tijd
                Case 4
                    'Terug naar het begin scherm
                    GoTo Main
            EndSelect    
        EndIf
    Wend 
GoTo Main
'****************************************************************
Pc_boot:
    Cls
    DelayMS 200
    If Power_status = 0 Then
        'Inschakelen
                      '1234567890123456
        Print At 1,1, "   Booting...   "
        GoSub Pc_aan      'Spanning opzetten
        DelayMS 1500      'Wachten tot voeding opgestart is
        GoSub Puls_uit    'Puls voor pc te doen booten
    Else
        'Uitschakelen
                      '1234567890123456
        Print At 1,1, "Shutting down..."
        Print At 2, 1, Rep "-"\16
        GoSub Puls_uit    'Pc een puls geven om te doen afsluiten
        'Nu moet er 160 sec gewacht worden voordat de spanning wordt uitgeschakeld
        'Uitschakeltijd uitrekenen:
        For Uitschakeltijd = 0 To 160 
            Print At 2,1, Rep 255\ (Uitschakeltijd / 10 ) + 1
            'Print At 1,1, dec3 16* (100/Uitschakeltijd)
            DelayMS 1000  
        Next
        GoSub Pc_uit      'Spanning uitzetten 
    EndIf      
GoTo Main
'****************************************************************
tmr_op:  
    'PC vanavond opstarten Ja/Nee?
    Cls
    DelayMS 200
    If Timer_OnOff = 0 Then
        Print At 1, 5, "Timer On"
        Timer_OnOff = 1
        DelayMS 1000
    Else
        Print At 1, 5, "Timer Off"
        Timer_OnOff = 0
        DelayMS 1000
    EndIf
GoTo Main
'****************************************************************
Pas_Tijd_Aan:
    'Tijd RTC aanpassen
    Cls
    DelayMS 200
    I2CIN  SDA, SLC, Lezen, Reg_Uren,       [Uren] 
    I2CIN  SDA, SLC, Lezen, Reg_Minuten,    [Minuten]
    I2CIN  SDA, SLC, Lezen, Reg_Seconden,   [Seconden] 
    
    Tijd[0]     = Uren >> 4
    Tijd[1]     = Uren & %00001111
    Tijd[2]     = Minuten >> 4
    Tijd[3]     = Minuten & %00001111
    Tijd[4]     = Seconden >> 4
    Tijd[5]     = Seconden & %00001111
          
    Menu_Item = 0
    While 1 = 1
        Print At 1,1, "Time: ", Dec Tijd[0], Dec Tijd[1], ":", Dec Tijd[2], Dec Tijd[3], ":", Dec Tijd[4], Dec Tijd[5]
        Select Menu_Item
            'Uren
            Case 0
                'tijd[0] aanpassen
                              '1234567890123456
                Print At 2,1, "      ^         "
                Max_Val = 2
            Case 1
                'tijd[1] aanpassen
                              '1234567890123456
                Print At 2,1, "       ^        "
                If Tijd[0] = 2 Then
                    Max_Val = 3
                Else
                    Max_Val = 9
                EndIf
            'Minuten
            Case 2
                'tijd[2] aanpassen
                              '1234567890123456
                Print At 2,1, "         ^      "
                Max_Val = 5
            Case 3
                'tijd[3] aanpassen
                              '1234567890123456
                Print At 2,1, "          ^     "
                Max_Val = 9
            'Seconden
            Case 4
                'tijd[4] aanpassen
                              '1234567890123456
                Print At 2,1, "            ^   "
                Max_Val = 5
            Case 5
                'tijd[5] aanpassen
                              '1234567890123456
                Print At 2,1, "             ^  "
                Max_Val = 9
        EndSelect    
        'Aanpassen
        If Temp_Tijd > Max_Val Then
            Temp_Tijd = 0
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Temp_Tijd < Max_Val Then
                Inc Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf
        EndIf
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Temp_Tijd > 0 Then
                Dec Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf 
        EndIf   
        'Links rechts bewegen
        If Knop_R = 0 Then
            DelayMS 20 
            While Knop_R = 0: Wend
            If Menu_Item < 5 Then
                Inc Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item]                   
        EndIf
        If Knop_L = 0 Then           
            DelayMS 20 
            While Knop_L = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item] 
        EndIf     
        'Tijd vastzetten      
        If Knop_E = 0 Then           
            DelayMS 20 
            While Knop_E = 0: Wend
            Break
        EndIf   
    Wend
    Cls
    Print At 1,4, "Saving time"    
    'Tijd wegschrijven
    Uren        = Tijd[0] << 4
    Uren        = Uren + Tijd[1]
    I2COUT SDA, SLC, Schrijven ,Reg_Uren, [Uren]
    Minuten     = Tijd[2] << 4
    Minuten     = Minuten + Tijd[3]
    I2COUT SDA, SLC, Schrijven ,Reg_Minuten, [Minuten]
    Seconden    = Tijd[4] << 4
    Seconden    = Seconden + Tijd[5]
    I2COUT SDA, SLC, Schrijven ,Reg_Seconden, [Seconden]
    DelayMS 1000
    
    'Datum RTC aanpassen
    Cls
    DelayMS 200
    I2CIN  SDA, SLC, Lezen, Reg_Datum, [Datum]
    I2CIN  SDA, SLC, Lezen, Reg_Maand, [Maand]
    I2CIN  SDA, SLC, Lezen, Reg_Jaar, [Jaar]
    
    Tijd[0]     = Datum >> 4
    Tijd[1]     = Datum & %00001111
    Tijd[2]     = Maand >> 4
    Tijd[3]     = Maand & %00001111
    Tijd[4]     = Jaar >> 4
    Tijd[5]     = Jaar & %00001111          
    
    Menu_Item = 0
    While 1 = 1
        Print At 1,1, "Date: ", Dec Tijd[0], Dec Tijd[1], "/", Dec Tijd[2], Dec Tijd[3], "/", Dec Tijd[4], Dec Tijd[5]
        Select Menu_Item
            'Uren
            Case 0
                'tijd[0] aanpassen
                              '1234567890123456
                Print At 2,1, "      ^         "
                Max_Val = 3
            Case 1
                'tijd[1] aanpassen
                              '1234567890123456
                Print At 2,1, "       ^        "
                If Tijd[0] = 3 Then
                    Max_Val = 1
                Else
                    Max_Val = 9
                EndIf
            'Minuten
            Case 2
                'tijd[2] aanpassen
                              '1234567890123456
                Print At 2,1, "         ^      "
                Max_Val = 1
            Case 3
                'tijd[3] aanpassen
                              '1234567890123456
                Print At 2,1, "          ^     "
                If Tijd[0] = 1 Then
                    Max_Val = 2
                Else
                    Max_Val = 9
                EndIf
            'Seconden
            Case 4
                'tijd[4] aanpassen
                              '1234567890123456
                Print At 2,1, "            ^   "
                Max_Val = 9
            Case 5
                'tijd[5] aanpassen
                              '1234567890123456
                Print At 2,1, "             ^  "
                Max_Val = 9
        EndSelect    
        'Aanpassen
        If Temp_Tijd > Max_Val Then
            Temp_Tijd = 0
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Temp_Tijd < Max_Val Then
                Inc Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf
        EndIf
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Temp_Tijd > 0 Then
                Dec Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf 
        EndIf   
        'Links rechts bewegen
        If Knop_R = 0 Then
            DelayMS 20 
            While Knop_R = 0: Wend
            If Menu_Item < 5 Then
                Inc Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item]                   
        EndIf
        If Knop_L = 0 Then           
            DelayMS 20 
            While Knop_L = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item] 
        EndIf     
        'Tijd vastzetten      
        If Knop_E = 0 Then           
            DelayMS 20 
            While Knop_E = 0: Wend
            Break
        EndIf   
    Wend
    Cls
    Print At 1,4, "Saving date"  
   'Tijd wegschrijven
    Datum       = Tijd[0] << 4
    Datum       = Datum + Tijd[1] 
    I2COUT SDA, SLC, Schrijven ,Reg_Datum, [Datum]
    Maand       = Tijd[2] << 4
    Maand       = Maand + Tijd[3]
    I2COUT SDA, SLC, Schrijven ,Reg_Maand, [Maand]
    Jaar        = Tijd[4] << 4
    Jaar        = Jaar + Tijd[5]
    I2COUT SDA, SLC, Schrijven ,Reg_Jaar, [Jaar]
    
    DelayMS 1000
    Cls
GoTo Main
'****************************************************************
Aan_Tijd:
    Cls
    DelayMS 200
    I2CIN  SDA, SLC, Lezen, Reg_Uren_on,   [Uren] 
    I2CIN  SDA, SLC, Lezen, Reg_Min_on,    [Minuten] 
    
    Tijd[0]     = Uren >> 4
    Tijd[1]     = Uren & %00001111
    Tijd[2]     = Minuten >> 4
    Tijd[3]     = Minuten & %00001111
          
    Menu_Item = 0
    While 1 = 1
        Print At 1,1, "On: ", Dec Tijd[0], Dec Tijd[1], ":", Dec Tijd[2], Dec Tijd[3]
        Select Menu_Item
            'Uren
            Case 0
                'tijd[0] aanpassen
                              '1234567890123456
                Print At 2,1, "    ^           "
                Max_Val = 2
            Case 1
                'tijd[1] aanpassen
                              '1234567890123456
                Print At 2,1, "     ^          "
                If Tijd[0] = 2 Then
                    Max_Val = 3
                Else
                    Max_Val = 9
                EndIf
            'Minuten
            Case 2
                'tijd[2] aanpassen
                              '1234567890123456
                Print At 2,1, "       ^        "
                Max_Val = 5
            Case 3
                'tijd[3] aanpassen
                              '1234567890123456
                Print At 2,1, "        ^       "
                Max_Val = 9
        EndSelect    
        'Aanpassen
        If Temp_Tijd > Max_Val Then
            Temp_Tijd = 0
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Temp_Tijd < Max_Val Then
                Inc Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf
        EndIf
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Temp_Tijd > 0 Then
                Dec Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf 
        EndIf   
        'Links rechts bewegen
        If Knop_R = 0 Then
            DelayMS 20 
            While Knop_R = 0: Wend
            If Menu_Item < 3 Then
                Inc Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item]                   
        EndIf
        If Knop_L = 0 Then           
            DelayMS 20 
            While Knop_L = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item] 
        EndIf     
        'Tijd vastzetten      
        If Knop_E = 0 Then           
            DelayMS 20 
            While Knop_E = 0: Wend
            Break
        EndIf   
    Wend
    Cls
    Print At 1,2, "Saving on time"    
    'Tijd wegschrijven
    Uren        = Tijd[0] << 4
    Uren        = Uren + Tijd[1]
    I2COUT SDA, SLC, Schrijven ,Reg_Uren_on, [Uren]
    Minuten     = Tijd[2] << 4
    Minuten     = Minuten + Tijd[3]
    I2COUT SDA, SLC, Schrijven ,Reg_Min_on, [Minuten]
    DelayMS 1000

    'Uit tijd
    Cls
    DelayMS 200
    I2CIN  SDA, SLC, Lezen, Reg_Uren_off,   [Uren] 
    I2CIN  SDA, SLC, Lezen, Reg_Min_off,    [Minuten] 
    
    Tijd[0]     = Uren >> 4
    Tijd[1]     = Uren & %00001111
    Tijd[2]     = Minuten >> 4
    Tijd[3]     = Minuten & %00001111
          
    Menu_Item = 0
    While 1 = 1
        Print At 1,1, "Off: ", Dec Tijd[0], Dec Tijd[1], ":", Dec Tijd[2], Dec Tijd[3]
        Select Menu_Item
            'Uren
            Case 0
                'tijd[0] aanpassen
                              '1234567890123456
                Print At 2,1, "     ^          "
                Max_Val = 2
            Case 1
                'tijd[1] aanpassen
                              '1234567890123456
                Print At 2,1, "      ^         "
                If Tijd[0] = 2 Then
                    Max_Val = 3
                Else
                    Max_Val = 9
                EndIf
            'Minuten
            Case 2
                'tijd[2] aanpassen
                              '1234567890123456
                Print At 2,1, "        ^       "
                Max_Val = 5
            Case 3
                'tijd[3] aanpassen
                              '1234567890123456
                Print At 2,1, "         ^      "
                Max_Val = 9
        EndSelect    
        'Aanpassen
        If Temp_Tijd > Max_Val Then
            Temp_Tijd = 0
        EndIf
        If Knop_U = 0 Then 
            DelayMS 20 
            While Knop_U = 0: Wend
            If Temp_Tijd < Max_Val Then
                Inc Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf
        EndIf
        If Knop_D = 0 Then 
            DelayMS 20 
            While Knop_D = 0: Wend
            If Temp_Tijd > 0 Then
                Dec Temp_Tijd
                Tijd[Menu_Item] = Temp_Tijd 
            EndIf 
        EndIf   
        'Links rechts bewegen
        If Knop_R = 0 Then
            DelayMS 20 
            While Knop_R = 0: Wend
            If Menu_Item < 3 Then
                Inc Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item]                   
        EndIf
        If Knop_L = 0 Then           
            DelayMS 20 
            While Knop_L = 0: Wend
            If Menu_Item > 0 Then
                Dec Menu_Item
            EndIf
            Temp_Tijd = Tijd[Menu_Item] 
        EndIf     
        'Tijd vastzetten      
        If Knop_E = 0 Then           
            DelayMS 20 
            While Knop_E = 0: Wend
            Break
        EndIf   
    Wend
    Cls
    Print At 1,2, "Saving off time"    
    'Tijd wegschrijven
    Uren        = Tijd[0] << 4
    Uren        = Uren + Tijd[1]
    I2COUT SDA, SLC, Schrijven ,Reg_Uren_off, [Uren]
    Minuten     = Tijd[2] << 4
    Minuten     = Minuten + Tijd[3]
    I2COUT SDA, SLC, Schrijven ,Reg_Min_off, [Minuten]
    DelayMS 1000    

GoTo Main
'****************************************************************
Subroutines:
    '************************************************************
    Puls_uit:
        High Startpuls
        DelayMS 1000
        Low Startpuls  
    Return   
    '************************************************************
    Pc_aan:
        High Power
        Power_status = 1
    Return
    '************************************************************ 
    Pc_uit:
        Low Power 
        Power_status = 0
    Return  
    '************************************************************
    bcd_to_bin:
        bcd_uit = bcd_in >> 4
        bcd_uit = bcd_uit * 10
        bcd_in = bcd_in & %00001111 
        bcd_uit = bcd_uit + bcd_in 
    Return
    '************************************************************
    Tijd_Controleren:
        If Timer_OnOff = 1 Then
            I2CIN  SDA, SLC, Lezen, Reg_Min_on,    [Min_On]
            I2CIN  SDA, SLC, Lezen, Reg_Uren_on,   [Uur_On] 
            
            temp        = Uur_On & %11110000
            temp        = temp >> 4
            temp        = temp * 10
            Uur_On      = Uur_On & %00001111
            Uur_On      = Uur_On + temp
            
            temp        = Min_On & %11110000
            temp        = temp >> 4
            temp        = temp * 10
            Min_On      = Min_On & %00001111
            Min_On      = Min_On + temp

            If Minuten = Min_On And Uren = Uur_On And Seconden = 0 Then
                Cls
                DelayMS 200
                'Inschakelen
                              '1234567890123456
                Print At 1,1, "   Booting...   "
                GoSub Pc_aan      'Spanning opzetten
                DelayMS 1500      'Wachten tot voeding opgestart is
                GoSub Puls_uit    'Puls voor pc te doen booten
                Timer_OnOff = 0
                Cls
            EndIf  
        EndIf 
        If Power_status = 1 Then
            I2CIN  SDA, SLC, Lezen, Reg_Min_off,    [Min_Off]
            I2CIN  SDA, SLC, Lezen, Reg_Uren_off,   [Uur_Off]  
            
            temp        = Uur_Off & %11110000
            temp        = temp >> 4
            temp        = temp * 10
            Uur_Off     = Uur_Off & %00001111
            Uur_Off     = Uur_Off + temp
            
            temp        = Min_Off & %11110000
            temp        = temp >> 4
            temp        = temp * 10
            Min_Off     = Min_Off & %00001111
            Min_Off     = Min_Off + temp
            
            If Minuten = Min_Off And Uren = Uur_Off And Seconden = 0 Then
                'Uitschakelen
                              '1234567890123456
                Print At 1,1, "Shutting down..."
                Print At 2, 1, Rep "-"\16
                GoSub Puls_uit    'Pc een puls geven om te doen afsluiten
                'Nu moet er 160 sec gewacht worden voordat de spanning wordt uitgeschakeld
                'Uitschakeltijd uitrekenen:
                For Uitschakeltijd = 0 To 160 
                    Print At 2,1, Rep 255\ (Uitschakeltijd / 10 ) + 1
                    'Print At 1,1, dec3 16* (100/Uitschakeltijd)
                    DelayMS 1000  
                Next
                GoSub Pc_uit      'Spanning uitzetten 
                Cls
            EndIf  
        EndIf                    
    Return
'****************************************************************
End