INFO - FAQ - CC2-Forum - CCPro-Forum |
Hallo Bravo Hab mir mal dein Programm angeguckt und meinen Senf dazu gegeben... und der DCF-Empfang funktioniert. Gruß 'Basic++2006 v2.1.8 'Station V2.0 define LIGHT port[16] define tempO as word define tempU as word const DS1631=158 'Adresse const DS1632=154 'Adresse 'define ADC8 ad[8]' <-- nicht nötig, wird in Lib\GET_KEY.BAS gemacht define SDA port[9] define SCL port[10] define EXTPORT byteport[4] DEFINE REL5 AS PORT[1] 'damit auch mehr als ein Relais am EXTPORT (byteport[4]) anziehen kann 'werden die gewünschten zustände in die Hilfsvariable geschrieben, und 'diese dann im Zyklus an den Extport übergeben define extport4 as byte 'Hilfsvariable zum zwischenspeichern define REL1 ref extport4 at bit[5] 'port [29] define REL2 ref extport4 at bit[6] 'port [30] define REL3 ref extport4 at bit[7] 'port [31] define REL4 ref extport4 at bit[8] 'port [32] define Led1 ref extport4 at bit[1] 'Port [25] DEFINE REL6 ref extport4 at bit[2] 'PORT [26] = Led 2 DEFINE REL7 ref extport4 at bit[3] 'PORT [27] = Led 3 define Led4 ref extport4 at bit[4] 'Port [28] 'define ADC ad[8] ' <-- nicht nötig, wird in Lib\GET_KEY.BAS gemacht define DIM1 da[1] define DIM2 da[2] 'Define Dimmer1 as byte[10] <-- entweder allen Variabeln Speicherstellen zuordnen oder keiner 'kommt sonst zu Mehrfachbelungen der Speicherstellen, je nach Compilerversion define Dimmer1 as byte Define Dimmer2 as byte define HUNDERTER as byte define ZEHNER as byte define EINER as byte define VALUE as word define VALUE1 as word define i as byte define x as byte define y as byte define a as byte define INVALUE2 as word define hygro as word DEFINE f AS BYTE define INVALUE as word define INVALUE1 as word import "Lib\GET_KEY.BAS" import "Lib\GET_VALUE.BAS" import "lib\Show_Time.BAS" import "Lib\DS1631_GENERIC.BAS" '----- LED HELLIGKEIT ----- const BRIGHT0 =07h const BRIGHT1 =17h const BRIGHT2 =27h const BRIGHT3 =37h const BRIGHT4 =47h const BRIGHT5 =57h const BRIGHT6 =67h const BRIGHT7 =77h const h=74h const t=78h const u=1Ch const o=5ch ' 7 SEGMENT DECODER FUNCTION DECODE (CODE as byte) SELECT CASE CODE CASE 0 CODE=3Fh CASE 1 CODE=06h CASE 2 CODE=5Bh CASE 3 CODE=4Fh CASE 4 CODE=66h CASE 5 CODE=6Dh CASE 6 CODE=7Dh CASE 7 CODE=07h CASE 8 CODE=7Fh CASE 9 CODE=6Fh END SELECT RETURN CODE END FUNCTION '-- IIC SEND BUFFER TO SAA1064 ---- FUNCTION SENDBUF(BRIGHT as byte,DIGIT1 as byte,DIGIT2 as byte,DIGIT3 as byte,DIGIT4 as byte) IIC.INIT IIC.START IIC.SEND 118 'WRITE ADDRESS IIC.SEND 0 IIC.SEND BRIGHT IIC.SEND DIGIT1 IIC.SEND (DIGIT2 or 128) IIC.SEND DIGIT3 IIC.SEND DIGIT4 IIC.STOP IIC.OFF END FUNCTION #INIT LIGHT=off SDA=on SCL=on EXTPORT=off LIGHT=off SENDBUF(BRIGHT1,255,255,255,255) pause 10 SENDBUF(BRIGHT1,0,0,0,0) pause 10 SENDBUF(BRIGHT1,255,255,255,255) pause 10 SENDBUF(BRIGHT1,0,0,0,0) rel1 = off rel2 = off rel3 = off rel4 = off rel5 = off rel6 = off rel7 = off dim1 = 0 dim2 = 0 Dimmer1 = 0 x=0 dimmer2 =0 y=0 LCD.INIT LCD.PRINT "TERRA-C v1.0" FOR f = 1 TO 3 BEEP 50, 50, 10 NEXT f lcd.clear 'Lcd-Objekt hier schließen, da im DS1631-Abfrage IIC-Objekt geöffnet wird lcd.off DS1631RESET(DS1631) DS1631RESET(DS1632) DS1631SET_STATUS(DS1631,1) DS1631SET_STATUS(DS1632,1) 'lcd.off #LOOP i= i+1 a= a+1 INVALUE2=GET_key() if (hour = 07) and (minute = 00) then DIMMER1 = 1 end if if (hour = 17) and (minute = 00) then DIMMER1 = 2 end if if dimmer1 = 1 then if a = 114 then if x < 255 then x = x+1 Dim1 = x end if end if end if If Dimmer1 = 2 then if a = 114 then if x > 0 then x = x-1 Dim1 = x end if end if end if if dimmer1 = 3 then if x < 255 then x = x+5 Dim1 = x end if end if If Dimmer1 = 4 then if x > 0 then x = x-5 Dim1 = x end if dimmer1 =0 end if print x & " " & y & " " & Hour & ":" & minute & ":" & Second & " " & dimmer1 if invalue2 = 1 then rel1 = on if invalue2 = 2 then rel2 = on if invalue2 = 3 then rel3 = on if invalue2 = 4 then rel4 = on if invalue2 = 5 then rel5 = on if invalue2 = 6 then rel6 = on if invalue2 = 7 then rel7 = on if invalue2 = 9 then dimmer1 = 3 end if if invalue2 = 12 then rel1 = off if invalue2 = 12 then rel2 = off if invalue2 = 12 then rel3 = off if invalue2 = 12 then rel4 = off if invalue2 = 12 then rel5 = off if invalue2 = 12 then rel6 = off if invalue2 = 12 then rel7 = off if invalue2 = 0 then dimmer1 = 4 end if if (hour = 22) and (minute = 30) then REL1 = ON if (hour = 22) and (minute = 37) then REL1 = OFF if (hour = 22) and (minute = 31) then REL2 = ON if (hour = 22) and (minute = 36) then REL2 = OFF if (hour = 22) and (minute = 32) then REL3 = ON if (hour = 22) and (minute = 35) then REL3 = OFF if (hour = 22) and (minute = 33) then REL4 = ON if (hour = 22) and (minute = 34) then REL4 = OFF if invalue2 = 13 then lcd.init lcd.clear LCD.PRINT "UHR STELLEN" pause 30 lcd.clear LCD.PRINT "STUNDE STELLEN " INVALUE=GET_VALUE() hour = INVALUE pause 30 LCD.Clear LCD.PRINT "MINUTE STELLEN" INVALUE1=GET_VALUE() minute = INVALUE1 pause 30 lcd.off end if DS1631CONVERT(DS1631) DS1631WAIT_READY(DS1631) TEMPo=DS1631GET_TEMP(DS1631) TEMPo=TEMPo SHR 7 if (TEMPo and 0100h) = 0100h then TEMPo=(TEMPo or FE00h) value= (tempo*10)/2 HUNDERTER=VALUE/100 ZEHNER=(VALUE-(HUNDERTER*100))/10 EINER=VALUE-HUNDERTER*100-ZEHNER*10 LIGHT=off if i = 1 then SENDbUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),t) If i = 7 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),o) if i = 14 then SENDBUF(BRIGHT1,0,0,0,0) DS1631CONVERT(DS1632) DS1631WAIT_READY(DS1632) TEMPu=DS1631GET_TEMP(DS1632) TEMPu=TEMPu SHR 7 if (TEMPu and 0100h) = 0100h then TEMPu=(TEMPu or FE00h) value1= (tempu*10)/2 HUNDERTER=VALUE1/100 ZEHNER=(VALUE1-(HUNDERTER*100))/10 EINER=VALUE1-HUNDERTER*100-ZEHNER*10 LIGHT=off if i= 15 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),t) if i= 22 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),u) if i= 29 then SENDBUF(BRIGHT1,0,0,0,0) hygro= (60*10)/2 HUNDERTER=hygro/100 ZEHNER=(hygro-(HUNDERTER*100))/10 EINER=hygro-HUNDERTER*100-ZEHNER*10 LIGHT=off if i= 30 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),h) if i= 37 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),o) if i= 44 then SENDBUF(BRIGHT1,0,0,0,0) if i= 45 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),h) if i= 52 then SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),u) if i= 59 then SENDBUF(BRIGHT1,0,0,0,0) lcd.init LCD.POS 1,1 lcd.print SHOW_TIME() LCD.pos 1,10 LCD.PRINT " H:" & hygro/10 & "." & (hygro and 1)*5 & "%" LCD.POS 2,1 LCD.PRINT "T1:" & value/10 & "." & (value and 1)*5 & "°" LCD.pos 2,9 LCD.PRINT "T2:" & value1/10 & "." & (value1 and 1)*5 & "°" lcd.off if i= 60 then i=0 if a= 115 then a=0 EXTPORT = extport4 ' <-- Hilfsvariable an den Extport übergeben = Relais schalten goto LOOP |
Antwort schreiben |