'******************************************************************** ' System : C-Control/BASIC mit Microprozessor MC68HC05B6 ' Programm: LAkku.bas ' Version : V1.01 ' Autor : (c) DG1XPZ 16.08.1997 ' Länge : 4086 Byte + 1152 byte werden für Daten benötigt !! ' Funktion: Aufnehmen der Ladekennlinie eines Akkus ' Systemvoraussetzungen: ' - C-Control/Basic-Modul ' - Applicationsboard mit angeschlossenem Display und Tastatur ' Schwerpunkt: ' - Speichern der Weßwerte im EEPROM ' - Übertragen der Daten aus EEPROM zum PC (Terminalprogramm) ' Hinweise: ' - AD1-Eingang = Spannung max 2,5V mit 10/12/12.5/15/25V-Sensor ' - es darf auf keinen Fall das Funkuhrmodul angeschlossen werden ' Meßwertaufzeichnung: ' - Format: Stunde, Minute, Spannung ' - alle 5 min werden die Meszwerte aufgezeichnet (im EEPROM) ' (ungefähr [16h a 5 min] x [3 Meßwerte a 2 Byte] = 1152 Byte Speicherplatz im ' EEPROM werden dafür benötigt [max. 1728 Byte bei 24h-Messung]) ' ' Versionsgeschichte: ' V1.01: - Verwendung von Servivestecker (CControl) ermöglichen (12.5V - Sensor) ' sowie Sensoren 10/12/15/25V (Menüabfrage eingefügt) ' Programmbeschreibung: ' Nach dem Start des Programms, und Ausgabe der Programmversion wird die ' Ausgabe der Meßwerte der letzten Aufzeichnung angeboten. Eine Bestätigung ' mit der RAUTE-Taste beginnt sofort mit der Übertragung der Meßwerte über ' die serielle Schnittstelle des µComputers. Am PC sollte vorher ein Terminal- ' programm gestartet werden. Die Meßwerte werden in Tabellenform so übertragen ' (zum PC)/aufgezeichnet(im EEPROM), daß sie problemlos in Excel als Diagramm ' ausgewertet werden können. Jede andere Taste bewirkt das VERNEINEN. ' Jetzt wird der verwendete Spannungssensor abgefragt. ' Danach kann die max. Meßzeit eingegeben werden, anschließend beginnt sofort ' die Messung mit Ausgabe der Spannung und der Meßzeit. ' Bei fehlendem Akku wird eine Fehlermeldung ausgegeben. ' Sollen die aufgezeichneten Meßwerte zum PC übertragen werden, muß ' das Programm neu gestartet werden (Reset+Start oder Power OFF+ON) ' Erklärung wie oben. '******************************************************************** ' *** Variablen-Definition *** (Word=2byte, Byte =1byte) max. 24byte Variablen !!! define key word '01-02 Tastaturwert in Ziffernform z.B 1=1 define spannung word '03-04 define letzte_minute byte '05 für Zeitsteuerungen define key_nr byte '06 Nummer der Taste für Tastaturabfrage define compare byte '07 für Tastaturabfrage define lcd_buf byte '08 für LCD-Modul define lcd_param byte '09 Übergabewert eines Zeichens für LCD-Modul define lastsec byte '10 für Zeitausgabe define I byte '11 Laufvariable für Schleifen define hour_ byte '12 define minute_ byte '13 define flag byte '14 Flag define U_Sensor byte '15 Spannungs-Sensor merken ' *** Ende der Variablen ******** ' *** Definition Symbolischer Konstanten (benötigt keinen Speicherplatz!!) define blocksize 3 define keyboard ad[8] define AD_Spannung ad[1] 'define letzte_minute 0 define lcd_port byteport[2] '*** Definition LCD-Ports *** define lcd_rs port[14] ' *** Definition LCD-Ports *** define lcd_rw port[13] ' *** Definition LCD-Ports *** define lcd_e port[15] ' *** Definition LCD-Ports *** define Zeile1 &H80 'Display-Adresse für Zeile 1 define Zeile2 &HC0 'dto 2 define Zeile3 &H94 'dto 3 define Zeile4 &HD4 'dto 4 ' die Reihenfolge der Tasten auf dem Keyboard define KEY_Stern 0 define KEY_7 1 define KEY_4 2 define KEY_1 3 define KEY_0 4 define KEY_8 5 define KEY_5 6 define KEY_2 7 define KEY_Kreuz 8 define KEY_9 9 define KEY_6 10 define KEY_3 11 ' *** ASCII-Codes *** 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 fuenf &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 '*** Programmbeginn *** #start gosub LCD_INIT letzte_minute=0 gosub text_akkuladeKennlinie lcd_param = 2 : gosub LCD_GOTOLINE ' Wechsel in die zweite Zeile 'print "V.:1.01 ->#" ' Ausgabe über SerPort lcd_param = V_ : gosub LCD_WRITECHAR ' lcd_param = Punkt : gosub LCD_WRITECHAR lcd_param = DPunkt : gosub LCD_WRITECHAR lcd_param = Eins : gosub LCD_WRITECHAR lcd_param = Punkt : gosub LCD_WRITECHAR lcd_param = Null : gosub LCD_WRITECHAR lcd_param = eins : gosub LCD_WRITECHAR pause 50 ' gosub lesekey ' if lcd_param <> kreuz then goto start gosub alte_meszwerte gosub lcd_cls 'gosub Lcd_blink_off gosub eingabe_Sensor #eingabe_Meszdauer gosub lcd_cls gosub text_akkuladekennlinie lcd_param = 3 : gosub LCD_GOTOLINE ' Wechsel in die zweite Zeile ' print"Meßdauer: __:__" lcd_param = M_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = sz_ : gosub LCD_WRITECHAR lcd_param = kld_ : gosub LCD_WRITECHAR lcd_param = kla_ : gosub LCD_WRITECHAR lcd_param = klu_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = klr_ : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = DPunkt : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = Klh_ : gosub LCD_WRITECHAR lcd_param = klh_ : gosub LCD_WRITECHAR lcd_param = DPunkt : gosub LCD_WRITECHAR lcd_param = klm_ : gosub LCD_WRITECHAR lcd_param = klm_ : gosub LCD_WRITECHAR for i=1 to 5 gosub LCD_links next i gosub LCD_blink_on gosub lesekey if lcd_param = kreuz then goto eingabe_Meszdauer if lcd_param = stern then goto start if lcd_param > zwei then goto eingabe_Meszdauer else Hour_ = key gosub lesekey if lcd_param = kreuz or lcd_param = stern then goto eingabe_Meszdauer if hour_ = 2 and lcd_param > drei then goto eingabe_Meszdauer else Hour_ = Hour_ * 10 + key lcd_param = DPunkt : gosub LCD_writechar gosub lesekey if lcd_param = kreuz or lcd_param = stern then goto eingabe_Meszdauer if lcd_param > fuenf then goto eingabe_Meszdauer else Minute_ = key gosub lesekey if lcd_param = kreuz or lcd_param = stern then goto eingabe_Meszdauer Minute_ = Minute_ * 10 + key lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = RPfeil : gosub LCD_WRITECHAR lcd_param = Kreuz : gosub LCD_WRITECHAR gosub lcd_links gosub lesekey if lcd_param <> kreuz then goto eingabe_Meszdauer gosub LCD_Blink_off gosub lcd_cls gosub text_akkuladekennlinie gosub Text_Start open# for write ' Datei(EEPROM) auf Anfang setzen close# hour = 0 : minute = 0 : second = 0 letzte_minute = minute gosub lcd_cls gosub text_akkuladekennlinie #werteausgabe lcd_param = 2 : gosub LCD_GOTOLINE ' Wechsel in die zweite Zeile spannung = ad_spannung * 50 / 51 if U_Sensor = 0 then spannung = spannung ' Anpassung auf 0V-Spannungssensor if U_Sensor = 100 then spannung = spannung * 40 ' Anpassung auf 10V-Spannungssensor if U_Sensor = 120 then spannung = spannung * 48 ' Anpassung auf 12V-Spannungssensor if U_Sensor = 125 then spannung = spannung * 50 ' Anpassung auf 12.5V-Spannungssensor if U_Sensor = 150 then spannung = spannung * 60 ' Anpassung auf 15V-Spannungssensor if U_Sensor = 250 then spannung = spannung * 100 ' Anpassung auf 25V-Spannungssensor lcd_param = U_ : gosub LCD_Writechar lcd_param = gleich : gosub LCD_Writechar lcd_param = NULL + Spannung / 10000 : gosub lcd_writechar lcd_param = NULL + Spannung mod 10000 / 1000 : gosub lcd_writechar lcd_param = Punkt : gosub LCD_WRITECHAR lcd_param = NULL + Spannung mod 10000 mod 1000 / 100 : gosub lcd_writechar lcd_param = NULL + Spannung mod 10000 mod 1000 mod 100 / 10 : gosub lcd_writechar lcd_param = NULL + Spannung mod 10000 mod 1000 mod 100 mod 10: gosub lcd_writechar lcd_param = V_ : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR gosub schreibezeit if ad_Spannung = 0 then goto Fehler if hour=0 and minute = 0 and second <= 3 then gosub meszwert_uebertragen 'erster Meszwert ' Zeichnet die Daten alle 5min auf if minute <> letzte_minute and ( minute=0 or minute=5 or minute=10 or minute=15 or minute=20 or Minute =25) then gosub meszwert_uebertragen if minute <> letzte_minute and ( minute=30 or minute=35 or minute=40 or minute=45 or minute=50 or Minute =55) then gosub meszwert_uebertragen 'for i=0 to 55 step 5 'noch testen !! ob Tausch für obere Reihe= -70Byte!!!! ' If minute <> letzte_minute and Minute=I then gosub meszwert_uebertragen 'next i if hour > hour_ then goto ende if hour >=hour_ and minute >=minute_ then goto ende goto werteausgabe end ' ************************************************************************************* ' Ausgabe auf Terminal-Programm mit Text-Aufzeichnung in Datei #Meszwert_uebertragen print hour;":";minute / 10;minute mod 10;";"; print Spannung/10000;Spannung mod 10000/1000;",";Spannung mod 10000 mod 1000/100; print Spannung mod 10000 mod 1000 mod 100 / 10;Spannung mod 10000 mod 1000 mod 100 mod 10 ' Ausgabe über SerPort gosub meszwert_speichern return #Eingabe_Sensor ' Achtung Sensor-Abfrage 3-Stellig U_Sensor = 0 lcd_param = Zeile3 : gosub LCD_WriteCMD for I = 0 to 9 looktab Tab_Text_xxU_Sensor_1, I, lcd_param gosub LCD_WRITECHAR next I lcd_param = Zeile4 : gosub LCD_WriteCMD for I = 0 to 19 looktab Tab_Text_xxU_Sensor_2, I, lcd_param gosub LCD_WRITECHAR next I lcd_param = Zeile3+10 : gosub LCD_WriteCMD lcd_param = NULL + U_Sensor / 100 : gosub lcd_writechar lcd_param = NULL + U_Sensor mod 100 / 10 : gosub lcd_writechar lcd_param = punkt : gosub lcd_writechar lcd_param = NULL + U_Sensor mod 100 mod 10 : gosub lcd_writechar lcd_param = V_ : gosub LCD_WRITECHAR lcd_param = Zeile3+10 : gosub LCD_WriteCMD gosub lesekey if lcd_Param = kreuz or Lcd_param = stern then goto eingabe_Sensor U_Sensor = key gosub lesekey if lcd_param = stern or lcd_param = kreuz then goto eingabe_Sensor U_Sensor = U_Sensor * 10 + key if U_Sensor <> 0 and U_Sensor <> 10 and U_Sensor <> 12 and U_Sensor <> 15 and U_Sensor <> 25 then goto Eingabe_Sensor lcd_param = punkt : gosub LCD_WRITECHAR gosub lesekey if lcd_param = stern or lcd_param = kreuz then goto eingabe_Sensor U_Sensor = U_Sensor * 10 + key if U_Sensor <> 0 and U_Sensor <> 100 and U_Sensor <> 120 and U_sensor <> 125 and U_Sensor <> 150 and U_Sensor <> 250 then goto Eingabe_Sensor lcd_param = Zeile3+16 : gosub LCD_WriteCMD gosub Text_Ja_Nein gosub lesekey if lcd_param <> Kreuz then goto eingabe_Sensor return #meszwert_speichern open# for append if filefree > blocksize then print# hour else goto filefull if filefree > blocksize then print# minute else goto filefull if Filefree > blocksize then print# spannung else goto filefull goto fileok #filefull lcd_param = 4 : gosub LCD_GOTOLINE 'gosub lcd_cls 'print"EEPROM voll" lcd_param = E_ : gosub LCD_WRITECHAR lcd_param = E_ : gosub LCD_WRITECHAR lcd_param = P_ : gosub LCD_WRITECHAR lcd_param = R_ : gosub LCD_WRITECHAR lcd_param = O_ : gosub LCD_WRITECHAR lcd_param = M_ : gosub LCD_WRITECHAR lcd_param = leerz : gosub LCD_WRITECHAR lcd_param = klv_ : gosub LCD_WRITECHAR lcd_param = klo_ : gosub LCD_WRITECHAR lcd_param = kll_ : gosub LCD_WRITECHAR lcd_param = kll_ : gosub LCD_WRITECHAR for i=1 to 25 beep 440,2,0 beep 200,2,0 next #fileok close# letzte_minute = minute pause 100 return #alte_meszwerte 'print"(alte) Meszwerte" lcd_param = 3 : gosub LCD_GOTOLINE lcd_param = lKlammer : gosub LCD_WRITECHAR lcd_param = kla_ : gosub LCD_WRITECHAR lcd_param = kll_ : gosub LCD_WRITECHAR lcd_param = klt_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = rKlammer : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = M_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = sz_ : gosub LCD_WRITECHAR lcd_param = klw_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = klr_ : gosub LCD_WRITECHAR lcd_param = klt_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = leerz : gosub LCD_WRITECHAR lcd_param = klz_ : gosub LCD_WRITECHAR lcd_param = klu_ : gosub LCD_WRITECHAR lcd_param = klm_ : gosub LCD_WRITECHAR lcd_param = 4 : gosub LCD_GOTOLINE ' Wechsel in die zweite Zeile lcd_param = P_ : gosub LCD_WRITECHAR lcd_param = C_ : gosub LCD_WRITECHAR lcd_param = leerz : gosub LCD_WRITECHAR 'print "uebertragen ? ->#" ' Ausgabe über SerPort gosub text_uebertragen lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = FZeichen : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = RPfeil : gosub LCD_WRITECHAR lcd_param = Stern : gosub LCD_WRITECHAR lcd_param = SStrich : gosub LCD_WRITECHAR lcd_param = Kreuz : gosub LCD_WRITECHAR gosub LCD_Blink_on gosub Lcd_links gosub Lcd_links gosub lesekey if lcd_param <> kreuz then return open# for Read if EOF then goto sind_uebertragen #lese_naechsten_wert if EOF then goto sind_uebertragen input# Hour input# Minute input# Spannung print Hour;":";Minute / 10;minute mod 10;";";Spannung / 10000;Spannung mod 10000 / 1000;","; print Spannung mod 10000 mod 1000 / 100;Spannung mod 10000 mod 1000 mod 100 / 10;Spannung mod 10000 mod 1000 mod 100 mod 10 goto lese_naechsten_wert #sind_uebertragen gosub lcd_cls gosub text_akkuladekennlinie 'Ausgabe letzter Meßwert auf LCD-Anzeige lcd_param = 3 : gosub LCD_GOTOLINE ' Wechsel in die zweite Zeile 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 = Leerz : gosub LCD_WRITECHAR lcd_param = NULL + Spannung / 10000 : gosub lcd_writechar lcd_param = NULL + Spannung mod 10000 / 1000: gosub lcd_writechar lcd_param = Punkt : gosub LCD_WRITECHAR lcd_param = NULL + Spannung mod 10000 mod 1000 / 100 : gosub lcd_writechar lcd_param = NULL + Spannung mod 10000 mod 1000 mod 100 / 10 : gosub lcd_writechar lcd_param = NULL + Spannung mod 10000 mod 1000 mod 100 mod 10 : gosub lcd_writechar lcd_param = V_ : gosub LCD_WRITECHAR ' print "Ende uebertr. ->#" ' Ausgabe über SerPort lcd_param = 4 : gosub LCD_GOTOLINE ' Wechsel in die zweite Zeile lcd_param = E_ : gosub LCD_WRITECHAR lcd_param = kln_ : gosub LCD_WRITECHAR lcd_param = kld_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = Leerz: gosub LCD_WRITECHAR gosub text_uebertragen lcd_param = Leerz: gosub LCD_WRITECHAR lcd_param = Leerz: gosub LCD_WRITECHAR lcd_param = Leerz: gosub LCD_WRITECHAR lcd_param = RPfeil : gosub LCD_WRITECHAR lcd_param = Kreuz : gosub LCD_WRITECHAR gosub LCD_links gosub LCD_Blink_on gosub lesekey if lcd_param <> kreuz then goto sind_uebertragen gosub LCD_Blink_off return #ende lcd_param = 4 : gosub LCD_GOTOLINE lcd_param = E_ : gosub LCD_WRITECHAR ' Ausgabe von "Ende" am LCD lcd_param = kln_ : gosub LCD_WRITECHAR lcd_param = kld_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR for i=1 to 50 beep 440,2,0 beep 200,2,0 next #ende2 goto ende2 return #Text_Start 'Ausgabe von " Start ->#" lcd_param = 4 : gosub LCD_GOTOLINE lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = S_ : gosub LCD_WRITECHAR lcd_param = klt_ : gosub LCD_WRITECHAR lcd_param = kla_ : gosub LCD_WRITECHAR lcd_param = klr_ : gosub LCD_WRITECHAR lcd_param = klt_ : gosub LCD_writechar lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = Leerz: gosub LCD_WRITECHAR lcd_param = RPfeil : gosub LCD_WRITECHAR lcd_param = Kreuz : gosub LCD_WRITECHAR gosub LCD_links gosub LCD_Blink_on gosub lesekey if lcd_param <> kreuz then goto Start gosub LCD_Blink_off return #Fehler 'Ausgabe von "!? Akku-Fehler ?! ->#" lcd_param = 4 : gosub LCD_GOTOLINE lcd_param = AZeichen : gosub LCD_WRITECHAR lcd_param = FZeichen : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = A_ : gosub LCD_WRITECHAR ' Ausgabe von "Ende" am LCD lcd_param = klk_ : gosub LCD_WRITECHAR lcd_param = klk_ : gosub LCD_WRITECHAR lcd_param = klu_ : gosub LCD_WRITECHAR lcd_param = Minus : gosub LCD_writechar lcd_param = F_ : gosub LCD_WRITECHAR ' Ausgabe von "Ende" am LCD lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = klh_ : gosub LCD_WRITECHAR lcd_param = kll_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = klr_ : gosub LCD_WRITECHAR lcd_param = Leerz : gosub LCD_WRITECHAR lcd_param = FZeichen : gosub LCD_WRITECHAR lcd_param = AZeichen : gosub LCD_WRITECHAR for i=1 to 50 beep 440,2,0 beep 200,2,0 next lcd_param = Leerz: gosub LCD_WRITECHAR lcd_param = RPfeil : gosub LCD_WRITECHAR lcd_param = Kreuz : gosub LCD_WRITECHAR gosub LCD_links gosub LCD_Blink_on gosub lesekey if lcd_param <> kreuz then goto Fehler gosub LCD_Blink_off goto start #text_akkuladekennlinie ' print:print "Akku-Ladekennlinie" ' Ausgabe über SerPort ' Ausgabe von "Akku-Ladekennlinie" am Display lcd_param = stern : gosub LCD_WRITECHAR lcd_param = A_ : gosub LCD_WRITECHAR lcd_param = klk_ : gosub LCD_WRITECHAR lcd_param = klk_ : gosub LCD_WRITECHAR lcd_param = klu_ : gosub LCD_WRITECHAR lcd_param = Minus : gosub LCD_WRITECHAR lcd_param = L_ : gosub LCD_WRITECHAR lcd_param = kla_ : gosub LCD_WRITECHAR lcd_param = kld_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = klk_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = kln_ : gosub LCD_WRITECHAR lcd_param = kln_ : gosub LCD_WRITECHAR lcd_param = kll_ : gosub LCD_WRITECHAR lcd_param = kli_ : gosub LCD_WRITECHAR lcd_param = kln_ : gosub LCD_WRITECHAR lcd_param = kli_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = stern : gosub LCD_WRITECHAR return #text_uebertragen lcd_param = ue_ : gosub LCD_WRITECHAR ' lcd_param = klb_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = klr_ : gosub LCD_WRITECHAR lcd_param = klt_ : gosub LCD_WRITECHAR lcd_param = klr_ : gosub LCD_WRITECHAR lcd_param = kla_ : gosub LCD_WRITECHAR lcd_param = klg_ : gosub LCD_WRITECHAR lcd_param = kle_ : gosub LCD_WRITECHAR lcd_param = kln_ : gosub LCD_WRITECHAR return #lesekey #loop lcd_param = &H1F for key_nr = 0 to 11 looktab keycodes, key_nr, compare if abs(keyboard-compare) < 3 then gosub HANDLE_LCD_KEY if lcd_param >= Kreuz and <= neun then return next goto loop #schreibezeit ' print "Zeit: ";hour;":";minute;":";second lcd_param = klt_ : gosub LCD_WRITECHAR lcd_param = Gleich : gosub LCD_WRITECHAR 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 pause 50 return #Text_Ja_Nein lcd_param = RPfeil : gosub LCD_WRITECHAR lcd_param = Stern : gosub LCD_WRITECHAR lcd_param = SStrich : gosub LCD_WRITECHAR lcd_param = Kreuz : gosub LCD_WRITECHAR gosub LCD_Links : gosub LCD_Links return ' ----- Tastennummer als Hex-Wert zurück #HANDLE_LCD_KEY key = 13 if key_nr = KEY_Stern then lcd_param = Stern if Key_nr = KEY_Stern then key = 10 if key_nr = KEY_7 then lcd_param = Sieben if key_nr = KEY_7 then key = 7 if key_nr = KEY_4 then lcd_param = vier if Key_nr = KEY_4 then key = 4 if key_nr = KEY_1 then lcd_param = EINS if Key_nr = KEY_1 then key = 1 if key_nr = KEY_0 then lcd_param = Null if Key_nr = KEY_0 then key = 0 if key_nr = KEY_8 then lcd_param = Acht if Key_nr = KEY_8 then key = 8 if key_nr = KEY_5 then lcd_param = fuenf if Key_nr = KEY_5 then key = 5 if key_nr = KEY_2 then lcd_param = zwei if Key_nr = KEY_2 then key = 2 if key_nr = KEY_Kreuz then lcd_param = kreuz if Key_nr = KEY_Kreuz then key = 11 if key_nr = KEY_9 then lcd_param = Neun if Key_nr = KEY_9 then key = 9 if key_nr = KEY_6 then lcd_param = sechs if Key_nr = KEY_6 then key = 6 if key_nr = KEY_3 then lcd_param = drei if Key_nr = KEY_3 then key = 3 if lcd_param >= Kreuz and lcd_param <= Neun then beep 400,10,0 if lcd_param >= Null and lcd_param <= 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 ' Display loeschen #LCD_CLS lcd_param = &H02 : gosub LCD_WRITECMD lcd_param = &H01 : gosub LCD_WRITECMD return ' Zeichen blinken on/off #LCD_Blink_off lcd_param = &B00001100 ' Cursor Blinken aus gosub LCD_WRITECMD return #LCD_Blink_on lcd_param = &B00001101 ' Cursor Blinken an gosub LCD_WRITECMD return ' Cursor 1 Zeichen nach links schieben #LCD_Links lcd_param = &B00010000 gosub LCD_WRITECMD return ' Cursor on/off '#LCD_Cursor ' if lcd_param = 0 then lcd_param = &B00001100 ' if lcd_param = 1 then lcd_param = &B00001110 ' gosub LCD_WRITECMD 'return ' Zeilenwechsel #LCD_GOTOLINE if lcd_param = 1 then lcd_param = &H80 if lcd_param = 2 then lcd_param = &HC0 if lcd_param = 3 then lcd_param = &H94 if lcd_param = 4 then lcd_param = &HD4 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 ' Tabellen ' --- Verarbeitung des Tastaturereignisses anhand der Tastennummer --- ' ----- Vergleichstabelle table keycodes 0 23 46 68 90 111 132 152 173 193 214 235 tabend table Tab_Text_xxU_Sensor_1 ' "U-Sensor: " U_ Minus S_ kle_ kln_ kls_ klo_ klr_ dpunkt Leerz tabend table Tab_Text_xxU_Sensor_2 ' "(0;10;12;12.5;15;25)" lklammer null semikol eins null semikol eins zwei semikol eins zwei punkt fuenf semikol eins fuenf semikol zwei fuenf rklammer tabend