Hier zunächst der vollständige Quelltext des Programmes: define LCD_Port byteport[2] 'Programm KEYBLCD.BAS define LCD_EN port[15] 'stellt das auf der Folientastatur eingegebene define LCD_Status byte 'Zeichen in der ersten LCD-Displayzeile dar define LCD_Position1 byte 'und sendet es über den Telemetriesender; define LCD_Position2 byte 'empfängt entsprechend Zeichen über den define Daten byte 'Telemetrie-Empfänger und stellt sie in der define Send_EN port[16] 'zweiten Displayzeile dar define KBD_port ad[8] define KBD_Code byte define KBD_AltTaste byte define i byte define h byte '*****Initialisierungen**************************************************** baud R2400 gosub LCD_Init pause 10 '*****Hauptprogramm******************************************************** #Loop if rxd then gosub receive for i = 0 to 11 looktab KBD_codetab, i, KBD_Code if abs(KBD_Port-KBD_Code)<3 then gosub send next goto Loop end '************************************************************************** '*****Empfangsroutine****************************************************** '* setzt den Cursor in die zweite Zeile des Displays, holt das Zeichen von '* der seriellen Schnittstelle und gibt es im Display aus #receive get h beep 400,25,10 if LCD_Position2=0 then gosub LCD_Cls2 Daten=&HC0+LCD_Position2 : gosub LCD_WriteCmd if LCD_Position2<15 then LCD_Position2=LCD_Position2+1 else LCD_Position2=0 daten=h : gosub LCD_WriteChr : h=0 return '*****Senderoutine********************************************************* '* setzt den Cursor in die erste Zeile des Displays, schreibt das zu sendende Zeichen '* dorthin und gibt es dann über die serielle Schnittstelle aus #send looktab LCD_tab,i,h Send_EN=On : pause 5 : put h : Send_EN=Off if rxd then get daten 'verhindert den Empfang des selbst if LCD_Position1=0 then gosub LCD_Cls1 'gesendeten Zeichens Daten=&H80+LCD_Position1 : gosub LCD_WriteCmd if LCD_Position1<15 then LCD_Position1=LCD_Position1+1 else LCD_Position1=0 Daten=h : LCD_WriteChr i=11 return '*****LCD-Steuerroutinen*************************************************** #LCD_Init LCD_Position1=0 : LCD_Position2=0 : LCD_Port=0 Daten=&H38 : gosub LCD_WriteCmd LCD_Port=&H02 : pulse LCD_EN Daten=&H0E : gosub LCD_WriteCmd #LCD_ClS Daten=&H02 : gosub LCD_WriteCmd Daten=&H01 : gosub LCD_WriteCmd return #LCD_WriteCmd LCD_Status=&B00000000 goto LCD_Write #LCD_WriteChr LCD_Status=&B00100000 #LCD_Write LCD_Port = LCD_Status or (Daten shr 4) pulse LCD_EN LCD_Port = LCD_Status or (Daten and &H0F) pulse LCD_EN return #LCD_Cls1 for i=15 to 0 step -1 daten=&H80+i : gosub LCD_WriteCmd daten=&H20 : gosub LCD_WriteChr next return #LCD_Cls2 for i=15 to 0 step -1 daten=&HC0+i : gosub LCD_WriteCmd daten=&H20 : gosub LCD_WriteChr next return '*****Tabellen************************************************************* table KBD_codetab 'enthält die den anlaogen 90 68 153 235 46 132 214 23 111 194 0 173 'Spannungswerten der Tasten '0 1 2 3 4 5 6 7 8 9 * # 'entsprechenden digitalen tabend 'Werte table LCD_tab 'enthält die ASCII-Codes der mit der &H30 &H31 &H32 &H33 &H34 &H35 'Tastatur darstellbaren Zeichen &H36 &H37 &H38 &H39 &H2A &H23 tabend