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

  1. ' ******************  LCD_Write_Hex_Word  '''''******
  2. ' sendet "value" als Hexzahl $XXXX zum LC-Display   *
  3. ' "i" ist frei als Index                            *
  4. ' ***************************************************
  5.  
  6. DEFINE value WORD[1]  ' value wird als $Hex_Zahl zum LC-Display ausgegeben
  7. DEFINE output WORD[2] ' LCD-Puffer
  8. define i word[3]      ' allgemeiner Index
  9.  
  10. ' *** LCD-Daten ***
  11. define lcd_buf byte[7]
  12. define lcd_param byte[8]
  13.  
  14. ' *** LCD-Ports ***
  15. define lcd_port byteport[2]
  16. define lcd_rs port[14]
  17. define lcd_rw port[13]
  18. define lcd_e port[15]
  19.  
  20. '*** ASCII-Codes ***
  21. define c_Leer      &H20
  22. define c_Minus     &H2D
  23. define c_0         &H30
  24. define c_Dollar    &H24
  25.  
  26.  
  27. '*********** TESTPROGRAMM *****************
  28.  
  29. for value = -10 to 10
  30.   gosub LCD_init
  31.   gosub LCD_Write_Hex_Word : pause 50
  32. next
  33.  
  34. end
  35. '******************************************
  36.  
  37.  
  38. '***  Output "value" as "$XXXX" to LC-Display ***
  39. #LCD_Write_Hex_Word
  40.  
  41.   LCD_param = c_Dollar : gosub LCD_WriteChar
  42.  
  43.   '16^3 oder Leerzeichen
  44.   if (value >= 4096) or (value < 0) then gosub LCD_Hoch3 else gosub LCD_Leerzeichen
  45.  
  46.   ' 16^2 oder Leerzeichen
  47.   if (value >= 256) or (value < 0) then gosub LCD_Hoch2 else gosub LCD_Leerzeichen
  48.  
  49.   ' 16^1 oder Leerzeichen
  50.   if (value >= 16) or (value < 0) then gosub LCD_Hoch1 else gosub LCD_Leerzeichen
  51.  
  52.   ' 16^0
  53.   output = value and &H000F : gosub Write_Hex_Nibble
  54. return
  55.  
  56. #LCD_Leerzeichen
  57.   lcd_param = c_Leer : gosub LCD_WriteChar
  58. return
  59.  
  60. #LCD_Dollar
  61.   lcd_param = c_Dollar : gosub LCD_WriteChar
  62. return
  63.  
  64. #Write_Hex_Nibble
  65.   if (output >= 10) then lcd_param = 55 + output else lcd_param = c_0 + output
  66.   gosub LCD_WriteChar
  67. return
  68.  
  69. #LCD_Hoch3
  70.   output = value
  71.   output =  (output shr 12) and &H000F : gosub Write_Hex_Nibble
  72. return
  73.  
  74. #LCD_Hoch2
  75.   output = value
  76.   output =  (output shr 8) and &H000F : gosub Write_Hex_Nibble
  77. return
  78.  
  79. #LCD_Hoch1
  80.   output = value
  81.   output =  (output shr 4) and &H000F: gosub Write_Hex_Nibble
  82. return
  83.  
  84.  
  85. '*** LCD_Interface ***
  86. '( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden)
  87.  
  88. #LCD_INIT
  89.  
  90. ' alle ports 0
  91.   lcd_port = OFF
  92.  
  93. ' 8-Bit-Modus aktivieren
  94.   lcd_param=&H38 : gosub LCD_WRITECMD
  95.  
  96. ' mit 8-Bit-Command in 4-Bit-Modus umschalten
  97.   lcd_port=&B00000010
  98.   tog lcd_e
  99.   tog lcd_e
  100.  
  101. ' ab jetzt 4-Bit-Modus
  102.   lcd_param = &H28 : gosub LCD_WRITECMD
  103.   lcd_param = &H0C : gosub LCD_WRITECMD
  104.  
  105. ' Display loeschen
  106. #LCD_CLS
  107.   lcd_param = &H02 : gosub LCD_WRITECMD
  108.   lcd_param = &H01 : gosub LCD_WRITECMD
  109. return
  110.  
  111. ' Zeilenwechsel
  112. #LCD_GOTOLINE
  113.   if lcd_param = 1 then lcd_param = &H80
  114.   if lcd_param = 2 then lcd_param = &HC0
  115.   goto LCD_WRITECMD
  116.  
  117. ' LCD-Kommando
  118. #LCD_WRITECMD
  119.   lcd_buf = OFF
  120.   goto LCD_WRITE
  121.  
  122. ' Zeichenausgabe
  123. #LCD_WRITECHAR
  124.   lcd_buf = &B00100000
  125.  
  126. ' Kommando oder Zeichen an Display senden
  127. #LCD_WRITE
  128.   lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
  129.   tog lcd_e
  130.   tog lcd_e
  131.   lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
  132.   tog lcd_e
  133.   tog lcd_e
  134. return
  135.