Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 locate für LCD in CCBasic Kategorie: C-Control I V1.2/2.0 (von Kay - 22.11.2004 0:02)
 Als Antwort auf locate für LCD von Henrik - 21.11.2004 21:12
Wenn wir hier einen solch Thread schon mal haben...
als ehemaliger KC 85/2 (/3/4)-Benutzer fehlte auch mir die Locate-Funktion,
die für ein großes Display mehr als nötig ist. Ich hatte eine ganze Menge
Zustände einer Spritzgußmaschine anzuzeigen und vor fast 3 Jahren
dieses Programm zusammengeschmiedet. mit etwas Aufwand kann man
noch eine Variable einsparen, mir hatts aber so gereicht.

Das Programm gibt eine Textmaske aus, was den Sinn von Locate (als Unterprogramm!)
soweit verdeutlichen sollte. Ich hoffe, dass sich reinfindet, wer es benötigt  :-)





define lcd_buf    byte 'Puffer fuer Datentranfer zum Display
define lcd_dat    byte 'zu sendenden Daten-Bytes
define zeile        byte 'Zeilennummer fuer DD-RAM-Adressierung
define spalte      byte 'Spaltennummer fuer DD-RAM-Adressierung

define i              byte 'Laufvariablen
define j              byte

' *** Port-Variablen LCD-Treiber ***
define lcd_port    byteport[2] 'LCD-Interface-Port - gesamt
define lcd_rs       port[14]    'Befehls-Leitung - fuer Cmd's auf 1
define lcd_e        port[15]    'Execute-Leitung - H-L-Pulse


' ***   DISPLAY - POWER_ON_INITIALISIERUNG   ***
zeile = 1  :  spalte = 1    'Zeilen- und Spaltenzaehler setzen
lcd_port = &B01000000       'EXE-Leitung HI setzen
lcd_dat  = &B00110000 : gosub SEND_COM 'FUNC-Set (noch 8-Bit)
lcd_port = &B01000010 : pulse lcd_e    'FUNC-Set: ab jetzt 4-Bit

'Betriebsparameter einstellen
lcd_dat  = &B00101000 : gosub SEND_COM 'N=1 (2zeilg. Disp.) F=0 (5x7 Font)
lcd_dat  = &B00001100 : gosub SEND_COM 'Disp an, Cursor aus, Blinken aus
lcd_dat  = &B00000110 : gosub SEND_COM 'Adresspointer increm., Kein Shift

'Sonderzeichen in den CG-RAM exportieren
for i = 1 to 8
   lcd_dat = 64 + (i - 1) * 8 : gosub SEND_COM
   for j = 0 + (i - 1) * 8 to (i - 1) * 8 + 7
      looktab CG_CODES,j,lcd_dat
      gosub SEND_CHAR
   next
next

gosub CLS

 
' *** AB HIER ANWENDERPROGRAMM ***

zeile =  1 : spalte = 1 : gosub LOCATE ' Text-Maske ausgeben
for i =  0 to 13
    looktab PRINTS,i,lcd_dat : gosub SEND_CHAR
next
zeile =  2 : spalte = 1 : gosub LOCATE
for i = 14 to 21
    looktab PRINTS,i,lcd_dat : gosub SEND_CHAR
next
zeile =  3 : spalte = 1 : gosub LOCATE
for i = 22 to 40
    looktab PRINTS,i,lcd_dat : gosub SEND_CHAR
next
zeile =  4 : spalte = 20 : gosub LOCATE
lcd_dat = 115 : gosub SEND_CHAR
zeile = 2 : spalte = 9 : gosub LOCATE
for i = 53 to 64 'drucke "_Start-Test_"
   looktab PRINTS,i,lcd_dat : gosub SEND_CHAR
next

end

#SEND_CHAR ' Unterprogramm "Zeichen senden"
   lcd_buf = &B01100000
   lcd_port = lcd_buf or (lcd_dat shr 4)    ' obere 4 Bits senden
   pulse lcd_e
   lcd_port = lcd_buf or (lcd_dat and &H0F) ' untere 4 Bits senden
   pulse lcd_e
return

#LOCATE ' Unterprogramm "Cursor auf Display platzieren"
   if zeile = 1 then lcd_dat = 127 + spalte
   if zeile = 2 then lcd_dat = 191 + spalte
   if zeile = 3 then lcd_dat = 147 + spalte
   if zeile = 4 then lcd_dat = 211 + spalte
   gosub SEND_COM
return

#SEND_COM ' Unterprogramm "Befehl an Display senden"
   lcd_buf = &B01000000
   lcd_port = lcd_buf or (lcd_dat shr 4)
   pulse lcd_e
   lcd_port = lcd_buf or (lcd_dat and &H0F)
   pulse lcd_e
return

#CLS ' Unterprogramm "Display loeschen"
   lcd_dat = 2 : gosub SEND_COM
   lcd_dat = 1 : gosub SEND_COM
return

' *** Zeichengenerator-Daten ***
table CG_CODES
      31 17 17 17 17 17 17 31 'Code 00, leerer Rahmen
      31 31 31 31 31 31 31 31 'Code 01, voller Klotz
      10 00 17 17 17 17 14 00 'Code 02, grosses Ue
      00 16 08 04 02 01 00 00 'Code 03, Zeichen \
      00 00 00 00 00 00 00 00 'Code 04, nicht belegt
      00 00 04 14 04 00 00 00 'Code 05, Zeichen CTRL+G
      04 00 04 08 16 17 14 00 'Code 06, verkehrtes Fragezeichen
      15 16 14 17 14 01 30 00 'Code 07, Paragraph
     '17 14 17 17 31 17 17 00 'Code __, grosses Ae
     '17 14 17 17 17 17 14 00 'Code __, grosses Oe
tabend
' *** Programm-Ausgaben auf Display ***

table PRINTS
      '"Autostart V1.0"          14 Bytes  0...13
      065 117 116 111 115 116 097 114 116 122 097 104 108 058
      '"Status: "                 8 Bytes 14...21
      083 116 097 116 117 115 058 032
      'atm_hss_sv__Zyklus:       19 Bytes 22...40
      097 116 109 032 104 115 115 032 115 118
      032 032 090 121 107 108 117 115 058
      '"__* aktiv_*_"            12 Bytes 41...52
      032 032 042 032 065 075 084 073 086 032 042 032
      '"_Start-Test_"            12 Bytes 53...64
      032 083 116 097 114 116 045 084 101 115 116 032
      '">>_FEHLER_<<"            12 Bytes 65...76
      062 062 032 070 069 072 076 069 082 032 060 060
      '"--,--"                    5 Bytes 77...81
      045 045 044 045 045
      '"_VA-Zyklus__"            12 Bytes 82...93
      032 086 065 045 090 121 107 108 117 115 032 032
tabend


Passender Link: Die Locate-Funktion im kompletten Programm (nur temp. online)

 Antwort schreiben

Bisherige Antworten: