File "lcd_ancien.c"
Full Path: /home/analogde/www/php/Sources/lcd_ancien.c
File size: 3.34 KB
MIME-type: text/x-c
Charset: 8 bit
//----------------------------------------------------------------------
// LCD.C
// Ce programme realise la fonction "print" sur un ecran LCD en
// mode 8-bits d'une chaine de caractere (sur 1 ligne)
//
// Auteur: Zlati Lambov
//----------------------------------------------------------------------
#include <string.h>
//Ce fichier contient des declarations pour les registres du 68HC908GP32.
#include <iogp32.h>
//Le fichier "pll_init.c" se trouve dans le paquet des fichiers du compilateur.
#include "pll_init.c"
// definition des fonctions:
void delay_5ms(void); // programmation d'un delay de 5 ms.
void enable_data(void); // commande l'entree de validation de l'afficheur(E)
void initlcd(void); // initialisation de l'ecran.
char printlcd(char *p); // Affichage d'une chaine de caractere.
// ************************
// ** Fonction principal **
// ************************
void main (void)
{
CONFIG1=0x01; //watchdog interdit.
DDRA=0xff; //PTA en sortie.
DDRC=0xff; //PTC en sortie.
PTC=0x00;
pll_init(2); //determine la frequence du bus
// 1 32.768 kHz
// 2 2.4576 MHz
// 3 4.9152 MHz
// 4 7.3728 MHz
initlcd();
PTA=printlcd("1X16 CARACTERES");
//La chaine de caractere entre les parentheses
while(1); //est affichee sur l'ecran(16 symboles au maximum).
}
void delay_5ms(void) // 15*(255*3) =11475 Cycles
{ // Dans le cas de 2.4576 MHz
// le delay est presque 5ms.
// __r0 est un "pseudo register"
// defini par le compilateur.
asm("\
mov #15,*__r0 \n\
psha \n\
del: lda #255 \n\
decr:dbnza decr \n\
dbnz *__r0,del \n\
pula \n\
");
}
void enable_data(void)
{
PTC|=0x10; // E=1;(PTC bit 4).
PTC&=~0x10; // E=0;
}
void initlcd(void)
{
char init[7]={0x38 ,0x38, 0x38, 0x0C ,0x06 ,0x01};
char i;
PTC=0x00; // R/W=0;(0 = ecriture ,1 = lecture).
// RS=0; (0 = instruction ,1 = caractere).
for(i=0;i<6;i++) // 0x38-trois fois-mode 8 bits ,2 lignes validee.
{ // 0x0C-le curseur ne clignote pas.
PTA=init[i];
enable_data(); // 0x06-l'affichage hors fonction.
delay_5ms(); // 0x01-met le curseur en position "home",l'affichage
} // est remis a sa position d'origine.
PTC|=0x04; // RS=1(PTC bit 2)-operations avec des donnees.
}
char printlcd(char *p) // Pointeur vers la chaine de caractere afficher.
{
char i;
char string[17]; //La taille est fixe 17 pour avoir 16 caracteres
strcpy(string,p); //plus le caractere nul de fin de chaine.
for(i=0;i<string[i];i++)
{ //La chaine de caractere afficher est copiee
PTA=string[i]; //dans le tableau "string"et puis element par
enable_data(); //element vers l'afficheur(en utilisant PTA).
delay_5ms();
}
return PTA;
}