'******************************************************************** ' System : C-Control/BASIC mit Microprozessor MC68HC05B6 ' Programm: Wetter.bas ' Version : V1.16m ' Autor : (c) DG1XPZ 21.09.1997 ' Länge : 4636 Byte ' Funktion: Anzeige von Wetterdaten ' Systemvoraussetzungen: ' - Applicationsboard mit angeschlossenem Display ' - Applicationsboard mit angeschlossener Tastatur ' Schwerpunkt: ' - Ausgeben von Text am Display ' - Eingeben von Text mit Tastatur ' - Meßwerte vom AD-Wandler auswerten -> ' Hinweise: ' - AD1 = Temp -27.5°C bis 100°C ' - AD2 = Lux 0 bis 265 Lux ' - AD3 = Luftdruck in mBar 800hPa bis 1015hPa ' - wechseln zum Menü während der laufenden Messung: mit STERN-Taste ' ' Meßwertaufzeichnung: ' - Tag, Monat, Jahr, Stunde, Minute, Sekunde, Temperatur, Lux, Luftdruck ' - Platzbedarf im EEPROM = 9 x 2 byte = 18 Byte je Messung ' bei Intervall 30 = 48 Messungen pro Tag = 48 x 18 Byte ' = 864 Byte pro Tag ' Fehlermeldungen: ' 1. "EEPROM voll" + Beepton -> wenn der interne EEPROM kein Platz mehr ' zum Speichern der Wetterwerte hat. ' Wartet auf das Drücken einer beliebigen Taste, und blendet Menü ein. ' Versionsgeschichte: ' V1.00: - Urversion ' V1.01: - Texte geändert ' V1.02: - Einbindung Luftdruckmesser ' V1.03: - Aufzeichnung der Daten und Abfrage während der laufenden Messung ' duch drücken der STERN-Taste ' V1.04: - weiß nicht mehr ' V1.05: - Achtung ! Version 1.04 hatte Fehler !! -> bereinigt ' V1.06: - Aufzeichnung der Daten und Abfrage während der laufenden Messung ' duch drücken der STERN-Taste ' - Eingabe Meßintervall 1 Min bis 60 Min ' V1.07: - negative Temperatur wird endlich ausgegeben ' - Sekunde der Aufzeichnung stimmt ' V1.08: - Kleinkram ' V1.09: - Kleinkram ' V1.10: - ausblenden führender Nullen bei Temp-Anzeige ' - Groß/Klein-Schreibung bei der Textausgabe auf LCD-Display ' V1.11: - Menüsteuerung ' V1.12: - key_code Abfrage (2 Tabellen zusätzlich) ' V1.13: - Rücksprünge mit "Zeilex + y" innerhalb einer Zeile ' V1.14: - Fehler bei J/N-Abfrage: "einzeln" und "Meßwert löschen" ' V1.15: - diese Versionsgeschichte ' V1.16: - bei Meßwertübertragung zum PC ' -> Abfrage von "einzeln (N=*/J=0)" in "einzeln (N=*/J=#)" ' damit kein versehentliches löschen der Daten bei nachfolgender ' Abfrage "löschen" ' - Nach "EEPROM voll" Menü einblenden '******************************************************************** ' *** Daten-Definition *** define key word '1-2 Byte define Temperatur word '2-4 Byte define Luftdruck word '5-6 Byte define Lux word '7-8 Byte define key_nr byte '09 Byte für Tastaturabfrage benötigt define compare byte '10 Byte für Tastaturabfrage benötigt define lcd_buf byte '11 Byte für LCD-Ausgabe benötigt define lcd_param byte '12 Byte für LCD-Ausgabe benötigt define Intervall byte '13 Byte Variable für Meßintervall define hour_ byte '14 Byte define minute_ byte '15 Byte define second_ byte '16 Byte define day_ byte '17 Byte define month_ byte '18 Byte define Year_ byte '19 Byte define I byte '20 Byte Laufvariable define last_minute byte '21 Byte prüft ob eine Minute vergangen define flag byte '22 Byte wird als Flag benötigt '*** Ende der Variablen ************************************************ '*********************************************************************** '*** Definition Symbolischer Konstanten (benötigt keinen Speicherplatz!!) define AD_Temp ad[1] define AD_Lux ad[2] define AD_Luft ad[3] define keyboard ad[8] define blocksize 9 define Zeile1 &H80 ' Display-Adresse 'define Zeile2 &HC0 ' dto define Zeile2 &HC0 ' dto 'define Zeile3 &H94 ' dto 'define Zeile4 &HD4 ' dto ' die Reihenfolge der Tasten auf dem Keyboard define KEY_Stern 0 '* define KEY_7 1 '7 define KEY_4 2 '4 define KEY_1 3 '1 define KEY_0 4 '0 define KEY_8 5 '8 define KEY_5 6 '5 define KEY_2 7 '2 define KEY_Kreuz 8 '# define KEY_9 9 '9 define KEY_6 10 '6 define KEY_3 11 '3 define KEY_Nicht 12 'keine Taste gedrückt ' *** Definition LCD-Ports *** define lcd_port byteport[2] define lcd_rw port[13] define lcd_rs port[14] define lcd_e port[15] ' *** ASCII-Codes *** ' (benötigt auch keinen Speicherplatz, ist nur Programmierhilfe !!) define Leerz &H20 : define AKlammer &H40 define AZeichen &H21 : define A_ &H41 : define kla_ &H61 : define ae_ &HE1 define Quote &H22 : define B_ &H42 : define klb_ &H62 : define oe_ &HEF define Kreuz &H23 : define C_ &H43 : define klc_ &H63 : define ue_ &HF5 define Dollar &H24 : define D_ &H44 : define kld_ &H64 : define MStrich &HB0 '- define Prozent &H25 : define E_ &H45 : define kle_ &H65 : define Grad &HDF '° define Kaufm_Und &H26 : define F_ &H46 : define klf_ &H66 : define sz_ &HE2 define Apostro_O &H27 : define G_ &H47 : define klg_ &H67 : define mue_ &HE4 'µ define LKlammer &H28 : define H_ &H48 : define klh_ &H68 : define Wurzel &HE8 define RKlammer &H29 : define I_ &H49 : define kli_ &H69 : define Unendl &HF3 define Stern &H2A : define J_ &H4A : define klj_ &H6A : define Ohm &HF4 define Plus &H2B : define K_ &H4B : define klk_ &H6B : define Summe &HF6 define Apostro_U &H2C : define L_ &H4C : define kll_ &H6C : define Pi &HF7 define Minus &H2D : define M_ &H4D : define klm_ &H6D : define Geteilt &HFD define Punkt &H2E : define N_ &H4E : define kln_ &H6E : define Semikol &H3B define SStrich &H2F : define O_ &H4F : define klo_ &H6F : define LSKlammer &H3C define Null &H30 : define P_ &H50 : define klp_ &H70 : define Gleich &H3D define Eins &H31 : define Q_ &H51 : define klq_ &H71 : define RSKLammer &H3E define Zwei &H32 : define R_ &H52 : define klr_ &H72 : define RPfeil &H7E define Drei &H33 : define S_ &H53 : define kls_ &H73 : define FZeichen &H3F define vier &H34 : define T_ &H54 : define klt_ &H74 : define UStrich &H5F define fünf &H35 : define U_ &H55 : define klu_ &H75 : define LPfeil &H7F define sechs &H36 : define V_ &H56 : define klv_ &H76 define sieben &H37 : define W_ &H57 : define klw_ &H77 define acht &H38 : define X_ &H58 : define klx_ &H78 define neun &H39 : define Y_ &H59 : define kly_ &H79 define DPunkt &H3A : define Z_ &H5A : define klz_ &H7A define Nicht &HFE '************************************************************************ '*** Beginn Hauptprogramm *********************************************** #start Intervall = 15 gosub LCD_INIT last_minute=(-1) gosub Text_Programm_Name pause 50 gosub LCD_CLS #werteausgabe gosub ifkey if lcd_param = stern then gosub Menue_I if lcd_param = Stern or lcd_param = Kreuz then gosub LCD_CLS 'm' Bild_neu 'm' lcd_param = Zeile2 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile lcd_param = Zeile1 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile 'print " °C ; Lux;hPa" ' Ausgabe über SerPort for I = 0 to 13 looktab Tab_text_Kopfzeile, I, lcd_param gosub LCD_WRITECHAR next I looktab temptable, ad_temp, temperatur 'lux = ad_lux * 75 / 10 ' Umwandlung in Lux-Wert lux = ad_lux Luftdruck = ad_Luft * 50 / 51 ' Anpassung Tabelle if Luftdruck * 107 mod 100 > 50 then Luftdruck = (Luftdruck * 107 / 100) + 2 else Luftdruck = Luftdruck * 107 / 100 + 1 ' Test ' Anpassung da Betriebsspannung am Luftdruckmodul nicht 5.1V sondern 4.93V sind looktab Lufttable, Luftdruck, Luftdruck day_ = day : Month_ = Month : Year_ = Year : Hour_ = Hour : Minute_ = Minute : second_ = second if minute_ <> last_minute and intervall > 0 then gosub mesz_intervall if intervall=60 and minute_>0 then last_minute=60 gosub schreibe_wert 'm' 'lcd_param = Zeile4 : gosub LCD_WriteCMD ' Wechsel in die vierte Zeile 'gosub schreibe_Datum 'lcd_param = Leerz : gosub LCD_WRITECHAR 'lcd_param = Leerz : gosub LCD_WRITECHAR 'gosub Schreibe_Zeit goto werteausgabe end ' *** Ende Hauptprogramm ************************************************ ' *********************************************************************** ' *** Beginn Unterprogramme ********************************************* #Menue_I 'gosub Bild_neu gosub LCD_CLS ' 1 - Datum/Zeit lcd_param = Zeile1 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile lcd_param = Eins : gosub LCD_WRITECHAR gosub Text_Leerz_Minus_Leerz gosub Text_Datum lcd_param = SStrich : gosub LCD_WRITECHAR gosub Text_Zeit ' 2 - Intervall xx min lcd_param = Zeile2 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile lcd_param = Zwei : gosub LCD_WRITECHAR gosub Text_Leerz_Minus_Leerz gosub Text_Intervall lcd_param = leerz : gosub LCD_writechar lcd_param = Null + INTERVALL / 10 : gosub LCD_WRITECHAR lcd_param = Null + Intervall mod 10 : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR gosub Text_min pause 80 'm' lcd_param = Zeile4 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile lcd_param = Zeile2 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile ' 3 - Meßwerte zum PC lcd_param = drei : gosub LCD_WRITECHAR gosub Text_Leerz_Minus_Leerz gosub Text_Meszwerte gosub Text_zumPC gosub lesekey if lcd_param = Stern or lcd_param = Kreuz then return if lcd_param = eins then gosub Eingabe_Zeit if lcd_param = zwei then gosub Eingabe_Intervall if lcd_param = drei then gosub Meszwert_laden goto Menue_I return #Eingabe_Zeit gosub LCD_CLS 'gosub Text_Programm_name lcd_param = Zeile1 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile gosub Text_Zeit lcd_param = Dpunkt : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR gosub schreibe_Zeit lcd_param = Zeile1+6 : gosub LCD_WriteCMD gosub LCD_Blink_on gosub lesekey if lcd_param = stern then return if lcd_param = Kreuz then goto eingabe_Datum hour_= key gosub lesekey : hour_= hour_* 10 + key if hour_ > 23 then goto Eingabe_Zeit lcd_param = dPunkt : gosub lcd_writechar gosub lesekey : minute_= key gosub lesekey : minute_= minute_* 10 + key if minute_ > 59 then goto Eingabe_Zeit lcd_param = dPunkt : gosub lcd_writechar gosub lesekey : second_= key gosub lesekey : second_= second_* 10 + key if second_ > 59 then goto Eingabe_Zeit lcd_param = RPfeil : gosub lcd_writechar lcd_param = Kreuz : gosub lcd_writechar gosub LCD_links gosub lesekey if lcd_param <> kreuz then goto Eingabe_Zeit hour = hour_ : minute = minute_ : second = second_ #eingabe_datum lcd_param = Zeile2 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile gosub Text_Datum lcd_param = Dpunkt : gosub LCD_WRITECHAR gosub schreibe_datum lcd_param = Zeile2+6: gosub LCD_WriteCMD gosub lesekey if lcd_param = stern then goto eingabe_Zeit if lcd_param = Kreuz then return Day_= key gosub lesekey : day_= day_* 10 + key if day_ > 31 then goto eingabe_datum lcd_param = Punkt : gosub lcd_writechar gosub lesekey : Month_= key gosub lesekey : Month_= month_* 10 + key if Month_ > 12 then goto eingabe_datum lcd_param = Punkt : gosub lcd_writechar gosub lesekey : Year_= key gosub lesekey : year_= key gosub lesekey : Year_= key gosub lesekey : year_= year_* 10 + key lcd_param = RPfeil : gosub lcd_writechar lcd_param = Kreuz : gosub lcd_writechar gosub LCD_links gosub lesekey if lcd_param = stern or lcd_param <> kreuz then goto eingabe_datum day = day_ : Month = Month_ : Year = year_ Gosub LCD_Blink_off return #Bild_neu 'löscht gesamtes LCD-Display und gibt den Programmnamen aus gosub LCD_cls gosub Text_Programm_Name return #Eingabe_Intervall ' print "Intervall (1-60 min): "; ' Ausgabe über SerPort gosub LCD_CLS 'gosub Text_Programm_name lcd_param = Zeile1 : gosub LCD_WriteCMD ' Wechsel in die dritte Zeile gosub Text_Intervall lcd_param = Zeile2 : gosub LCD_WriteCMD ' Wechsel in die vierte Zeile for I = 0 to 5 looktab Tab_Text_Eins_Sechzig, I, lcd_param gosub LCD_WRITECHAR next I gosub Text_min lcd_param = rKlammer : gosub LCD_WRITECHAR lcd_param = Dpunkt : gosub LCD_WRITECHAR lcd_param = leerz : gosub LCD_WRITECHAR gosub LCD_Blink_on gosub lesekey if lcd_param = stern then return if lcd_param = kreuz then goto Eingabe_Intervall intervall= key gosub lesekey if lcd_param = kreuz or lcd_param = stern then goto Eingabe_Intervall else intervall = intervall * 10 + key if intervall > 60 then goto Eingabe_Intervall lcd_param = RPfeil : gosub lcd_writechar lcd_param = Kreuz : gosub lcd_writechar gosub LCD_links gosub lesekey if lcd_param <> kreuz then goto Eingabe_Intervall gosub LCD_Blink_off return #mesz_intervall 'Meßintervall for I=0 to 60 step intervall if minute_= I then gosub meszwert_speichern next I return #meszwert_speichern ' speicher Meßwerte im EEPROM last_minute = minute_ open# for append if filefree > blocksize then print# day else goto filefull if filefree > blocksize then print# month else goto filefull if Filefree > blocksize then print# year else goto filefull if filefree > blocksize then print# hour else goto filefull if filefree > blocksize then print# minute else goto filefull if filefree > blocksize then print# second else goto filefull if Filefree > blocksize then print# temperatur else goto filefull if filefree > blocksize then print# Lux else goto filefull if filefree > blocksize then print# Luftdruck else goto filefull print day;".";month;".";Year;" ";hour;":";minute/10;minute mod 10;":";second/10;second mod 10;" "; print temperatur/10;".";temperatur mod 10;"°C ";Lux;"Lux ";Luftdruck;"hPa" goto fileok #filefull 'gosub lcd_cls lcd_param = Zeile2 : gosub LCD_WriteCMD for I = 0 to 10 looktab Tab_Text_EEprom_voll, I, lcd_param 'print"EEPROM voll" gosub LCD_WRITECHAR next I for i=1 to 25 beep 440,2,0 beep 200,2,0 next gosub lesekey 'bleibt stehen wenn EEPROM voll gosub Menue_I #fileok close# return #meszwert_laden 'liest Meßwerte aus dem EEPROM und übertragt sie zum PC gosub LCD_CLS 'gosub Text_programm_name for I = 0 to 18 looktab Tab_Text_einzeln, I, lcd_param gosub LCD_WRITECHAR next I gosub LCD_blink_on gosub lesekey if lcd_param = stern then Flag = 1 if lcd_param = Kreuz then Flag = 2 gosub LCD_blink_off gosub LCD_CLS 'gosub Text_programm_name if Flag = 0 then goto meszwert_laden 'Ziffer 1 bis 9 und Kreuz = nächstes Menü open# for Read #lese_naechsten_wert if EOF then goto sind_uebertragen input# Day_ : input# Month_ : input# Year_ input# Hour_ : input# Minute_ : input# second_ input# Temperatur input# Lux input# Luftdruck print Day_;".";Month_;".";Year_;" ";Hour_/10;Hour_ mod 10;":";minute_/10;Minute_ mod 10;":";second_/10;second_ mod 10;" "; print Temperatur/10;".";temperatur mod 10;"°C "; print Lux;"Lux ";Luftdruck;"hPa" 'lcd_param = Zeile4 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile 'gosub schreibe_zeit 'lcd_param = Leerz : gosub LCD_WRITECHAR 'lcd_param = Leerz : gosub LCD_WRITECHAR 'gosub Schreibe_Datum gosub schreibe_wert if flag=1 then goto lese_naechsten_wert #einzelwert gosub lesekey if lcd_param = stern then goto meszwert_löschen if lcd_param <> Kreuz then goto einzelwert goto lese_naechsten_wert #sind_uebertragen Flag=0 ' muß wieder zurückgesetzt werden für nächste Abfrage ' Ende Übertr print "Ende uebertr. ->#" ' Ausgabe über SerPort lcd_param = Zeile2 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile for I = 0 to 19 looktab Tab_Text_Ende_uebertr, I, lcd_param gosub LCD_WRITECHAR next I gosub LCD_links gosub LCD_Blink_on gosub lesekey if lcd_param <> kreuz then goto sind_uebertragen #meszwert_löschen gosub lcd_cls 'gosub Text_Programm_name 'print "Meßwerte löschen? ->#" ' Ausgabe über SerPort lcd_param = Zeile1 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile gosub Text_Meszwerte lcd_param = Zeile2 : gosub LCD_WriteCMD ' Wechsel in die zweite Zeile for I = 0 to 18 looktab Tab_Text_loeschen, I, lcd_param gosub LCD_WRITECHAR next I 'gosub LCD_links gosub lesekey if lcd_param = stern then gosub LCD_blink_off if key_nr = key_stern then return if lcd_param <> Null then goto meszwert_löschen open# for write close# gosub LCD_blink_off return #lesekey ' wartet auf Tastatureingabe #loop lcd_param = &H1F for key_nr = 0 to 11 looktab keycodes, key_nr, compare if abs(keyboard-compare) < 4 then gosub HANDLE_LCD_KEY if lcd_param >= Kreuz and <= neun then return next goto loop #Ifkey ' prüft ob Tastatur gedrückt wurde #loop_ifkey lcd_param = &H1F for key_nr = 0 to 12 looktab keycodes, key_nr, compare if abs(keyboard-compare) < 4 then gosub HANDLE_LCD_KEY return next goto loop_ifkey #schreibe_wert ' Ausgabe auf LCD-Display lcd_param = Zeile2 : gosub LCD_Writecmd if temperatur < 0 then lcd_param = minus if temperatur < 0 then gosub lcd_writechar if temperatur < 0 then goto schreibe_wert_zehner if temperatur>=1000 then lcd_param=null+temperatur/1000 else lcd_param=Leerz ' blendet führen gosub lcd_writechar #schreibe_wert_zehner if temperatur < 0 then temperatur = temperatur * (-1) if temperatur>=100 then lcd_param=null+temperatur/100 else lcd_param=Leerz ' blendet führende nullen aus gosub lcd_writechar lcd_param = null + temperatur mod 100 / 10 : gosub lcd_writechar lcd_param = punkt : gosub lcd_writechar lcd_param = null + temperatur mod 100 mod 10 : gosub lcd_writechar lcd_param = leerz :gosub lcd_writechar lcd_param = null + lux / 1000 : gosub lcd_writechar lcd_param = null + lux mod 1000 / 100 : gosub lcd_writechar lcd_param = null + lux mod 1000 mod 100 / 10 : gosub lcd_writechar lcd_param = null + lux mod 1000 mod 100 mod 10 : gosub lcd_writechar lcd_param = leerz :gosub lcd_writechar lcd_param = null + Luftdruck / 1000 : gosub lcd_writechar lcd_param = null + Luftdruck mod 1000 / 100 : gosub lcd_writechar lcd_param = null + Luftdruck mod 1000 mod 100 / 10 : gosub lcd_writechar lcd_param = null + Luftdruck mod 1000 mod 100 mod 10 : gosub lcd_writechar lcd_param = leerz :gosub lcd_writechar lcd_param = leerz :gosub lcd_writechar return #schreibe_Datum ' Datum auf LCD-Display ausgeben lcd_param = NULL + Day_ / 10 : gosub LCD_WRITECHAR lcd_param = NULL + day_ mod 10 : gosub LCD_WRITECHAR lcd_param = punkt : gosub LCD_WRITECHAR lcd_param = NULL + Month_ / 10 : gosub LCD_WRITECHAR lcd_param = NULL + Month_ mod 10 : gosub LCD_WRITECHAR lcd_param = punkt : gosub LCD_WRITECHAR if Year_ < 80 then lcd_param = Zwei else lcd_param = Eins gosub LCD_WRITECHAR ' Jahr >= 2000 erkennen !!! if Year_ < 80 then lcd_param = Null else lcd_param = Neun gosub LCD_WRITECHAR ' Jahr >= 2000 erkennen !!! lcd_param = NULL + Year_ / 10 : gosub LCD_WRITECHAR lcd_param = NULL + Year_ mod 10 : gosub LCD_WRITECHAR return #Schreibe_Zeit ' Zeit auf LCD-Display ausgeben lcd_param = NULL + hour_ / 10 : gosub LCD_WRITECHAR lcd_param = NULL + hour_ mod 10 : gosub LCD_WRITECHAR lcd_param = DPUNKT : gosub LCD_WRITECHAR lcd_param = NULL + minute_ / 10 : gosub LCD_WRITECHAR lcd_param = NULL + minute_ mod 10 : gosub LCD_WRITECHAR lcd_param = DPUNKT : gosub LCD_WRITECHAR lcd_param = NULL + second_ / 10 : gosub LCD_WRITECHAR lcd_param = NULL + second_ mod 10 : gosub LCD_WRITECHAR return #HANDLE_LCD_KEY ' ----- Tastennummer als Hex-Wert zurück key = 13 looktab keynr_key, key_nr, key looktab keynr_LCDparam, key_nr, lcd_param if lcd_param >= Kreuz and <= Neun then beep 400,10,0 if lcd_param >= Null and <= Neun then gosub LCD_writechar Pause 2 return '*************** 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 #LCD_CLS ' Display loeschen lcd_param = &H02 : gosub LCD_WRITECMD lcd_param = &H01 : gosub LCD_WRITECMD return ' Zeichen blinken on/off #LCD_Blink_off ' Cursor Blinken aus lcd_param = &B00001100 gosub LCD_WRITECMD return #LCD_Blink_on ' Cursor Blinken an lcd_param = &B00001101 gosub LCD_WRITECMD return #LCD_Links ' Cursor 1 Zeichen nach links schieben lcd_param = &B00010000 : gosub LCD_WRITECMD return #LCD_WRITECMD ' LCD-Kommando lcd_buf = OFF : goto LCD_WRITE #LCD_WRITECHAR ' Zeichenausgabe lcd_buf = &B00100000 #LCD_WRITE ' Kommando oder Zeichen an Display senden 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 ' *** Ende LCD-Interface *** ' *** Ende Unterprogramme *** '*********************************************************************** ' *** Tastatur-Tabellen *** ' --- Verarbeitung des Tastaturereignisses anhand der Tastennummer --- ' ----- Vergleichstabelle table keynr_key 10 7 4 1 0 8 5 2 11 9 6 3 12 tabend table keynr_lcdparam Stern sieben vier eins null acht fünf zwei kreuz neun sechs drei nicht tabend table keycodes 0 23 46 68 90 111 132 152 173 193 214 235 243 tabend ' *** Text-Unterprogramme und Text-Tabellen *************************** ' Text-Tabellen -> lohnt sich erst ab 5 Zeichen #Text_Programm_Name '***Wetter V.:1.16m** for I = 0 to 19 looktab Tab_Text_Programm_Name, I, lcd_param gosub LCD_WRITECHAR next I return #text_zumPC for I = 0 to 6 looktab Tab_Text_zumPC, I, lcd_param gosub LCD_WRITECHAR next I return #text_meszwerte for I = 0 to 7 looktab Tab_Text_Meszwerte, I, lcd_param gosub LCD_WRITECHAR next I return #Text_Zeit lcd_param = Z_ : gosub LCD_WRITECHAR ' lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = kli_ : gosub LCD_WRITECHAR lcd_param = klt_ : gosub LCD_WRITECHAR return #Text_Leerz_minus_Leerz lcd_param = Leerz : gosub LCD_WRITECHAR ' lcd_param = Minus : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR return #Text_Datum for I = 0 to 4 looktab Tab_Text_Datum, I, lcd_param gosub LCD_WRITECHAR next I return #Text_min lcd_param = klm_ : gosub LCD_WRITECHAR ' lcd_param = kli_ : gosub LCD_WRITECHAR lcd_param = kln_ : gosub LCD_WRITECHAR return #Text_Intervall for I = 0 to 8 looktab Tab_Text_Intervall, I, lcd_param gosub LCD_WRITECHAR next I return table Tab_Text_Datum 'Datum D_ kla_ klt_ klu_ klm_ tabend table Tab_Text_Ende_uebertr 'Ende übertr. -># E_ kln_ kld_ kle_ Leerz ue_ klb_ kle_ klr_ klt_ klr_ Punkt Leerz Leerz Leerz Leerz Leerz Leerz RPfeil Kreuz tabend table Tab_Text_zumPC ' zum PC Leerz klz_ klu_ klm_ Leerz P_ C_ tabend table Tab_Text_Intervall 'Intervall I_ kln_ klt_ kle_ klr_ klv_ kla_ kll_ kll_ tabend table Tab_Text_Meszwerte 'Meßwerte M_ kle_ sz_ klw_ kle_ klr_ klt_ kle_ tabend table Tab_Text_loeschen 'löschen (N=*/J=0) > kll_ oe_ kls_ klc_ klh_ kle_ kln_ Leerz lKlammer N_ Gleich Stern SStrich J_ Gleich Null rKlammer leerz RPfeil tabend table Tab_Text_einzeln 'einzeln (N=*/J=#) > kle_ kli_ kln_ klz_ kle_ kll_ kln_ Leerz lKlammer N_ Gleich Stern SStrich J_ Gleich Kreuz rKlammer leerz RPfeil tabend table Tab_Text_EEprom_voll 'EEPROM voll E_ E_ P_ R_ O_ M_ leerz klv_ klo_ kll_ kll_ tabend table Tab_Text_Eins_Sechzig '(1-60 lKlammer eins minus sechs null leerz tabend table Tab_Text_Kopfzeile ' °C Lux hPa Leerz Leerz Grad C_ Leerz leerz L_ klu_ klx_ Leerz Leerz klh_ P_ Kla_ tabend table Tab_Text_Programm_name '***Wetter V.:1.16m** stern stern stern W_ kle_ klt_ klt_ kle_ klr_ leerz V_ Punkt Dpunkt Eins Punkt eins sechs klm_ stern stern tabend ' *** Ende Textunterprogramme und Text-Tabellen ' ********************************************************************* ' *** Sensor-Tabellen die von der Festplatte geladen werden table temptable "tables\kty87.tab" table Lufttable "tables\baro_smd.tab" ' *** Big-End *** Big-End *** Big-End *** Big-End *** Big-End ***