Ein Beispielprgramm das ich kurz aus einem meiner programme zusammengeschnitten hab als Demo mit den wichtigsten Funktionen zur LCD-Ausgabe. Es wird ein Text ausgegeben auf das Display welcher in einer Tabelle ist am Ende und danach in Wert angezeigt (8-Bit).
Die zugehörige LCD.S19 Datei mit dem Assemblerprogramm von mit das die LCD-Routinen enthält:Code:'---------------------------------------------------------------------------- ' Texte und Werte ausgeben '---------------------------------------------------------------------------- 'I/O-Ports definieren '-------------------- Define LCDPort BytePort[2] 'LC-Display Port Define D4 Port[9] 'LCD D4 4-Bit (D0 / D4) Define D5 Port[10] 'LCD D5 4-Bit (D1 / D5) Define D6 Port[11] 'LCD D6 4-Bit (D2 / D6) Define D7 Port[12] 'LCD D7 4-Bit (D3 / D7) Define RW Port[13] 'LCD RW 0=Schreiben / 1=Lesen Define RS Port[14] 'LCD RS 0=Befehl / 1=ASCII Define EN Port[15] 'LCD E Datenübernahme (neg. Flanke) 'Variablen definieren '-------------------- Define TempWort Word[9] 'Universelles Temp-Wort (16-Bit) für Berechnungen Define TempByte Byte[19] 'Universelles Temp-Byte (8-Bit) für Berechnungen Define VarLcdData Byte[20] 'Datenbyte an/vom LC-Display Define LcdBuf Byte[21] 'LCD-Buffer Define LcdParam Byte[22] 'Übergabewert an LC-Display. Define VarTextNr Byte[23] 'Text-Ausgabe (Nr.) Define kk Byte[24] 'Zählvariable 'Assembler-Einsprungpunkte definieren '------------------------------------ Define LcdCmd &H0101 'Sys: Kommando an LCD senden Define LcdChar &H0107 'Sys: Zeichen an LCD senden Define LcdPulse &H0120 'Sys: Impuls an Enable ausgeben 'Konstanten definieren '--------------------- Define LcdClear &B00000001 Define LcdCursorHome &B00000010 Define LcdDisplayEin &B00001100 Define LcdDisplayAus &B00001000 Define LcdCursorEin &B00001110 Define LcdCursorAus &B00001100 Define Z1S1 &H80 'Zeile 1 Spalte 1 Define Z1S2 &H81 'Zeile 1 Spalte 2 Define Z1S3 &H82 '... Define Z1S4 &H83 Define Z1S5 &H84 Define Z1S6 &H85 Define Z1S7 &H86 Define Z1S8 &H87 Define Z1S9 &H88 Define Z1S10 &H89 Define Z1S11 &H8A Define Z1S12 &H8B Define Z1S13 &H8C Define Z1S14 &H8D Define Z1S15 &H8E Define Z1S16 &H8F Define Z2S1 &HC0 'Zeile 2 Spalte 1 Define Z2S2 &HC1 'Zeile 2 Spalte 2 Define Z2S3 &HC2 '... Define Z2S4 &HC3 Define Z2S5 &HC4 Define Z2S6 &HC5 Define Z2S7 &HC6 Define Z2S8 &HC7 Define Z2S9 &HC8 Define Z2S10 &HC9 Define Z2S11 &HCA Define Z2S12 &HCB Define Z2S13 &HCC Define Z2S14 &HCD Define Z2S15 &HCE Define Z2S16 &HCF Define EOT &H00 'Text Ende-Kennung Define Schreiben Off Define Lesen On Define CommandMode Off Define AsciiMode On Define Lo Off Define Hi On Define Enabled Off Define Diabled On Define Down Off Define Up On 'ASCII-Codes definieren '---------------------- Define xA_ &H41 ' A Define xB_ &H42 ' B Define xC_ &H43 ' C Define xD_ &H44 ' D Define xE_ &H45 ' E Define xF_ &H46 ' F Define xG_ &H47 ' G Define xH_ &H48 ' H Define xI_ &H49 ' I Define xJ_ &H4A ' J Define xK_ &H4B ' K Define xL_ &H4C ' L Define xM_ &H4D ' M Define xN_ &H4E ' N Define xO_ &H4F ' O Define xP_ &H50 ' P Define xQ_ &H51 ' Q Define xR_ &H52 ' R Define xS_ &H53 ' S Define xT_ &H54 ' T Define xU_ &H55 ' U Define xV_ &H56 ' V Define xW_ &H57 ' W Define xX_ &H58 ' X Define xY_ &H59 ' Y Define xZ_ &H5A ' Z Define x_a &H61 ' a Define x_b &H62 ' b Define x_c &H63 ' c Define x_d &H64 ' d Define x_e &H65 ' e Define x_f &H66 ' f Define x_g &H67 ' g Define x_h &H68 ' h Define x_i &H69 ' i Define x_j &H6A ' j Define x_k &H6B ' k Define x_l &H6C ' l Define x_m &H6D ' m Define x_n &H6E ' n Define x_o &H6F ' o Define x_p &H70 ' p Define x_q &H71 ' q Define x_r &H72 ' r Define x_s &H73 ' s Define x_t &H74 ' t Define x_u &H75 ' u Define x_v &H76 ' v Define x_w &H77 ' w Define x_x &H78 ' x Define x_y &H79 ' y Define x_z &H7A ' z Define xae &HE1 ' ä Define xoe &HEF ' ö Define xue &HF5 ' ü Define x_0 &H30 ' 0 Define x_1 &H31 ' 1 Define x_2 &H32 ' 2 Define x_3 &H33 ' 3 Define x_4 &H34 ' 4 Define x_5 &H35 ' 5 Define x_6 &H36 ' 6 Define x_7 &H37 ' 7 Define x_8 &H38 ' 8 Define x_9 &H39 ' 9 Define x__ &H20 ' Leerzeichen Define xPz &H25 ' % Define xSt &H2A ' * Define xPl &H2B ' + Define xKo &H2C ' , Define xMi &H2D ' - Define xDt &H2E ' . Define xDP &H3A ' : Define xGl &H3D ' = Define ESC 27 ' ESC-Zeichen Define Tab 9 ' Tabulator 'Textbeschreibungen '------------------ Define TxtVersion1 0 'Hochlauf-Text (nach dem Einschalten) Define TxtVersion2 13 'Initialisierung des Steuergeräts: '--------------------------------- ' Nach einem Reset oder nach dem Einschalten wird diese Routine durchlaufen. Dabei ' wird das digitale Potentiometer und das LC-Display initialisiert. ' Danach wird für drei Sekunden eine Hochlaufmeldung des Steuergeräts angezeigt. #Programm GoSub LCDReset 'Das LC-Display initialisieren im 4-Bit Modus Sys LcdCmd LcdClear Pause 1 'Text-String ausgeben (aus der Tabelle) VarTextNr = TxtVersion1 Sys LcdCmd Z1S1 GoSub LCDWriteText VarTextNr = TxtVersion2 Sys LcdCmd Z2S1 GoSub LCDWriteText Pause 80 Sys LcdCmd LcdClear 'Wert ausgeben TempByte = 20 Sys LcdCmd Z2S11 GoSub LCDWriteCount8Bit End ' Routinen für das LC-Display (2x16 Zeichen): ' ------------------------------------------- ' Das LC-Display wird beim Initialisieren auf 4-Bit Modus umgestellt und arbeitet ' danach nur noch auf den Datenleitungen D4 bis D7. Dabei werden bei jedem ' Kommando zuerst das niederwertigere Nibble und danach das höherwertige Nibble ' übertragen. Es stehen Einzelzeichen und komfortable Textausgaben zur Verfügung, ' welche den Umgang mit dem Display vereinfachen. Desweiteren kann auch vom ' Display gelesen werden. #LCDReset 'Das LC-Display initialisieren und den Display-Inhalt löschen 'LC-Display initialisieren im 4-Bit Modus LcdPort = &H80 'Alle Ports auf Low setzen Sys LcdCmd &H38 '8-Bit-Modus aktivieren LcdPort = &H82 'Mit 8-Bit Kommando in 4-Bit-Modus umschalten Sys LcdPulse Sys LcdCmd &H28 'Ab jetzt 4-Bit-Modus Sys LcdCmd &H0C #LCDClearZeile1 'Erste Zeile im LC-Display löschen Sys LcdCmd Z1S1 GoTo LCDClearZeile #LCDClearZeile2 'Zweite Zeile im LC-Display löschen Sys LcdCmd Z2S1 #LCDClearZeile 'Ausgewählte Zeile im LC-Display löschen For kk = 1 to 16 Sys LcdChar &H20 Next kk Return #LCDWriteCount8Bit '8-Bit Integer an Display ausgeben kk = TempByte / 100 If TempByte > 99 Then Sys LcdChar &H30 + kk kk = (TempByte - (kk * 100)) / 10 If TempByte > 9 Then Sys LcdChar &H30 + kk kk = TempByte MOD 10 Sys LcdChar &H30 + kk Return #LCDRead 'Daten von LC-Display lesen als zwei 4-Byte Blöcke (zuerst Higher, dann Lower) Deact D4 Deact D5 Deact D6 Deact D7 RW = Lesen Sys LcdPulse VarLcdData = &H0F And (LCDPort ShL 4) Sys LcdPulse VarLcdData = VarLcdData Or (LCDPort And &H0F) RW = Schreiben Return #LCDWriteText LookTab TabTexte, VarTextNr, VarLcdData If VarLcdData = EOT Then Return Sys LcdChar VarLcdData VarTextNr = VarTextNr + 1 GoTo LCDWriteText 'Texte für das LC-Display: '------------------------- ' Zeichenfolgen welche als gesamtes ausgegeben werden. Es ist immer eine Einsprung- ' Adresse vorhanden, ab der die Zeichenfolge steht. Am Ende folgt ein ASCII-Code 0 ' der das Ende der Textausgabe anzeigt, damit die Ausgabe beendet wird und der nach- ' folgende Text nicht ebenfalls ausgfegeben wird. ' ' Tabellenstruktur: ASCII-Zeichen 1, ASCII-Zeichen 2, ... Ende-Kennung (EOT) Table TabTexte xV_ x_e x_r x_s x_i x_o x_n xDP x__ x_1 xDt x_0 EOT '0 - Version 1.0 xW_ x_o x_l x_f x_g x_a x_n x_g x__ xS_ x_c x_h x_m x_i x_d EOT '13 - Wolfgang Schmid TabEnd SysCode "LCD.S19"
Viel Spass damit.Code:S11B0101A680B7B52004A6A0B7B5B69244444444CD011CB692A40FCD70 S11B0119011C81BAB5B7021C021D02811D01B692B1B727F723093CB73B S11801311801CD014120ED3AB71901CD014120E41A011B0181AA S9030000FC
Grüsse Woflgang[/code]







Zitieren

Lesezeichen