home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 April / CHIP4_98.ISO / software / ccconrad / basic.exe / CHIP / Programme.Bas / Utility / LCD_DCF77_Uhr.bas < prev    next >
Encoding:
BASIC Source File  |  1997-11-17  |  4.1 KB  |  178 lines

  1. '******************    LCD_Uhr  ****************************************
  2. ' Das Programm gibt Datum und Uhrzeit seriell aus
  3. ' - serielle Verbindung zum PC
  4. ' - Terminalprogramm
  5. ' - DCF77 Aktivantenne
  6. ' - Verwendung der integrierten Echtzeituhr
  7.  
  8. DEFINE value WORD  ' Diese Integer wird zum LC-Display ausgegeben
  9. DEFINE output WORD
  10.  
  11. ' *** LCD-Daten ***
  12. define lcd_buf byte
  13. define lcd_param byte
  14.  
  15. ' *** LCD-Ports ***
  16. define lcd_port byteport[2]
  17. define lcd_rs port[14]
  18. define lcd_rw port[13]
  19. define lcd_e port[15]
  20.  
  21. '*** ASCII-Codes ***
  22. define c_Leer      &H20
  23. define c_Minus     &H2D
  24. define c_Dot       &H2E
  25. define c_0         &H30
  26. define c_colon     &H3A
  27.  
  28.  
  29.  
  30.  
  31.  
  32. '*********** Hauptprogramm *********************************************
  33. value  = 0
  34. gosub LCD_init
  35. #loop
  36.   lcd_param = 1 : gosub LCD_GotoLine
  37.   wait second <> value            ' warten, bis neue Sekunde angebrochen ist
  38.  
  39.   if day < 10 then gosub LCD_0    ' Tag
  40.   value = day : gosub LCD_Write_Integer : gosub LCD_Dot
  41.  
  42.   if month < 10 then gosub LCD_0   ' Monat
  43.   value = month : gosub LCD_Write_Integer : gosub LCD_Dot
  44.  
  45.   if year < 10 then gosub LCD_0    ' Jahr
  46.   value = year : gosub LCD_Write_Integer
  47.  
  48.   lcd_param = 2 : gosub LCD_GotoLine
  49.  
  50.   if hour < 10 then gosub LCD_0    ' Stunde
  51.   value = hour : gosub LCD_Write_Integer : gosub LCD_Colon
  52.  
  53.   if minute < 10 then gosub LCD_0  ' Minute
  54.   value = minute : gosub LCD_Write_Integer : gosub LCD_Colon
  55.  
  56.   if second < 10 then gosub LCD_0  ' Sekunde
  57.   value = second : gosub LCD_Write_Integer
  58.   'if second = 0 then beep 100,5,0
  59. goto loop
  60.  
  61. end
  62.  
  63.  
  64. #LCD_0      ' schreibe "0"
  65.   lcd_param = c_0 : gosub LCD_WriteChar
  66. return
  67.  
  68. #LCD_Dot    ' schreibe "."
  69.   lcd_param = c_Dot : gosub LCD_WriteChar
  70. return
  71.  
  72. #LCD_Colon  ' schreibe ":"
  73.   lcd_param = c_Colon : gosub LCD_WriteChar
  74. return
  75.  
  76.  
  77.  
  78.  
  79. '****************  Output Integer to LCD ***********************************
  80. #LCD_Write_Integer
  81.   output = abs(value)
  82.   'negatives Vorzeichen oder Leerzeichen
  83.   if value < 0 then gosub LCD_Minus 'else gosub LCD_Leerzeichen
  84.  
  85.   'Zehntausender-Dezimalstelle oder Leerzeichen
  86.   if abs(value) >= 10000 then gosub LCD_Zehntausend 'else gosub LCD_Leerzeichen
  87.   output = output mod 10000
  88.  
  89.   ' Tausender-Dezimalstelle oder Leerzeichen
  90.   if abs(value) >= 1000 then gosub LCD_Tausend 'else gosub LCD_Leerzeichen
  91.   output = output mod 1000
  92.  
  93.   ' Hunderter-Dezimalstelle oder Leerzeichen
  94.   if abs(value) >= 100 then gosub LCD_Hundert 'else gosub LCD_Leerzeichen
  95.   output = output mod 100
  96.  
  97.   ' Zehner-Dezimalstelle oder Leerzeichen
  98.   if abs(value) >= 10 then gosub LCD_Zehn 'else gosub LCD_Leerzeichen
  99.  
  100.   ' Einer Dezimalstelle
  101.   lcd_param = c_0 + output mod 10 : gosub LCD_WriteChar
  102. return
  103.  
  104. #LCD_Leerzeichen
  105.   lcd_param = c_Leer : gosub LCD_WriteChar
  106. return
  107.  
  108. #LCD_Minus
  109.   lcd_param = c_Minus : gosub LCD_WriteChar
  110. return
  111.  
  112. #LCD_Zehntausend
  113.   lcd_param = c_0 + output/10000 : gosub LCD_WriteChar
  114. return
  115.  
  116. #LCD_Tausend
  117.   lcd_param = c_0 + output/1000 : gosub LCD_WriteChar
  118. return
  119.  
  120. #LCD_Hundert
  121.   lcd_param = c_0 + output/100 : gosub LCD_WriteChar
  122. return
  123.  
  124. #LCD_Zehn
  125.   lcd_param = c_0 + output/10 : gosub LCD_WriteChar
  126. return
  127.  
  128. '*** LCD_Interface ***
  129. '( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden)
  130.  
  131. #LCD_INIT
  132.  
  133. ' alle ports 0
  134.   lcd_port = OFF
  135.  
  136. ' 8-Bit-Modus aktivieren
  137.   lcd_param=&H38 : gosub LCD_WRITECMD
  138.  
  139. ' mit 8-Bit-Command in 4-Bit-Modus umschalten
  140.   lcd_port=&B00000010
  141.   tog lcd_e
  142.   tog lcd_e
  143.  
  144. ' ab jetzt 4-Bit-Modus
  145.   lcd_param = &H28 : gosub LCD_WRITECMD
  146.   lcd_param = &H0C : gosub LCD_WRITECMD
  147.  
  148. ' Display loeschen
  149. #LCD_CLS
  150.   lcd_param = &H02 : gosub LCD_WRITECMD
  151.   lcd_param = &H01 : gosub LCD_WRITECMD
  152. return
  153.  
  154. ' Zeilenwechsel
  155. #LCD_GOTOLINE
  156.   if lcd_param = 1 then lcd_param = &H80
  157.   if lcd_param = 2 then lcd_param = &HC0
  158.   goto LCD_WRITECMD
  159.  
  160. ' LCD-Kommando
  161. #LCD_WRITECMD
  162.   lcd_buf = OFF
  163.   goto LCD_WRITE
  164.  
  165. ' Zeichenausgabe
  166. #LCD_WRITECHAR
  167.   lcd_buf = &B00100000
  168.  
  169. ' Kommando oder Zeichen an Display senden
  170. #LCD_WRITE
  171.   lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
  172.   tog lcd_e
  173.   tog lcd_e
  174.   lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
  175.   tog lcd_e
  176.   tog lcd_e
  177. return
  178.