home *** CD-ROM | disk | FTP | other *** search
- '****************** LCD_Uhr ****************************************
- ' Das Programm gibt Datum und Uhrzeit seriell aus
- ' - serielle Verbindung zum PC
- ' - Terminalprogramm
- ' - DCF77 Aktivantenne
- ' - Verwendung der integrierten Echtzeituhr
-
- DEFINE value WORD ' Diese Integer wird zum LC-Display ausgegeben
- DEFINE output WORD
-
- ' *** LCD-Daten ***
- define lcd_buf byte
- define lcd_param byte
-
- ' *** LCD-Ports ***
- define lcd_port byteport[2]
- define lcd_rs port[14]
- define lcd_rw port[13]
- define lcd_e port[15]
-
- '*** ASCII-Codes ***
- define c_Leer &H20
- define c_Minus &H2D
- define c_Dot &H2E
- define c_0 &H30
- define c_colon &H3A
-
-
-
-
-
- '*********** Hauptprogramm *********************************************
- value = 0
- gosub LCD_init
- #loop
- lcd_param = 1 : gosub LCD_GotoLine
- wait second <> value ' warten, bis neue Sekunde angebrochen ist
-
- 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
-
- lcd_param = 2 : gosub LCD_GotoLine
-
- 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
- 'if second = 0 then beep 100,5,0
- goto loop
-
- end
-
-
- #LCD_0 ' schreibe "0"
- lcd_param = c_0 : gosub LCD_WriteChar
- return
-
- #LCD_Dot ' schreibe "."
- lcd_param = c_Dot : gosub LCD_WriteChar
- return
-
- #LCD_Colon ' schreibe ":"
- lcd_param = c_Colon : gosub LCD_WriteChar
- 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 : gosub LCD_WriteChar
- return
-
- #LCD_Minus
- lcd_param = c_Minus : gosub LCD_WriteChar
- return
-
- #LCD_Zehntausend
- lcd_param = c_0 + output/10000 : gosub LCD_WriteChar
- return
-
- #LCD_Tausend
- lcd_param = c_0 + output/1000 : gosub LCD_WriteChar
- return
-
- #LCD_Hundert
- lcd_param = c_0 + output/100 : gosub LCD_WriteChar
- return
-
- #LCD_Zehn
- lcd_param = c_0 + output/10 : gosub LCD_WriteChar
- 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
-
- ' 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
-