//******************************************************************
// graph.c : fichier de fonctions nécessaires à l'affichage graphique
// sur afficheur CFAG320240-FMIT de Crystalfontz
// 320 X 240 pixels
// Commande en bit banging sur les ports A et B du µC.
//******************************************************************
// Pin symbole brocheµC Function
//
// 1 Vss 0v Masse
// 2 VDD 5.0v Alimentation de la logique
// 3 V0 variable Tension de commande négative(~ -9.5v)
// 4 E PA.7 Enable de la famille 6800
// 5 R/W PA.6 Signal d'écriture de la famille 6800
// 6 A0 PA.5 R/W=0, A0=1 :Ecrit comm, A0=0 écrit data
// R/W=1, A0=1 :Lit Etat, A0=0 lit data
// 7 Data0 PB.0 Data Bus
// 8 Data1 PB.1 Data Bus
// 9 Data2 PB.2 Data Bus
// 10 Data3 PB.3 Data Bus
// 11 Data4 PB.4 Data Bus
// 12 Data5 PB.5 Data Bus
// 13 Data6 PB.6 Data Bus
// 14 Data7 PB.7 Data Bus
// 15 /CS PA.4 Chip Select, actif à l'état bas
// 16 /RES PA.3 Reset, actif à l'état bas
// 17 VEE -25v Sortie de tension négative interne
// 18 FGND Masse métallique
// 19 Non connecté
// 20 Non connecté
//-------------------------------------------------------------------
// jean Claude LUCOT le 31/07/2005
//******************************************************************
#include "graph.h"
#include <mc9s12dp256.h>
// msg1 : initialise le système
static unsigned char msg1[]= {0x30,0x87,0x07,0x27,0x39,
0xef,0x28,0x0,0xa1};
// msg2 : Scrolling
static unsigned char msg2[]= {0x0,0x0,0xef,0xb0,0x04,
0xef,0x0,0x0,0x0,0x0,0xa1};
// msg3 : Forme du curseur
static unsigned char msg3[]= {0x04,0x86,0xa1};
// msg4 : Paramètre de recouvrement
static unsigned char msg4[]= {0x01,0xa1};
// msg5 : Ecran on / off
static unsigned char msg5[]= {0x16,0xa1};
// msg6 : curseur sur page graphique
static unsigned char msg6[]= {0xb0,0x04,0xa1};
// msg7 : curseur sur page texte L=49 C=128
static unsigned char msg7[]= {0x31,0x02,0xa1};
// msg 8 : curseur sur page texte L=89 C=128
static unsigned char msg8[]= {0x59,0x02,0xa1};
// msg9 : curseur sur page texte L=129 C=128
static unsigned char msg9[]= {0x81,0x02,0xa1};
// msg10 : curseur sur page texte L=169 C=128
static unsigned char msg10[]= {0xa9,0x02,0xa1};
// msg11 : efface la zone de texte
static unsigned char msg11[]=
{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
// 1200 caractères 0x20
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa1};
// msg12 : fin de tableau
static unsigned char msg12[]= {0xa1};
// msg13 : curseur en position HOME
static unsigned char msg13[]= {0x0,0x0,0xa1};
// msg14 : 1ère ligne texte
static unsigned char msg14[]= {'E','S','S','A','I',' ','L','C','D',' ','G','R',
'A','P','H','I','Q','U','E',0xa1};
// msg15 : 2ème ligne texte
static unsigned char msg15[]= {'p','a','r',' ','J','e','a','n',' ','C','l','a',
'u','d','e',' ','L','U','C','O','T',0xa1};
// msg16 : 3ème ligne texte
static unsigned char msg16[]= {'L','A',' ','M','I','N','A','U','D','E','R','I',
'E',0xa1};
// msg17 : 4ème ligne texte
static unsigned char msg17[]= {'V','i','g','n','o','u','x',' ','s','u','r',' ',
'B','a','r','a','n','g','e','o','n',0xa1};
// titre : Image transmise
static unsigned char titre[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
// etc.,etc.
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xa1};
void glcd_Init(void)
{
DDRA |= 0xF8; // Bit 3 à 7 du Port A en sortie
DDRB = 0xFF; // Port B en sortie
send_comm(0x40); // Set le système
send_mess_glcd(msg1); // paramètres d'initialisation
send_comm(0x44);
send_mess_glcd(msg2); // paramètre scrolling
send_comm(0x5d);
send_mess_glcd(msg3); // forme du curseur
send_comm(0x4c); // direction de déplacement du curseur
}
void main(void)
{
glcd_Init();
send_comm(0x5a); // hauteur
send_mess_glcd(titre); // envoie l'image
send_comm(0x5b); // surimpression
send_mess_glcd(msg4); // paramètres de surimpression
send_comm(0x59); // Ecran on / off
send_mess_glcd(msg5); // paramètres écran
clrtextram(); // efface mémoire texte
send_comm(0x46); // positionne curseur
send_mess_glcd(msg6); // paramètres du curseur
send_comm(0x42); // mwrite
send_mess_glcd(msg12);
send_comm(0x46); // positionne curseur
send_mess_glcd(msg7); // paramètres du curseur
send_comm(0x42); // mwrite
send_mess_glcd(msg14);
send_comm(0x46); // positionne curseur
send_mess_glcd(msg8); // paramètres du curseur
send_comm(0x42); // mwrite
send_mess_glcd(msg15);
send_comm(0x46); // positionne curseur
send_mess_glcd(msg9); // paramètres du curseur
send_comm(0x42); // mwrite
send_mess_glcd(msg16);
send_comm(0x46); // positionne curseur
send_mess_glcd(msg10); // paramètres du curseur
send_comm(0x42); // mwrite
send_mess_glcd(msg17);
while(1)
{
;
}
}
void send_comm(unsigned char octet)
{
PORTA |= 0xf8; // A0 à 1 -> commande
PORTB = octet;
PORTA &= 0xef; // CS à 0
PORTA &= 0xaf; // R/W à 0
PORTA |= 0xe8;
PORTA |= 0xf8;
}
void send_data(unsigned char octet)
{
PORTA &= 0xd8; // A0 à 0 -> donnée
PORTB = octet;
PORTA &= 0xc8; // CS à 0
PORTA &= 0x88; // R/W à 0
PORTA |= 0xc8;
PORTA |= 0xd8;
}
void send_mess_glcd(unsigned char *message)
{
char car = 0;
while(message[car] != 0xa1)
{
send_data(message[car]);
car++;
}
}
void clrtextram(void)
{
send_comm(0x46);
send_mess_glcd(msg13);
send_comm(0x42);
send_mess_glcd(msg11);
send_comm(0x46);
send_mess_glcd(msg6);
}