'---------------------------------------------------------------------------------------- ' Name: LCD1_4x40.TIG ' Type: TIGER-BASIC(tm) Source Code ' Purpose: Connect a Text LCD: 4 x 40 with HD44780 Controller to the BASIC-Tiger(tm) ' ' (C) - Copyright Wilke Technology, P.O.Box 1727, D-52018 Aachen, Germany '---------------------------------------------------------------------------------------- ' ' Thank you for using BASIC Tigers in your products. If you have questions, ideas ' or special needs, please contact your next distributor or the Tiger support team ' and visit our web site: ' ' Wilke Technology GmbH ' The Tiger Support Team ' P.O.Box 1727, D-52018 Aachen, Germany ' Krefelder Str. 147, D-52070 Aachen, Germany ' ' email: support@wilke-technology.com (english) ' email: support@wilke.de (german) ' Phone: +49 (241) 918 900 Mo to Fr, 7:00 to 16:00 (GMT) ' Fax: +49 (241) 918 9068 ' ' New information, new drivers and free downloads see: ' ' www.wilke-technology.com (english) ' www.wilke.de (german) ' ' Sincerely, ' ' Your Tiger Support Team ' '---------------------------------------------------------------------------------------- ' ' This example was tested under following conditions: ' ' -> "Plug & Play Lab" used, with diconnected LCD of this unit ' ' -> A 4 x 40 LCD connected through these Tiger-Pin: ' ' <--Signal--> <-----Function----> <-Tiger Port/Bit-> <-----Comment-----> ' DB0...DB7: 8-Data Bit Lines Port 6, Bit-0...7 - standard wiring - ' R/S: 0=Data, 1=Command Port 3, Bit-7 - standard wiring - ' E1: Enable LCD Segment 1 Port 3, Bit-6 - standard wiring - ' E2: Enable LCD Segment 2 Port 3, Bit-4 1 additional wire ! ' ' R/W: 0=write, 1=read GND - standard wiring - ' ' ' ' Note: LCDs and similar devices need proper Power Supplies to give a visible readout! ' ' So, if your Display dos not show characters on the screen, check for these ' commonly occuring mistakes: ' ' 1.) Correct wiring - all pins in proper place? ' 2.) Is the LCD c o n t r o l l e r powered properly (+5V/GND or +3V/GND)? ' 3.) Is the LCD g l a s s - m a t r i x powered properly (-10 ... +2V typically) ' Have a potentiometer in this place for adjustment of best contrast-voltage. ' 4.) If the Display is equipped with illumination - turn the illumination ON. ' Depending on the system otherwise nothing might be visible. ' ' 5.) Cable length - keep cables short normally (10...20 cm) - for longer ' distances between LCD and the Tiger, check our application note on "Long ' cabling for LCDs" ' '---------------------------------------------------------------------------------------- USER_VAR_STRICT ' check for proper variable declarations ! #INCLUDE KEYB_PP.INC ' <- Keyboard Plug+Play-Lab LONG N,K, X1,X2,X3,X4, X,Y ' LONG OSZI_WIDTH ' <- Width of "Oszilloscope STRING CHSET$ (100), A$(100) ' STRING SCREEN$ (1887) ' Pixel Graphic 17 x 144 Pix STRING SCREEN2$ (1K) ' ' Cursor Modes: STRING KEIN_CURSOR$ (8), KONST_CURSOR$ (8), BLINK_CURSOR$ (8) DATALABEL Tiger_Commercial_17x144 ' #define LCD 1 ' TASK MAIN ' '---------------------------------------------------------------------------------------- ' ' ' 111111111122222222223333333333 ' 0123456789012345678901234567890123456789 <-- X-Position on LCD ' ' 0 ######### Upper-Segment (E1) ########### LCD-Line 1 Device-ADR here: #1 ' 1 ######### Upper-Segment (E1) ########### LCD-Line 2 " ' 0 ######### LOWER-Segment (E2) ########### LCD-Line 3 Device-ADR here: #2 ' 1 ######### LOWER-Segment (E2) ########### LCD-Line 4 " ' ' ! ' !<-- Y-Position within each LCD Segment ' ' '---------------------------------------------------------------------------------------- ' ' :<----------------------------------- LCD-Display-Typ (1...n) ' : :<--------------------------------- BUS-Adr LCD / Keyb. ' : : :<------------------------------ BIT-MASK ' : : : :<--------------------------- Port ' : : : : :<------------------------ BIT-MASK ' : : : : : :<--------------------- Port ' : : : : : : :<----------------- BIT-Mask Beeper, 00 -> no BELL ! ' : : : : : : : :<-------------- Port Beeper (iPort) ' : : : : : : : : :<------------ Beeper-Flg: 0=TRUE: 1=active ' : : : : : : : : : FF=false: 0=active ' : : : : : : : : : :<--------- Shift-LED Bit-MASK, 00=kein Shift-LED ' : : : : : : : : : : :<----- Shift-LED LOG-Port-ADR (iPort/ePort) ' : : : : : : : : : : : :<-- Shift-LED Flg: 0=TRUE: LED active on "1" ' : : : : : : : : : : : : FF=FALSE: LED active on "0" ' : : : : : : : : : : : : :<-- Keyboard Scan Columns: 0=No Keyboard, sonst=Default ' : : : : : : : : : : : : : :<-LCD avail: 0=YES / nn=No ab: 6.Nov.97 ' : : : : : : : : : : : : : : ' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <------ Param-Number ' 0 0 0 0 0 0 EE 0 EE EE 0 EE EE EE <------ Value for skipping Param (EE=238) ' : : : : : : : : : : : : : : ' Defaults ---> 0 6,40H,3,80H,3, 4, 4,FF,1,10H, 0, 1, 0 INSTALL DEVICE #1,"LCD1.TDD",16,0,40H,3, 0, 0,238, 0,0, 1,10H, 0, 1, 0 INSTALL DEVICE #2,"LCD1.TDD",16,0,10H,3, 0, 0, 0, 0,0, 0, 0, 0, 0, 0 ' nur LCD + Beep, kein Keyboard, kein Shift-LED KEIN_CURSOR$ = "<1BH>c<0>" ' <- Cursor-AUS '---------------------------------------------------------------------------------------- ' 5.) ESC,L,n,, Lade Sonderzeichensatz "n" ' ==================== in den Dev-Driver: ' n -> 0...F ' -> 64 Byte of Data ' '---------------------------------------------------------------------------------------- CHSET$ = "& 10 10 10 10 10 10 10 10& ' Chr-0 10 10 10 10 10 10 10 10& ' Chr-2 14 14 14 14 14 14 14 14& ' Chr-3 14 14 14 14 14 14 14 14& ' Chr-4 15 15 15 15 15 15 15 15& ' Chr-5 15 15 15 15 15 15 15 15& ' Chr-5 18 18 00 00 00 18 18 00& ' Chr-6 15 0A 15 0A 15 0A 15 0A"% ' Chr-7 PRINT #1,"<1BH>L<0>";CHSET$;"<0F0H>"; ' Set Special Charset for Tachometers PRINT #2,"<1BH>L<0>";CHSET$;"<0F0H>"; ' Set Special Charset for Tachometers '---------------------------------------------------------------------------------------- ' M a i n L o o p '---------------------------------------------------------------------------------------- LOOP 999999999 ' <----------------- many Loops ----------------> '---------------------------------------------------------------------------------------- ' Turn off the Cursor on LCD: ESC,c,n, "c" define Cursor (lower case "c") ' ============= n = 0 Cursor AUS ' n = 1 Cursor EIN ' n = x Cursor EIN + BLINKEN '---------------------------------------------------------------------------------------- PRINT #1,"<1><1BH>c<0><0F0H><<----- Text Ausgabe auf LCD 4x40 ------>"; ' Clear LCD Upper-Segment + Cursor=OFF PRINT #1, "the quick brown fox jumps over the lazy "; ' PRINT #2,"<1><1BH>c<0><0F0H> dog "; ' Clear LCD Lower-Segment + Cursor=OFF PRINT #2, "a b c d e f g h i j k l m n o p q r s t "; ' WAIT_DURATION 4000 ' PRINT #1,"<1>"; ' Clear Upper-Segment PRINT #2,"<1>"; ' Clear Lower-Segment '---------------------------------------------------------------------------------------- ' Show X-/Y-Positioning '---------------------------------------------------------------------------------------- X1 = MODULO_UPDO ( 0, 0, 29, 1, 0) ' X-Pos-1: Value, Min, Max, Step, ID X2 = MODULO_UPDO ( 8, 0, 29, 1, 1) ' X-Pos-2: Value, Min, Max, Step, ID X3 = MODULO_UPDO ( 16, 0, 29, 1, 2) ' X-Pos-3: Value, Min, Max, Step, ID X4 = MODULO_UPDO ( 24, 0, 29, 1, 3) ' X-Pos-4: Value, Min, Max, Step, ID LOOP 90 ' <--------- Character X-/Y-Positioning --------> X1 = MODULO_UPDO ( X1, 0) ' advance X position X2 = MODULO_UPDO ( X2, 1) ' advance X position X3 = MODULO_UPDO ( X3, 2) ' advance X position X4 = MODULO_UPDO ( X4, 3) ' advance X position PRINT #1,"<1BH>A";CHR$(X1);"<0><0F0H> X-Pos:";X1;" "; ' <-- LCD Line-1 (Y=0, Segment = Upper) PRINT #1,"<1BH>A";CHR$(X2);"<1><0F0H> X-Pos:";X2;" "; ' <-- LCD Line-2 (Y=1, Segment = Upper) PRINT #2,"<1BH>A";CHR$(X3);"<0><0F0H> X-Pos:";X3;" "; ' <-- LCD Line-3 (Y=0, Segment = Lower) PRINT #2,"<1BH>A";CHR$(X4);"<1><0F0H> X-Pos:";X4;" "; ' <-- LCD Line-4 (Y=1, Segment = Lower) WAIT_DURATION 180 ENDLOOP ' PRINT #1,"<1>"; ' Clear Upper-Segment PRINT #2,"<1>"; ' Clear Lower-Segment '---------------------------------------------------------------------------------------- ' Hier: grosse Ziffern zeigen '---------------------------------------------------------------------------------------- RUN_TASK BIG_NUM ' zeige grosse Ziffern WAIT_DURATION 10000 EXIT_TASK BIG_NUM ' beende Task '---------------------------------------------------------------------------------------- ' Zeige Oszillogramm auf Text-LCD '---------------------------------------------------------------------------------------- OSZI_WIDTH = 17 RUN_TASK OSZILLO ' zeige Oszilloscope WAIT_DURATION 10000 EXIT_TASK OSZILLO ' beende Task OSZI_WIDTH = 40 RUN_TASK OSZILLO ' zeige Oszilloscope WAIT_DURATION 10000 EXIT_TASK OSZILLO ' beende Task '---------------------------------------------------------------------------------------- ' Show quasi-graphic Tachometers '---------------------------------------------------------------------------------------- PRINT #1,"<1BH>L<0>";CHSET$;"<0F0H>"; ' Set Special Charset for Tachometers PRINT #2,"<1BH>L<0>";CHSET$;"<0F0H>"; ' Set Special Charset for Tachometers PRINT #1,"<1>Ein selbst definierter Sonderzeichensatz"; ' PRINT #1, "wird jetzt eingesetzt um Analog-Signale"; ' PRINT #2,"<1>als Tachometer (waagerechte Balken)" ' PRINT #2, "darzustellen." ' WAIT_DURATION 8000 ' PRINT #1,"<1>"; ' Clear Upper-Segment PRINT #2,"<1>"; ' Clear Lower-Segment X1 = MODULO_UPDO ( 0, 0, 39*6, 1, 0) ' X-Pos(1): Value, Min, Max, Step, ID X2 = MODULO_UPDO ( 20, 0, 39*6, 2, 1) ' X-Pos(2): Value, Min, Max, Step, ID X3 = MODULO_UPDO ( 40, 0, 39*6, 3, 2) ' X-Pos(3): Value, Min, Max, Step, ID X4 = MODULO_UPDO ( 60, 0, 39*6, 4, 3) ' X-Pos(4): Value, Min, Max, Step, ID LOOP 200 ' <--------- Tachometers (horizontal Bars -----------> X1 = MODULO_UPDO ( X1, 0) ' advance X position X2 = MODULO_UPDO ( X2, 1) ' advance X position X3 = MODULO_UPDO ( X3, 2) ' advance X position X4 = MODULO_UPDO ( X4, 3) ' advance X position A$ = FILL$ ("85"%, X1/6) A$ = A$ + CHR$(80h+MOD(X1,6)) + " " PRINT #1,"<1BH>A<0><0><0F0H>";A$ ' <-- LCD Line-1 (Y=0, Segment = Upper) A$ = FILL$ ("85"%, X2/6) A$ = A$ + CHR$(80h+MOD(X2,6)) + " " PRINT #1,"<1BH>A<0><1><0F0H>";A$ ' <-- LCD Line-2 (Y=1, Segment = Upper) A$ = FILL$ ("85"%, X3/6) A$ = A$ + CHR$(80h+MOD(X3,6)) + " " PRINT #2,"<1BH>A<0><0><0F0H>";A$ ' <-- LCD Line-3 (Y=0, Segment = LOWER) A$ = FILL$ ("85"%, X4/6) A$ = A$ + CHR$(80H+MOD(X4,6)) + " " PRINT #2,"<1BH>A<0><1><0F0H>";A$ ' <-- LCD Line-4 (Y=1, Segment = LOWER) WAIT_DURATION 40 ENDLOOP ' PRINT #1,"<1>Hier die vordefinierten Sonderzeichen" ' PRINT #1, "des LCD1.TDD Device-Drivers:" ' PRINT #2,"<1> ";"80 81 82 83 84 85 86 87"%;" ";"80 81 82 83 84 85 86 87"%;" ";"80 81 82 83 84 85 86 87"% PRINT #2, " ";"80 81 82 83 84 85 86 87"%;" ";"80 81 82 83 84 85 86 87"%;" ";"80 81 82 83 84 85 86 87"%; '---------------------------------------------------------------------------------------- ' 4.) ESC,S,n, Schalte Sonderzeichensatz "n" ein ' ============= n -> 0...F ' LOOP 3 FOR N = 0 TO 15 PRINT #1, "<1BH>S";CHR$(N);"<0F0H>"; PRINT #2, "<1BH>S";CHR$(N);"<0F0H>"; WAIT_DURATION 350 NEXT ENDLOOP PRINT #1, "<1><1BH>S<0><0F0H>"; ' clear screen + Charset #0 PRINT #2, "<1><1BH>S<0><0F0H>"; ' clear screen + Charset #0 '---------------------------------------------------------------------------------------- ' give a rolling banner in Graphic mode presentation through special chracters '---------------------------------------------------------------------------------------- STRING U_GRAPH$(64), L_GRAPH$(64), TIGER$ (1K) U_GRAPH$ = FILL$ ("00"%, 64) L_GRAPH$ = FILL$ ("00"%, 64) PRINT #1,"<1BH>L<0>";U_GRAPH$;"<0F0H>"; ' Set Special Charset for Graphic to "empty" PRINT #2,"<1BH>L<0>";L_GRAPH$;"<0F0H>"; ' Set Special Charset for Graphic to "empty" PRINT #1,"<1BH>A<15><1><0F0H>";"80 81 82 83 84 85 86 87"%; PRINT #2,"<1BH>A<15><0><0F0H>";"80 81 82 83 84 85 86 87"%; TIGER$ = FILL$ ("00"%, (48+144)*17/8) ' Format Format Window ' <-> <---> <---> ' DESTIN, SRC, B,H, X,Y, B2,H2, X2,Y2, B3,H3, MODE GRAPHIC_COPY (TIGER$,Tiger_Commercial_17x144, 144+48,17, 48,0, 144,17, 0,0, 144,17, 0) ' ' <----DEST------> <--------SOURCE---------> FOR X = 0 TO 144+48 '---------------------------------------------------------------------------------------- ' Schneide ein fenster heraus '---------------------------------------------------------------------------------------- SCREEN$ = FILL$ ("00"%, 48*17/8) ' Format Format Window ' <-> <---> <---> ' DESTIN, SRC, B,H, X,Y, B2,H2, X2,Y2, B3,H3, MODE GRAPHIC_COPY (SCREEN$,TIGER$, 48,17, 0,0, 144+48,17, X,0, 48,17, 0) ' ' <---DEST---> <----------SOURCE---------> '---------------------------------------------------------------------------------------- ' Re-Assemble into 6-Pixel Groups '---------------------------------------------------------------------------------------- ' SRC, SRC_WIDE, DST_LEN, DST_WIDTH, DST_PIX, SHift-Left SCREEN2$ = GRAPHIC_EXP$ (SCREEN$, 6, 8*17, 8, 6, 0) '---------------------------------------------------------------------------------------- ' ERG$ <-------- STOS$ ( A$, POS, B$, POS, LEN ) ' ! ! ! ! ! ! ' ! SOURCE-String --->! ! ! ! ! ' ! Start-Position ------->! ! ! ! ' ! String Wert ------------->! ! ! ' ! SOURCE-Position-------------------->! ! ' ! Anzahl der Bytes die ---------------------->! ' ! geschrieben werden ' ! ' !<----- String-Ergebnis ' '---------------------------------------------------------------------------------------- ' U_GRAPH$=FILL$ ("55"%, 64) FOR N = 0 TO 7 FOR K = 0 TO 7 U_GRAPH$ = STOS$ (U_GRAPH$, N*8+K, SCREEN2$, N+K*8, 1) NEXT NEXT ' L_GRAPH$=FILL$ ("55"%, 64) FOR N = 0 TO 7 FOR K = 0 TO 7 L_GRAPH$ = STOS$ (L_GRAPH$, N*8+K, SCREEN2$, 9*8+N+K*8, 1) NEXT NEXT PRINT #1,"<1BH>L<0>";U_GRAPH$;"<0F0H>"; ' Set Special Charset for Graphic PRINT #2,"<1BH>L<0>";L_GRAPH$;"<0F0H>"; ' Set Special Charset for Graphic NEXT ENDLOOP ' <----------------- many Loops -----------------> '---------------------------------------------------------------------------------------- ' E n d o f M a i n L o o p '---------------------------------------------------------------------------------------- '---------------------------------------------------------------------------------------- ' I m p o r t e d P i x e l G r a p h i c : '---------------------------------------------------------------------------------------- Tiger_Commercial_17x144:: DATA FILTER "Tiger_Commercial_17x144.BMP", "GRAPHFLT", 0 ' 17 Pix hoch, 136 Pix Breit END ' '-------------------------------------------------------------------- ' Task: bewegtes Oszillogramm zeigen '-------------------------------------------------------------------- TASK OSZILLO ' zeige Oszilloscope ARRAY OSZ (40) OF BYTE ' <- Array fuer Byte Messwerte LONG WERT, ENDLOS,PHI,Z ' STRING ZEILE$ (90) ' Zeilen-String ' PRINT #LCD, _CLR;KEIN_CURSOR$;' ' PRINT #LCD+1,_CLR;KEIN_CURSOR$;' WAIT_NEXT 150 ' warte 0,15 Sek PRINT #LCD, "<1BH>A<0><0><0F0H>"; PRINT #LCD+1, "<1BH>A<0><0><0F0H>"; FOR ENDLOS = 0 TO 1 STEP 0 ' <---------- Endlos-Loop ----------> '- FOR PHI = 0 TO 999999999 ' FOR PHI = 0 TO 999999999 STEP 2117 PRINT #LCD, _HOME; ' '- FOR X = 0 TO OSZI_WIDTH-1 ' baue naechsten "Messwertsatz" auf FOR X = 0 TO OSZI_WIDTH-1 ' baue naechsten "Messwertsatz" auf '- WERT = 16*SIN((PHI+X)*0.2) WERT = QUICK_WORD_SIN(PHI+X*1600,16) OSZ(X) = WERT + 17 NEXT ' <- TMP ZEILE$ = "" ' FOR Y = 3 TO 2 STEP -1 ' FOR X = 0 TO OSZI_WIDTH-1 ' IF OSZ(X) >= Y*9 THEN ' Z = (OSZ(X)-Y*9) ' CALL XLIMIT (Z,7) ' begrenze Werte-Bereich: 0...7 ZEILE$ = ZEILE$ + CHR$(Z+0C0H)' <- 1 Sonderzeichen dazu ELSE ' ZEILE$ = ZEILE$ + " " ' ENDIF ' NEXT ' <- X IF OSZI_WIDTH <> 40 THEN' ZEILE$ = ZEILE$ + "<1BH>A<0>" + CHR$(Y-2) + "<0F0H>" ENDIF ' NEXT ' <- Y PRINT #LCD, ZEILE$; ' Drucke Bild nun ZEILE$ = "" ' FOR Y = 1 TO 0 STEP -1 ' FOR X = 0 TO OSZI_WIDTH-1 ' IF OSZ(X) >= Y*9 THEN ' Z = (OSZ(X)-Y*9) ' CALL XLIMIT (Z,7) ' begrenze Werte-Bereich: 0...7 ZEILE$ = ZEILE$ + CHR$(Z+0C0H)' <- 1 Sonderzeichen dazu ELSE ' ZEILE$ = ZEILE$ + " " ' ENDIF ' NEXT ' <- X IF OSZI_WIDTH <> 40 THEN' ZEILE$ = ZEILE$ + "<1BH>A<0>" + CHR$(Y) + "<0F0H>" ENDIF ' NEXT ' <- Y PRINT #LCD+1, ZEILE$; ' Drucke Bild nun WAIT_NEXT ' warte 0,15 Sek NEXT ' <- PHI NEXT ' <- ENDLOS END ' = RETURN from Subroutine '-------------------------------------------------------------------- ' Task: baue lebende 3-stellige Zahl auf und zeige sie gross '-------------------------------------------------------------------- TASK BIG_NUM ' STRING CHGEN$ (170) ' <- Character Generator LONG K, TAUSEND, HUNDERT, ZEHN, EIN ' CHGEN$ = "& ' setze Character Generator 11 3 23 26114& ' "0" = 4 x 4 Chars 75 742 2 2& ' "1" = 4 x 4 Chars 11 6 2 10 3115& ' "2" = 4 x 4 Chars 11 6 2 6056114& ' "3" = 4 x 4 Chars 7 3 5 6024 2 & ' "4" = 4 x 4 Chars 71153 0056114& ' "5" = 4 x 4 Chars 11 3 30056114& ' "6" = 4 x 4 Chars 71156 2 3 2 & ' "7" = 4 x 4 Chars 11 3 270056114& ' "8" = 4 x 4 Chars 11 3 2 002 114" ' "9" = 4 x 4 Chars PRINT #LCD, KEIN_CURSOR$;"<1>"; ' Turn Curso OFF + Clear LCD-Segment PRINT #LCD+1,KEIN_CURSOR$;"<1>"; ' Turn Curso OFF + Clear LCD-Segment PRINT #LCD, "<1BH>A<17><0><0F0H>Dies ist ein Beispiel," PRINT #LCD, "<1BH>A<17><1><0F0H>wie man mit einem Text-" PRINT #LCD+1, "<1BH>A<17><0><0F0H>Display Sonderzeichen" PRINT #LCD+1, "<1BH>A<17><1><0F0H>einsetzen kann" LOOP 999999999 ' <------ fast endlos ------> K = MOD (TICKS, 9999) ' K = the displayed Number TAUSEND=K/1000 ' <- Tausender HUNDERT=(K-TAUSEND*1000)/100 ' <- Hunderter ZEHN =(K-TAUSEND*1000-HUNDERT*100)/10 ' <- Zehner EIN =K-TAUSEND*1000-HUNDERT*100-ZEHN*10 ' <- Einer CALL PRINT_DIGIT ( 0,TAUSEND,0E8H,CHGEN$) ' drucke 1000-er Digit CALL PRINT_DIGIT ( 4,HUNDERT,0E8H,CHGEN$) ' drucke 100-er Digit CALL PRINT_DIGIT ( 8,ZEHN,0E8H,CHGEN$) ' drucke 10-er Digit CALL PRINT_DIGIT (12,EIN,0E8H,CHGEN$) ' drucke 1-er Digit WAIT_DURATION 500 ' 1 Sek warten ENDLOOP ' END ' Task Ende "BIG_NUM" '-------------------------------------------------------------------- ' Subroutine: Schreibe 1 grosses Digit auf LCD '-------------------------------------------------------------------- SUB PRINT_DIGIT (LONG X, DIGIT, CHSATZ; STRING GEN$) STRING A$(1), B$(60) ' A$ = 1 Char, B$ = Temp-String LONG K,A ' '-------------- UPPER LCD Segment ---------------- B$="" ' FOR Y=0 TO 1 ' 2 Zeilen: Y=0, 1 B$=B$+"<1BH>A"+CHR$(X)+CHR$(Y)+"" FOR K=0 TO 3 ' 4 Zeichen / Zeile A$=MID$(GEN$,DIGIT*16+K+4*Y,1) ' IF A$<>" " THEN ' A=ASC(A$) BITAND 7H ' <- non Blank Char ! B$=B$+CHR$(CHSATZ+A) ' <- Sonderzeichen nehmen ELSE ' B$=B$+" " ' <- schreibe Blank ENDIF ' NEXT ' NEXT ' PRINT #LCD, B$; ' '-------------- Lower LCD Segment ---------------- B$="" ' FOR Y=2 TO 3 ' 2 Zeilen: Y=2, 3 B$=B$+"<1BH>A"+CHR$(X)+CHR$(Y-2)+"" FOR K=0 TO 3 ' 4 Zeichen / Zeile A$=MID$(GEN$,DIGIT*16+K+4*(Y),1) ' IF A$<>" " THEN ' A=ASC(A$) BITAND 7H ' <- non Blank Char ! B$=B$+CHR$(CHSATZ+A) ' <- Sonderzeichen nehmen ELSE ' B$=B$+" " ' <- schreibe Blank ENDIF ' NEXT ' NEXT ' PRINT #LCD+1, B$; ' END ' = RETURN from Subroutine '-------------------------------------------------------------------- ' Subroutine: Limit Value of Var '-------------------------------------------------------------------- ' ' Eingang: W = Variable ' MAX = erlaubter MAX-Wert (Min-Wert = 0) ' ' Overflow --> neuer Wert = MAX ' Underflow --> neuer Wert = 0 ' ' Ausgang: W = zulaessiger Wert '-------------------------------------------------------------------- SUB XLIMIT (VAR LONG W; LONG MAX)' IF W<0H OR W > 5*MAX THEN ' underflow ? W=0 ' <- begrenze ELSE ' IF W>MAX THEN ' overflow ? W=MAX ' <- begrenze ENDIF ' ENDIF ' END ' = RETURN from Subroutine