|
|
G240uhr.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. |
|
|
|
|
|
|
|
|
|
|
|
|
// 240uhr.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()
// DOS_zeit()
// Holt die Zeit der DOS-Uhr im RTOS Betriebssystem und wandelt
// die Angaben zu Stunde (CH), Minute (CL) und Sekunde (DH) in
// einen nullterminierten String, bei dem die Angaben
// durch das Zeichen ':' getrennt sind. Der Buffer 'zeit' zur
// Ablage des Strings muss mit 9 Speicherzellen übergeben werden.
// Die Funktion gibt die Sekundenangabe zurück.
char DOS_zeit (char far* zeit)
{
asm{ mov AH, 2Ch // SoftINT 21h, Funktion 2Ch
int 21h // DOS_Uhr, Zeit holen
les DI,zeit // Zeiger auf Zeitstring
mov BL,10
mov AH,0
mov AL,CH // Stunde in CH
div BL
add AL,30h
mov ES:[DI+0],AL
add AH,30h
mov ES:[DI+1],AH // Stunde zum String
mov AH,':'
mov ES:[DI+2],AH // : zum String
mov AH,0
mov AL,CL // Minute in CL
div BL
add AL,30h
mov ES:[DI+3], AL
add AH,30h
mov ES:[DI+4],AH // Minute zum String
mov AH,':'
mov ES:[DI+5],AH // : zum String
mov AH,0
mov AL,DH // Sekunde in DH
div BL
add AL,30h
mov ES:[DI+6], AL
add AH,30h
mov ES:[DI+7],AH // Sekunde zum String
mov AH,0
mov ES:[DI+8],AH // Nullterminierung
}
return(_DH);
}
// DOS_datum()
// Holt das Datum der DOS-Uhr im RTOS Betriebssystem und wandelt
// die Angaben zu Tag (DL), Minute (DH) und Jahr (CX) in
// einen nullterminierten String, bei dem die Angaben
// durch das Zeichen '.' getrennt sind. Der Buffer 'datum' zur
// Ablage des Strings muss mit 14 Speicherzellen übergeben werden.
void DOS_datum(char far* datum)
{
char* wotag[]= {"So","Mo","Di","Mi","Do","Fr","Sa","So"};
char* tag;
char n=0;
asm{ mov AH, 2Ah // SoftINT 21h, Funktion 2Ah
int 21h // DOS-Uhr, Datum holen
mov n, AL // Kennummer für Tagesnamen
pusha }
tag=wotag[n]; // tag= adresse für Tagesnamen
asm{ popa
les DI,datum // Zeiger auf String
mov BX, tag
mov AL, [BX+0] // 1. Zeichen Tagesname
mov ES:[DI+0],AL
mov AL, [BX+1]
mov ES:[DI+1],AL // 2.Zeichen Tagesname
mov AL, ' '
mov ES:[DI+2],AL // Freizeichen
mov BL,10
mov AH,0
mov AL,DL // Tag in DL
div BL
add AL,30h
mov ES:[DI+3],AL
add AH,30h
mov ES:[DI+4],AH // Tag zum String
mov AH,'.'
mov ES:[DI+5],AH // . zum String
mov AH,0
mov AL,DH // Monat in DH
div BL
add AL,30h
mov ES:[DI+6], AL
add AH,30h
mov ES:[DI+7],AH // Monat zum String
mov AH,'.'
mov ES:[DI+8],AH // . zum String
mov DX,0
mov AX,CX // Jahr in CX
mov BX, 1000
div BX // Jahr / 1000 erg: AX
add AL,30h
mov ES:[DI+9], AL
mov AX,DX
mov BL,100
div BL // Jahr / 100
add AL,30h
mov ES:[DI+10], AL
mov AL,AH
mov AH,0
mov BL,10
div BL // Jahr / 10
add AL,30h
mov ES:[DI+11], AL
add AH,30h
mov ES:[DI+12],AH // Jahr zum String
mov AH,0
mov ES:[DI+13],AH // Nullterminierung
}
}
// 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)
{
char datum[14]=""; // Buffer für Datumstring
char zeit[9]=""; // Buffer für Zeitstring
char c=0; // Zeichen vom Touch-Taster
char sek=0, oldsek=1; // gelesene Sekunde
char dimm=20; // Hellzeit in Sekunden
// Meldungen die zum Terminalbildschirm gesendet werden
printf("\r\n [Start] .. EAeDIP240 Uhr");
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.
G240reset();
F240tsmfont(2,2); // Tast/Schalt.font u. Tastmenü
F240frame(11); // normale Touchfeldumrandung
F240defbut('T',120, 109, 180, 125, 'L' ,0, 'C', "Licht an");
F240frame(12); // invertierte Touchfeld-Umrandung
F240defbut('T',187, 109, 237, 125, ESC ,0, 'C', "Ende");
while(1){
c=isTouch('T'); // Sendebuf. der Anzeige abfragen
switch(c){
case 'L': dimm=20;
G240dimm(255); // Anzeige auf 100% Leuchtkraft
break;
case ESC: goto ende; // Programmende
}
if(sek==0){ // jeden Minuteanfang
DOS_datum(datum); // Datum holen
G240txtfont(4); // Text Zeichensatz 4 einstellen
G240txtout(46, 15,'C',datum); // Datum ausgeben
G240txtfont(6); // Text Zeichensatz 6 einstellen
}
if(sek!=oldsek){ // jede neue Sekunde
G240txtout(164,5,'C', zeit); // Zeit ausgeben
oldsek=sek;
if(dimm){dimm--; // Hellzeit bis auf 0 vermindern
if(!dimm) G240dimm(5); // Anzeige auf 5% Leuchtkraft
}
}
sek=DOS_zeit(zeit); // DOS-Zeit lesen
api_sleep(50); // 50ms warten
}
// ---------------------------------------------------------------
ende:
F240clrbut(0,1); // alle Touchber.unsichtbar löschen
G240dimm(5); // Anzeige auf 5% Leuchtkraft
dip240release(); // Schnittstelle abmelden
printf("\r\n [Ende] .. EAeDIP240 Uhr\r\n");
setStdio(3);
}
|
|
|
|
|
|
|