// ********************************************************* // ********************************************************* // **** **** // **** Routinen zur Ansteuerung des Nokia 3310 Displ. **** // **** mit dem PCD8544 Controller **** // **** **** // ********************************************************* // **** **** // **** Funktionen: **** // **** **** // **** void InitDisplay() **** // **** - initialisiert das Display **** // **** **** // **** void LCDSetCharCursor(int8 X,Y) **** // **** - setzt den Cursor für Zeichenausgaben **** // **** **** // **** void LCDSetGraficCursor(int8 X,Y) **** // **** - setzt den Cursor für Grafikausgaben **** // **** **** // **** void LCDCLS() **** // **** - löscht die Displayanzeige **** // **** **** // **** void SetLCDMode(int8 M) **** // **** - M=0 --> normale Anzeige **** // **** - M!=0 --> Anzeige Invers **** // **** **** // **** void LCDPrintChr(char Chr) **** // **** - gibt das Zeichen Chr an akt. Cursorpos. aus **** // **** **** // **** void LCDPrintStr(char* Text,int8 Count) **** // **** - gibt den String Text an akt. Cursorpos. aus **** **** // **** **** // **** void SendLCDData(char* LCDData, int8 Anzahl) **** // **** - gibt den Inhalt des Puffers LCDData als **** // **** Grafikdaten an akt. Cursoros. aus **** // **** **** // ********************************************************* // ********************************************************* #include "3310.h" // Byte zum Diplay senden (Software SPI-Interface) void SPISendByte(int8 SByte) { #bit SendBit=SByte.7 int8 i; for (i=0;i<=7;++i) { _SDIN=SendBit; // Bit 7 ausgeben _SCLK=1; // und ins Display "Clocken" _SCLK=0; SByte<<=1; } } // Datenpuffer zum Display senden void SPISendBuffer(char* Puffer,int8 Anzahl) { int8 i; _SCLK=0, // Clock Low _SCE=0; // Enable Display for (i=0;i normal //**** M!=0 --> invertieren void SetLCDMode(int8 M) { char Data[2]; if (M!=0) Data[0]=LCDInversMode; else Data[0]=LCDNormalMode; SendLCDCommand(Data,1); } //**** Zeichensatz-Bitmuster aus Tabelle lesen //**** notwendig, da Compiler nur Arrays (Tabellen) mit 256 Elementen unterstützt char GetAsciiByte(Int8 Code,i) { int8 y,z; if (Code>MaxASCIICode) // größer als Maximalanzahl? { return 0; break; } z=(code+2)/51; // Tabelle bestimmen y=code%51; // Divissionrest switch(z) { case 0: return CharacterTable0[y][i]; case 1: return CharacterTable1[y][i]; case 2: return CharacterTable2[y][i]; case 3: return CharacterTable3[y][i]; } } //**** Zeichen auf Display ausgeben //**** //**** GetASCIIByte muss implementiert werden, da der CSS-Compiler nur Arrays mit //**** bis zu 256 Elementen unterstützt. //**** Unterstützt der Compiler größere Arrays (Tabellen), kann der Zugriff direkt //**** mit //**** DBuff[i]=CharacterTable[Chr][i]; //**** an statt //**** DBuff[i]=GetAsciiByte(Chr,i); //**** erfolgen void LCDPrintChr(char Chr) { char i; char DBuff[6]; // Sendepuffer zum Display for (i=0;i<=4;++i) // jedes Zeichen besteht aus 5 Byte DBuff[i]=GetAsciiByte(Chr,i); // aktuelles Bitmuster aus Tabelle DBuff[5]=0; // zwischen Zeichen 1 Reihe frei SendLCDData(DBuff,6); // 6 Datenbyte an Display } //**** String auf LCD ausgeben //**** Text enthält den auszugebenden String //**** Count enthält die Anzahl auszugebender Zeichen void LCDPrintStr(char* Text,int8 Count) { char i; for (i=0;i