|
|
G240mode.cpp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. serielle RS 232 Schnittstelle |
|
|
|
Protokoll- und Schnittstellentreiber für RS232 Schnittstelle des Touchdisplay. Diese Datei lädt die serial.h Includedatei. |
|
|
|
|
|
serial.h Treiber für die RS232-Schnittstellen am IPC@CHIP Webserver |
|
|
|
|
.. I2C-Bus |
|
|
|
Protokoll- und Schnittstellentreiber für die I2C-Bus Schnittstelle des Touchdisplay. Diese Datei lädt die i2c.h Includedatei. |
|
|
|
|
|
i2c.h Treiber für den I2C-Bus am IPC@CHIP Webserver |
|
|
|
|
.. SPI-Bus |
|
|
|
Protokoll- und Schnittstellentreiber für die SPI-Bus Schnittstelle des Touchdisplay. Diese Datei lädt die spi.h Includedatei. |
|
|
|
|
|
spi.h Treiber für den SPI-Bus am IPC@CHIP Webserver |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. Funktionensammlung für Grafikdisplay und Touchfolie |
|
|
|
Funktionen zur Ansteuerung der Grafikeigenschaften der EA eDIP240 Anzeige. Diese Programme wirken über die zuvor aufgeführten Treibern der Schnittstellen. |
|
|
|
|
Funktionen zur Ansteuerung der Touchfolie der EA eDIP240 Anzeige. Diese Programme wirken über die zuvor aufgeführten Treibern der Schnittstellen. |
|
|
|
|
|
|
|
|
|
|
|
|
// g240mode.cpp
// ------------ Version 10.04.2007
// Borland IDE C++ 3.1 oder 5.02
// Model: SMALL
// Char: unsigned
// bearbeitet: www.GoBlack.de, D.Schwarzer
// ----------------------------------------------------------------
// Testprogramm für die Grafikanzeige und die Touchfolie des
// TouchDisplays EA eDIP240-7 ..
// .. an einer der Schnittstellen: I2C-Bus| serielle Schnittstelle|
// SPI-Bus
// Die Schnittstellentreiber für das TouchDisplay befinden sich in
// einer der Include-Dateien 'dip240x.h'. Eine dieser Dateien muss
// aktiviert sein.
#include "dip240s.h" // RS232-Schnittst, (benöt serial.h)
//#include "dip240i.h" // I2C-Bus, (benötigt i2c.h)
//#include "dip240p.h" // SPI-Bus, (benötigt spi.h)
// Die Steuerfunktionen für die Anzeige und die Touchfolie befinden
// sich in den nachfolgenden Include-Dateien ..
#include "Fdip240.h" // Steuerfkt. für die Touchfolie
#include "Gdip240.h" // Steuerfkt. für die Grafikanzeige
#include <stdio.h> // C-Bibliothek für printf()
#include <stdlib> // randomize() und random()
// GoBlack()
// gibt das Normalmakro 0 aus und wartet 5Sekunden. Kehrt dann
// automatisch zum Hauptmenü zurück. Das Normalmakro 0 welches
// auch als ResetMakro benutzt wird, ruft zudem das Makro 1 auf
// Beide müssen zuvor über die Kit-Editor IDE geladen worden sein
void GoBlack(void)
{
G240reset(); // Anzeige zurücksetzen
G240beep(2); // Pieper 2/10s ein
G240makro('N',0); // Normal-Macro 0 starten
// (wenn vorhanden)
api_sleep(5000); // 5s warten
}
// textraus()
// einfache Textausgabe bei 0° und bei 90°, sowie Test der Sequenz
// warte t/10 Sekunden, die bis 37/10 Sekunden fehlerfrei operiert
// Die Funktion beendet sich nach 3,7 Sekunden
void textraus(void)
{
char txt[]= "Text aus laufendem Programm"
"|---------------------------"
"|Dieser Text wurde unter ei-"
"|nem Winkel von ~ 0 Grad ~"
"|ausgegeben"
"|Es können mit G240txtout()"
"|max.@ 255 Zeichen @ausge-"
"|geben werden."
"|"
"| Umlaute: ÄÖÜäöüß°"
"|..........................";
char txt90[]= "Dieser Text wurde um"
"|90° gedreht. Die Ko-"
"|ordinat. entsprechen"
"|weiterhin denen bei"
"|0° .. oben,rechts"
"|ist nun bei 0,127";
F240clrbut(0,1); // alle Touchber.unsichtbar löschen
G240reset(); // Anzeige reset
G240txtfont(2); // Font 2 aktiviern
G240txtspc(3); // 3 Pixel Abstand plus
G240txtout(2,0,'L',txt); // Text linksbündig ausgeben
G240txtarc(1); // Text um 90° drehen
G240txtspc(0); // 0 Pixel Abstand plus
G240txtout(180,64,'C',txt90); // Text zentriert
G240wait(30); // 30*1/10s= 3s warten
}
// picture()
// Es wird ein kleines Bild im BLH-Format zur Anzeige gesendet und
// an der Position (x,y) angezeigt
void picture(char x, char y)
{
char pic[] ={ // Daten des Bildes im BLH-Format
0x12, 0x14, 0xFF, 0xFF, 0xC0, 0x80, 0x00, 0x40,
0x87, 0xE0, 0x40, 0x87, 0xF8, 0x40, 0x8F, 0xFC, 0x40,
0x9F, 0x3C, 0x40, 0x9F, 0x9E, 0x40, 0x9C, 0x1E, 0x40,
0x9F, 0x7F, 0x40, 0xBF, 0x6F, 0x40, 0xB8, 0x0F, 0x40,
0xBC, 0xCF, 0x40, 0x9C, 0xEF, 0x40, 0x8F, 0xFE, 0x40,
0x8F, 0x1E, 0x40, 0x87, 0xFE, 0x40, 0x87, 0xFC, 0x40,
0x9E, 0x7F, 0x40, 0x80, 0x00, 0x40, 0xFF, 0xFF, 0xC0
};
G240piczoom(1,1); // Bildzoom auf zx=1, zy=1
G240picmode(4); // Bildhintergrund löschen
G240upldpic(x, y, pic); // Bild bei x|y zeichnen
}
// muster()
// stellt die anzeigeninternen Muster 2-15 dar. Einmal Fläche ohne
// Rand typ='F' und einmal als Fläche mit Rand (Bereich) typ='B'
void muster(void)
{
G240clear(); // Anzeige löschen
F240clrbut(0,1); // alle Touchber.unsichtbar löschen
G240box('F', 0, 0, 30, 50, 2);
G240box('F', 35, 0, 65, 50, 3);
G240box('F', 70, 0, 100, 50, 4);
G240box('F',105, 0, 135, 50, 5);
G240box('F',140, 0, 170, 50, 6);
G240box('F',175, 0, 205, 50, 7);
G240box('F',210, 0, 240, 50, 8);
G240box('B', 0, 55, 30,110, 9);
G240box('B', 35, 55, 65,110,10);
G240box('B', 70, 55, 100,110,11);
G240box('B',105, 55, 135,110,12);
G240box('B',140, 55, 170,110,13);
G240box('B',175, 55, 205,110,14);
G240box('B',210, 55, 240,110,15);
F240defbut('T',146, 109, 237, 125, ESC ,0, 'C', "Ende");
waitTouch('T');
}
// bargraph()
// Es werden zwei Bargraphen definiert, von denen einer die Werte
// val ausgibt und der zweite als Touch-Eingabebargraph definiert
// ist. Er kann durch Berühren verändert werden. Die von ihm
// entgegengenommenen Werte werden nicht benutzt
// Über eine Touchtaste kann die Funktion beendet werden.
void bargraph(void)
{
char n=0, m=0;
char val[]={5,7,10,40,60,55,50,47,80,33,12,7,6,5,4,3,3,5,0,4,
7,15,39,45,55,80,87,90,100,115,120,128,90,60,75,
80,77,72,71,70,74,60,51,40,45,55,30,22,17,6,5 };
G240clear(); // Anzeige löschen
F240clrbut(0,1); // alle Touchber.unsichtbar löschen
G240bar('O',1, 20, 0, 35, 127, 0, 127, 3, 5);
G240bar('O',2, 50, 0, 70, 127, 0, 127, 1, 1);
G240barval(2,40);
F240defbar(2,0);
F240defbut('T',146, 109, 237, 125, ESC ,0, 'C', "Ende");
while(1){
if(n>=51) n=0;
G240barval(1,val[n]);
n++;
for(m=0; m<5;m++){
if(isTouch('T')) return;
api_sleep(5);
}
}
}
// zeichnen()
// es wird ein umrandetes Eingabefeld definiert in dem manuell
// gezeichnet werden kann. Über eine Touchtaste kann die Funktion
// beendet werden. Eine zweite Touch Taste kann die Zeichnung
// löschen. Mit der Taste Save wird das gezeichnete Bild zum
// Steuerrechner übertragen und hernach von diesem aus, nach 2s,
// automatisch wieder zurückgesendet und angezeigt.
void zeichnen (void)
{
char picbuf[3842]=""; // Buffer für kompletten Bildschirm
char c=0;
start:
G240clear(); // Anzeige löschen
F240clrbut(0,1); // alle Touchber.unsichtbar löschen
G240txtout(2,0,'L',"malen auf der umrandeten Fläche ..");
G240draw('R',0,10,239,105);
F240defdraw(0,10,239,105,1);
F240frame(11);
F240defbut('T', 90, 109, 144, 125, 'L' ,0, 'C', "löschen");
F240defbut('T', 32, 109, 86, 125, 'S' ,0, 'C', "save");
F240frame(12);
F240defbut('T',148, 109, 237, 125, ESC ,0, 'C', "Ende");
wait:
c=waitTouch('T');
if(c=='L') goto start;
if(c=='S'){
getBLHpic(0,10,239,105,picbuf); // Bild von Anzeige holen
G240txtout(2,0,'L',"Bild wieder zurückspeichern ......");
G240box('B',0,10,239,105,4);
api_sleep(2000); // warten
G240upldpic(0,10, picbuf); // Bild bei x|y wieder zeichnen
goto wait;
}
}
// pingpong()
// Ein mit invertiertem Bereich überlagerter Rahmen wird zum
// Reflektionsrand eines um den Faktor 5 vergrösserten Punktes.
// Die Zufallsfunktionen der C-Bibliothek verändern die
// Reflektionswinkel, so dass der Flug des Balls etwas unvorher-
// sehbarer wird.
// Bemerkenswert ist die schlechte Anzeigequalität des 'Balls'
// bei kurzen Ausgabezeiten.
// Über eine Touchtaste kann die Funktion beendet werden.
void pingpong(void)
{
char n=0;
unsigned char xmi=40, ymi=20, xma=177, yma=87;
unsigned char xb=50, yb=50;
signed char dx=-3, dy=-3;
F240clrbut(0,1); // alle Touchber.unsichtbar löschen
G240reset(); // Anzeige zurücksetzen
randomize(); // Zufallszahlengeneratior init
xb=45+random(127); // xb-Anfang 45-172
yb=25+random( 57); // yb-Anfang 25- 82
F240defbut('T',146, 109, 237, 125, ESC ,0, 'C', "Ende");
G240drwmode(1); // zeichnen ein
G240drwzoom(5,5); // linienstärke 5,5
G240draw('R',xmi,ymi,xma,yma); // Rechteck zeichnen
G240fill('I',xmi,ymi,xma,yma); // invertierter Bereich
G240draw('P',xb,yb,0,0); // ersten Punkt zeichnen
// Bewegungssteuerung des 'Balls'
while(1){
G240drwmode(1); // zeichnen aus
G240draw('P',xb,yb,0,0); // Punkt löschen
xb+=dx; yb+=dy;
if(xb<=(xmi+5)){xb=xmi+3+2; dx= random(3)+5;}
if(xb>=(xma-5)){xb=xma-3-2; dx= random(3)-8;}
if(yb<=(ymi+5)){yb=ymi+3+2; dy= random(5)+2;}
if(yb>=(yma-5)){yb=yma-3-2; dy= random(5)-6;}
G240drwmode(3); // zeichnen ein
G240draw('P',xb,yb,0,0); // Punkt zeichnen
for(n=0; n<5; n++){
if(isTouch('T')) return; // Touch-Taste abfragen
api_sleep(5); // und 5x5ms warten
}
}
}
// touchmenü()
// Funktion erzeugt zwei Touch-Menüs und hinterlegt diese mit einem
// BLH-Bild, das in der Art von Kacheln angeordnet wird. Die Menü-
// einträge weren abgefragt und der von ihnen zurückgegebene Code
// auf dem Terminalbildschirm angezeigt.
// zwei Codes besitzen Funktionen ..
// Version: der Versionstring der Anzeige wird ausgegeben
// Quit: das Unterprogramm wird verlassen
void touchmenu (void)
{
char xp=20, yp=22, x=0, y=17;
F240clrbut(0,1); // alle Touchber.unsichtbar löschen
G240reset();
// Kachelbild als Hintergrund. Beispiel für das Senden eines BLH-
// Bildes. Das Bild ist in der Funktion picture() definiert.
while(y<=127-yp){
for(x=1; x<=221; x=x+xp) picture(x,y);
y=y+yp;
}
// Aufbau zweier Touch-Menüs, mit den Kennummern 0x10 und 0x20,die
// bei der Betätigung piepen. Die Rückgabewerte der Menüzeilen
// sind in den Zeilen angegeben.
G240drwzoom(1,1); // Grafikzoom auf zx=1, zy=1
F240tsmfont(2,2); // Font Tast/Schalt, Font Tastmenü
F240tsmspc(1,4); // zusätzliche Pixel zw.Zeilen
F240beep(1); // beep bei einem Tastendruck ein
F240frame(1); // benutzte Touchfeld-Umrandung
F240defbut('M', 1, 0, 78, 14, 0, 0, 0x10,
"UCMenü 1-h|" // U-Menü unten, C-Text mittig
"Eintrag 10h|"
"Eintrag 11h|"
"Eintrag 12h|"
"Eintrag 13h|"
"Eintrag 14h ");
F240defbut('M', 81, 0, 159, 14, 0, 0, 0x20,
"UCMenü 2-h|" // U-Menü unten, C-Text mittig
"Eintrag 20h|"
"Version 21h|"
"Quit 22h ");
// warten auf Eingaben von den Menüs
menuloop:
printf("\r\nCode: %0.2X-%0.2X-%0.2X-%0.2X-%0.2X\r\n",
dipin[0],dipin[1],dipin[2],dipin[3],dipin[4]);
switch (waitTouch('M')){
case 0x22: goto tmende;
case 0x21: G240version();
G240txtout(120,115,'C',version);
default: goto menuloop;
}
tmende:
F240beep(0); // beep bei einem Tastendruck aus
}
// main()
// Dieses Testprogramm initialisiert die benutzte Schnittstelle,
// (RS232, I2C-Bus oder SPI-Bus) und nimmt lesend und schreibend
// Kontakt zu einem EA eDIP240-7 Touchdisplay im Grafik und im
// Touchmodus auf.
// Es werden zur Eingabe einige Touch-Taster benutzt.
void main(void)
{
// Meldungen die zum Terminalbildschirm gesendet werden
printf("\r\n [Start] .. EAeDIP240 GrafikModus");
printf("\r\n ----------------------------------\r\n");
setStdio(2);
// EAeDIP240-Display bezüglich der verwendeten Schnittstelle
// initialisieren (in dip240x.h)
if(!dip240init()){
printf("\r\n .. Anzeige nicht erreicht"); goto ende;
}
// Sendebuffer des TouchDisplay durch lesen ohne nachfolgende
// Verwertung leeren. Normalerweise sollte der Buffer leer sein.
isTouch('T'); // Sendebuffer d.Anzeige lesen
// Lesetyp, hier 'T' ist egal.
// ---------------------------------------------------------------
// 90° gedrehte Internetadresse von GoBlack ausgeben und ein
// Menü aus Tasten aufbauen. Aus diesem Menü wird in die obigen
// Funktionen verzweigt.
start:
F240reset(); // Touchfolie zurücksetzen
G240reset(); // Anzeige zurücksetzen
// rechter Seitentext mit Bild, 90° gedreht
G240txtarc(1); // 90°Winkel bei Textausgabe
G240txtfont(4); // Textfont 4 aktiviern
G240txtout(227,116,'L',"www.");
G240picarc(1); // 90°Winkel bei Bildausgabe
G240intpic(215,25,1); // internes Bild 1 darstellen
G240txtout(227, 23,'L',".de");
// Menü mit Touch-Tastern darstellen, zunächst die Eigenschaften
// setzen, dann Tasten dfinieren
G240picarc(0); // 0° Winkel bei Bildasugabe
G240txtarc(0); // 0° Winkel bei Textausgabe
G240txtfont(2); // Textfont aktiviern
F240tsmfont(2,2); // Tast/Schalt.font u. Tastmenü
F240frame(11); // normale Touchfeld-Umrandung
F240defbut('T', 5, 10, 95, 26, '1', 0, 'C', "TextRaus");
F240defbut('T', 5, 30, 95, 46, '2', 0, 'C', "Muster");
F240defbut('T', 5, 50, 95, 66, '3', 0, 'C', "Bargraph");
F240defbut('T', 5, 80, 95, 96, '4', 0, 'C', "PingPong");
F240defbut('T', 5, 100, 95, 116, '5', 0, 'C', "TouchMenü");
F240defbut('T',105, 50, 195, 66, '6', 0, 'C', "Malen");
F240defbut('T',105, 80, 195, 96, '7', 0, 'C', "GoBlack");
F240frame(12); // invertierte Touchfeld-Umrandung
F240defbut('T',105, 100, 195, 116, ESC ,0, 'C', "Pgm-Ende");
// warten auf Eingaben von den Drucktasten und Verzweigungen
loop:
switch (waitTouch('T')){
case '1': textraus(); goto start;
case '2': muster(); goto start;
case '3': bargraph(); goto start;
case '4': pingpong(); goto start;
case '5': touchmenu(); goto start;
case '6': zeichnen(); goto start;
case '7': GoBlack(); goto start;
case ESC: goto ende;
default: goto loop;
}
// ---------------------------------------------------------------
ende:
G240dimm(5); // Anzeige auf 5% Leuchtkraft
dip240release(); // Schnittstelle abmelden
printf("\r\n [Ende] .. EAeDIP240 GrafikModus\r\n");
setStdio(3);
}
|
|
.de