home *** CD-ROM | disk | FTP | other *** search
- '**** Wetterstation **** 12.11.1997 *******************************************
- ' Autor Loys Nachtmann
- '
- ' Ausgabe 1. Zeile auf dem LC-Display
- ' Luftdruck [hPa]
- ' Temperatur [░C]
- ' Luftfeuchte [%]
- '
- ' Ausgabe 2. Zeile auf dem LC-Display
- ' Uhrzeit/Datum, synchronisiert mit DCF77-Antenne
- '
- ' Systemvoraussetzung:
- '
- ' - Application Board mit angeschlossenem Display
- '
- ' - Temperatursensor an AD[1]
- ' - KTY-Me▀bereich -27,5..100░C
- '
- ' - Barometer/H÷hensensor an AD[2]
- ' - H÷he bis 510 Meter: Mode = Hight_510 'J3 = Alt-Position, J2 = off
- ' - H÷he bis 2041 Meter: Mode = Hight_2041 'J3 = Alt-Position, J2 = on
- ' - Barometer : Mode = Barometer 'J3 = Baro-Position, J2 = on
- ' - Ausgabe des Luftdrucks in [hPa] auf dem LC-Display
- '
- ' - Luftfeuchtesensor an AD[3]
- ' - Me▀bereich 0..100%
- '
- ' - Uhr/Datumausgabe auf dem LC_Display ss:mm TT.MM.JJ
- '
- '********************************************************************************
-
- ' *** LCD_Integer
- define value word[1]
- define output word[2]
-
- 'nur fⁿr Tendenzanzeige ben÷tigt
- 'define Baro_alt word[3]
- 'define Temp_alt word[4]
- 'define Hygro_alt word[5]
-
-
- ' *** LCD_Byte ***
- define lcd_buf byte[11]
- define lcd_param byte[12]
-
- ' *** Counter
- define i byte[13]
-
- ' *** LCD-Ports ***
- define lcd_port byteport[2]
- define lcd_rs port[14]
- define lcd_rw port[13]
- define lcd_e port[15]
-
- ' *** H÷henmesser ***
- define Temp_Sample AD[1]
- define Baro_Sample AD[2]
- define Hyg_Sample AD[3]
- define Hight_510 0
- define Hight_2041 2
- define Barometer 3
-
- '*** ASCII-Codes ***
- define c_0 &H30
- define c_C &H43
- define c_E &H45
- define c_M &H4D
- define c_P &H50
- define c_T &H54
- define c_m_ &H6D
- define c_h_ &H68
- define c_a_ &H61
- define c_s_ &H73
-
- define esc &H1B
- define c_Leer &H20
- define c_Prozent &H25
- define c_plus &H2B
- define c_Minus &H2D
- define c_Dot &H2E
-
- define c_colon &H3A
- define c_Gleich &H3D
- define c_Grad &HDF
- define c_steigend 126
- define c_fallend 127
-
-
- '*** Hauptprogramm ***
-
- 'Nur fⁿr Tendenzanzeige ben÷tigt
- 'Baro_alt = 0
- 'Temp_alt = 0
- 'Hygro_alt = 0
-
- hour = 10 : minute =30 : day =15 : month = 12 : year = 97
- gosub LCD_INIT
-
- #Loop
- gosub LCD_CLS
- LCD_param = 1 : gosub LCD_GOTOLINE
- gosub baro 'J3 = Baro-Position, J2 = on
- gosub temperatur
- gosub Hygrometer
-
- LCD_param = 2 : gosub LCD_GOTOLINE
- gosub DCF77_Uhr
- gosub DCF77_Datum
-
- PAUSE 100
- goto Loop
- END
-
-
- #baro
- LOOKTAB Baro_Tab,Baro_Sample,value : gosub LCD_Write_Integer
- lcd_param = c_h_ : gosub LCD_WriteChar
- lcd_param = c_P : gosub LCD_WriteChar
- 'Tendenz
- ' if value > Baro_alt then lcd_param = c_steigend
- ' if value = Baro_alt then lcd_param = c_gleich
- ' if value < Baro_alt then lcd_param = c_fallend
-
- lcd_param = c_Leer
- gosub LCD_WriteChar
- ' Baro_alt = value
- return
-
- #temperatur
- LOOKTAB Temp_Tab,Temp_Sample,value
- if value >= 0 then lcd_param = c_Plus else lcd_param = c_minus
- gosub LCD_WriteChar
- gosub LCD_Write_Integer
- lcd_param = c_Grad : gosub LCD_WriteChar
- 'Tendenz
- ' if value > Temp_alt then lcd_param = c_steigend
- ' if value = Temp_alt then lcd_param = c_gleich
- ' if value < Temp_alt then lcd_param = c_fallend
- lcd_param = c_Leer
- gosub LCD_WriteChar
- ' Temp_alt = value
- return
-
- #Hygrometer
- LOOKTAB Hyg_Tab,Hyg_Sample,value : gosub LCD_Write_Integer
- lcd_param = c_Prozent : gosub LCD_WriteChar
- 'Tendenz
- ' if value > Hygro_alt then lcd_param = c_steigend
- ' if value = Hygro_alt then lcd_param = c_gleich
- ' if value < Hygro_alt then lcd_param = c_fallend
- ' gosub LCD_WriteChar
- ' Hygro_alt = value
- return
-
- #DCF77_Uhr
- if hour < 10 then gosub LCD_0 ' Stunde
- value = hour : gosub LCD_Write_Integer : gosub LCD_Colon
-
- if minute < 10 then gosub LCD_0 ' Minute
- value = minute : gosub LCD_Write_Integer ': gosub LCD_Colon
-
- 'if second < 10 then gosub LCD_0 ' Sekunde
- 'value = second : gosub LCD_Write_Integer
-
- for i = 1 to 3
- gosub LCD_Leerzeichen
- next
- return
-
-
-
- #DCF77_Datum
- if day < 10 then gosub LCD_0 ' Tag
- value = day : gosub LCD_Write_Integer : gosub LCD_Dot
-
- if month < 10 then gosub LCD_0 ' Monat
- value = month : gosub LCD_Write_Integer : gosub LCD_Dot
-
- if year < 10 then gosub LCD_0 ' Jahr
- value = year : gosub LCD_Write_Integer
- return
-
-
-
-
- '*** Output Integer to LCD ***
- #LCD_Write_Integer
- output = abs(value)
- 'negatives Vorzeichen oder Leerzeichen
- if value < 0 then gosub LCD_Minus 'else gosub LCD_Leerzeichen
-
- 'Zehntausender-Dezimalstelle oder Leerzeichen
- if abs(value) >= 10000 then gosub LCD_Zehntausend 'else gosub LCD_Leerzeichen
- output = output mod 10000
-
- ' Tausender-Dezimalstelle oder Leerzeichen
- if abs(value) >= 1000 then gosub LCD_Tausend 'else gosub LCD_Leerzeichen
- output = output mod 1000
-
- ' Hunderter-Dezimalstelle oder Leerzeichen
- if abs(value) >= 100 then gosub LCD_Hundert 'else gosub LCD_Leerzeichen
- output = output mod 100
-
- ' Zehner-Dezimalstelle oder Leerzeichen
- if abs(value) >= 10 then gosub LCD_Zehn 'else gosub LCD_Leerzeichen
-
- ' Einer Dezimalstelle
- lcd_param = c_0 + output mod 10 : gosub LCD_WriteChar
- return
-
- #LCD_Leerzeichen
- lcd_param = c_Leer : goto LCD_WriteChar
-
- #LCD_Minus
- lcd_param = c_Minus : goto LCD_WriteChar
-
- #LCD_0 ' schreibe "0"
- lcd_param = c_0 : goto LCD_WriteChar
-
- #LCD_Dot ' schreibe "."
- lcd_param = c_Dot : goto LCD_WriteChar
-
- #LCD_Colon ' schreibe ":"
- lcd_param = c_Colon : goto LCD_WriteChar
-
- #LCD_Zehntausend
- lcd_param = c_0 + output/10000 : goto LCD_WriteChar
-
- #LCD_Tausend
- lcd_param = c_0 + output/1000 : goto LCD_WriteChar
-
- #LCD_Hundert
- lcd_param = c_0 + output/100 : gosub LCD_WriteChar
- return
-
- #LCD_Zehn
- lcd_param = c_0 + output/10 : goto LCD_WriteChar
-
-
- '*** LCD_Interface ***
- '( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden)
-
- #LCD_INIT
-
- ' alle ports 0
- lcd_port = OFF
-
- ' 8-Bit-Modus aktivieren
- lcd_param=&H38 : gosub LCD_WRITECMD
-
- ' mit 8-Bit-Command in 4-Bit-Modus umschalten
- lcd_port=&B00000010
- tog lcd_e
- tog lcd_e
-
- ' ab jetzt 4-Bit-Modus
- lcd_param = &H28 : gosub LCD_WRITECMD
- lcd_param = &H0C : gosub LCD_WRITECMD
-
- ' Display loeschen
- #LCD_CLS
- lcd_param = &H02 : gosub LCD_WRITECMD
- lcd_param = &H01 : gosub LCD_WRITECMD
- return
-
- #LCD_Clear_Line_1 ' **** L÷sche Zeile 1
- lcd_param = 1 : gosub LCD_GOTOLINE ' Wechsel in die erste Zeile
- for i = 1 to 16
- gosub LCD_Leerzeichen
- next
- lcd_param = 1 : gosub LCD_GOTOLINE ' Wechsel in die erste Zeile
- return
-
- #LCD_Clear_Line_2 ' **** L÷sche Zeile 2
- lcd_param = 2 : gosub LCD_GOTOLINE ' Wechsel in die zweite Zeile
- for i = 1 to 16
- gosub LCD_Leerzeichen
- next
- lcd_param = 2 : gosub LCD_GOTOLINE ' Wechsel in die erste Zeile
- return
-
- ' Zeilenwechsel
- #LCD_GOTOLINE
- if lcd_param = 1 then lcd_param = &H80
- if lcd_param = 2 then lcd_param = &HC0
- goto LCD_WRITECMD
-
- ' LCD-Kommando
- #LCD_WRITECMD
- lcd_buf = OFF
- goto LCD_WRITE
-
- ' Zeichenausgabe
- #LCD_WRITECHAR
- lcd_buf = &B00100000
-
- ' Kommando oder Zeichen an Display senden
- #LCD_WRITE
- lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
- tog lcd_e
- tog lcd_e
- lcd_port = lcd_buf or (lcd_param and &H0F) ' Lo-Nibble
- tog lcd_e
- tog lcd_e
- return
-
- table Baro_Tab "Baro.tab" 'Tabelle mu▀ im Programmverzeichnis stehen)
- table Temp_Tab "kty.tab" 'Tabelle mu▀ im Programmverzeichnis stehen)
- table Hyg_Tab "Hyg.tab" 'Tabelle mu▀ im Programmverzeichnis stehen)
-
-
-
-