home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 April / CHIP4_98.ISO / software / ccconrad / programme.bas / utility / lcd_write_integer.bas < prev    next >
Encoding:
BASIC Source File  |  1997-11-16  |  2.9 KB  |  129 lines

  1. ' ***  LCD_Write_Integer
  2. DEFINE value WORD  ' Diese Integer wird zum LC-Display ausgegeben
  3. DEFINE output WORD
  4.  
  5. ' *** LCD-Daten ***
  6. define lcd_buf byte
  7. define lcd_param byte
  8.  
  9. ' *** LCD-Ports ***
  10. define lcd_port byteport[2]
  11. define lcd_rs port[14]
  12. define lcd_rw port[13]
  13. define lcd_e port[15]
  14.  
  15. '*** ASCII-Codes ***
  16. define c_Leer      &H20
  17. define c_Minus     &H2D
  18. define c_0 &H30
  19.  
  20.  
  21. '*********** TESTPROGRAMM *****************
  22. gosub LCD_init
  23. value = 32767 : gosub LCD_Write_Integer
  24. value = -123 : gosub LCD_Write_integer
  25.  
  26. end
  27. '******************************************
  28.  
  29.  
  30. '***  Output Integer to LCD ***
  31. #LCD_Write_Integer
  32.   output = abs(value)
  33.   'negatives Vorzeichen oder Leerzeichen
  34.   if value < 0 then gosub LCD_Minus 'else gosub LCD_Leerzeichen
  35.  
  36.   'Zehntausender-Dezimalstelle oder Leerzeichen
  37.   if abs(value) >= 10000 then gosub LCD_Zehntausend 'else gosub LCD_Leerzeichen
  38.   output = output mod 10000
  39.  
  40.   ' Tausender-Dezimalstelle oder Leerzeichen
  41.   if abs(value) >= 1000 then gosub LCD_Tausend 'else gosub LCD_Leerzeichen
  42.   output = output mod 1000
  43.  
  44.   ' Hunderter-Dezimalstelle oder Leerzeichen
  45.   if abs(value) >= 100 then gosub LCD_Hundert 'else gosub LCD_Leerzeichen
  46.   output = output mod 100
  47.  
  48.   ' Zehner-Dezimalstelle oder Leerzeichen
  49.   if abs(value) >= 10 then gosub LCD_Zehn 'else gosub LCD_Leerzeichen
  50.  
  51.   ' Einer Dezimalstelle
  52.   lcd_param = c_0 + output mod 10 : gosub LCD_WriteChar
  53. return
  54.  
  55. #LCD_Leerzeichen
  56.   lcd_param = c_Leer : gosub LCD_WriteChar
  57. return
  58.  
  59. #LCD_Minus
  60.   lcd_param = c_Minus : gosub LCD_WriteChar
  61. return
  62.  
  63. #LCD_Zehntausend
  64.   lcd_param = c_0 + output/10000 : gosub LCD_WriteChar
  65. return
  66.  
  67. #LCD_Tausend
  68.   lcd_param = c_0 + output/1000 : gosub LCD_WriteChar
  69. return
  70.  
  71. #LCD_Hundert
  72.   lcd_param = c_0 + output/100 : gosub LCD_WriteChar
  73. return
  74.  
  75. #LCD_Zehn
  76.   lcd_param = c_0 + output/10 : gosub LCD_WriteChar
  77. return
  78.  
  79. '*** LCD_Interface ***
  80. '( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden)
  81.  
  82. #LCD_INIT
  83.  
  84. ' alle ports 0
  85.   lcd_port = OFF
  86.  
  87. ' 8-Bit-Modus aktivieren
  88.   lcd_param=&H38 : gosub LCD_WRITECMD
  89.  
  90. ' mit 8-Bit-Command in 4-Bit-Modus umschalten
  91.   lcd_port=&B00000010
  92.   tog lcd_e
  93.   tog lcd_e
  94.  
  95. ' ab jetzt 4-Bit-Modus
  96.   lcd_param = &H28 : gosub LCD_WRITECMD
  97.   lcd_param = &H0C : gosub LCD_WRITECMD
  98.  
  99. ' Display loeschen
  100. #LCD_CLS
  101.   lcd_param = &H02 : gosub LCD_WRITECMD
  102.   lcd_param = &H01 : gosub LCD_WRITECMD
  103. return
  104.  
  105. ' Zeilenwechsel
  106. #LCD_GOTOLINE
  107.   if lcd_param = 1 then lcd_param = &H80
  108.   if lcd_param = 2 then lcd_param = &HC0
  109.   goto LCD_WRITECMD
  110.  
  111. ' LCD-Kommando
  112. #LCD_WRITECMD
  113.   lcd_buf = OFF
  114.   goto LCD_WRITE
  115.  
  116. ' Zeichenausgabe
  117. #LCD_WRITECHAR
  118.   lcd_buf = &B00100000
  119.  
  120. ' Kommando oder Zeichen an Display senden
  121. #LCD_WRITE
  122.   lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
  123.   tog lcd_e
  124.   tog lcd_e
  125.   lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
  126.   tog lcd_e
  127.   tog lcd_e
  128. return
  129.