File "afiicheur_LCD._c"
Full Path: /home/analogde/www/php/Sources/afiicheur_LCD._c
File size: 8.25 KB
MIME-type: text/x-c
Charset: 8 bit
#define IRWRIN *(unsigned char volatile*)(_IO_BASE+0x60)
#define DR_WRITIN *(unsigned char volatile*)(_IO_BASE+0x61)
#define right 1
#define left 0
#define LIGNE_1 0x80 // position de la ligne 1
#define LIGNE_2 0xC0 // position de la ligne 2
#define LIGNE_3 0x94 // position de la ligne 3
#define LIGNE_4 0xD4 // position de la ligne 4
// I/O Port Addresses
#define _LCD_BASE 0x4000
#define LCDcmmd *(unsigned char volatile *)(_LCD_BASE + 0x00)
#define LCDdata *(unsigned char volatile *)(_LCD_BASE + 0x01)
void InitLCD()
#define LCD_CMD *(unsigned char *)(_IO_BASE + 0xA5F0)
#define LCD_DAT *(unsigned char *)(_IO_BASE + 0xA5F1)
#define AUX_A *(unsigned char *)(_IO_BASE + 0xA5F4)
#define AUX_C *(unsigned char *)(_IO_BASE + 0xA5F6)
#define AUX_CON *(unsigned char *)(_IO_BASE + 0xA5F7)
/*
* Commands that can be sent to the LCD
*/
#define LCD_CLEAR 0x01
#define LCD_HOME 0x02
#define LCD_ENTRY_MODE 0x04
#define LCD_ENTRY_CURSOR_RIGHT 0x02
#define LCD_ENTRY_DISPLAY_SCROLL 0x01
#define LCD_CTRL_ON 0x0C
#define LCD_CTRL_CURSOR 0x0A
#define LCD_CTRL_BLINK 0x09
#define LCD_SCROLL_CURSOR 0x10
#define LCD_SCROLL_DISPLAY 0x18
#define LCD_SCROLL_RIGHT 0x04
#define LCD_SCROLL_LEFT 0x00 /* for completeness */
#define LCD_FCN_8BIT 0x30
#define LCD_FCN_4BIT 0x20
#define LCD_FCN_DUTY 0x08
#define LCD_FCN_BIG 0x04
#define LCD_CHAR_ADDR 0x40
#define LCD_CHAR_MASK 0x3F
#define LCD_DISP_ADDR 0x80
#define LCD_DISP_MASK 0x7F
#define LCD_16X1 0
#define LCD_16X2 1
#define LCD_20X1 2
#define LCD_20X2 3
#define LCD_20X4 4
#define LCD_40X2 5
// Passage en mode 4 bits $20
// 8 bits
// Effacement $01
// Retour au dbut de ligne $02
// Pas de curseur $0C
// Curseur se dplace vers la droite $06
// Passage en ligne suivante $C0
// Retour en premire ligne $80
// Curseur clignotant 0F
void lcd_initialise(void);
//void rtn_home(void);
//void lcd_on(void);
//void lcd_off(void);
//void lcd_shift(char nb_sh);
//void lcdwait(int cnt);
//void status(void);
//void lcd_cls(void);
//void curs_on(void);
//void curs_off(void);
//char getkey(void);
void lcd_initialise(void)
{
IRWRIN=0x38; /* mode 8 bits */
lcd_tempo(3);
IRWRIN=0x06; /* mode */
lcd_efface(); /* efface tout l'afficheur */
retour_chariot();
}
void retour_chariot(void)
{
status();
IRWRIN=0x02;
}
void
lcd_on(void)
{
status();
IRWRIN=0x0C; /* disp on */
}
void
lcd_off(void)
{
status();
IRWRIN=0xB; /* disp off */
}
void curseur_ON(void)
{
status();
IRWRIN=0x0F;
}
void curseur_off(void)
{
status();
IRWRIN=0x0C;
}
void
lcd_shift(char nbsh)
{
lcdwait(10);
if (nb_sh)
{
status();
IRWRIN=0x18; /* shift gauche */
}
else
{
status();
IRWRIN=0x1F; /* shift droite */
}
}
void status(void) /* attend que l'afficheur soit pret recevoir une commande */
{
while ((IRWRIN & 0x80)==0x80); /* attente busy */
return;
}
void lcd_efface(void) /* effacement de l'afficheur */
{
status();
IRWRIN=1;
}
void lcd_tempo(int cnt)
{
int i;
for(;cnt;cnt--)
for(i=0;i<1000;i++);
}
//////////////////////////////////////////////////////////////////////
void main(void)
{
// Initialize the LCD
LCD_Commande(0x3C); // initialize command
LCD_Commande(0x0C); // display on, cursor off
LCD_Commande(0x06);
LCD_Commande(0x01);
// Display Header Information on LCD
LCD_Command(LINE_1); // goto lcd line 1
LCDprint("Keypad Test");
LCD_Command(LINE_2); // goto lcd line 2
LCDprint("Press Keys");
LCD_Command(LINE_3); // goto lcd line 3
// main loop .. endless
for( ; ;){
if(kbhit()){ // if new key pressed
cprint(NewKey); // display it
}
}
}
/**************************************************************************/
/* Initialisation de l'afficheur */
/**************************************************************************/
void LCD_initialise(void)
{
LCD_Commande (0x38) ; // modes 8 bits + 2 lignes
// LCD_Commande (0x30) ; // modes 8 bits + 1 lignes
LCD_Commande(0x0C); // display on, cursor off
LCD_Commande (0x14) ;
LCD_Commande (0x0e) ;
LCD_Commande (0x06) ;
LCD_Commande (0x01) ; // efface tout l'cran
}
/************************************************************/
/* Envoi d'une commande l'afficheur */
/************************************************************/
void LCD_Commande(unsigned char cval)
{
LCD_busy();
LCD_CMD = cval;
}
/************************************************************/
/* Attend que l'afficheur rende la main */
/************************************************************/
void LCD_busy()
{
while ((LCD_CMD & 0x80) != 0x00) ; // on peut crire aussi (LCD_CMD & 0x80) == 0x80);
}
/************************************************************/
/* Affiche une chane de caractre */
/************************************************************/
void affiche_chaine(char *sptr)
{
while( *sptr )
{ affiche_caractere(*sptr);
++sptr;
}
}
/************************************************************/
/* Affiche un caractre */
/************************************************************/
void affiche_caractere(char dval)
{
LCD_busy();
LCD_DAT = dval;
}
/********************************************************************************/
/* Commande d'effacement de l'afficheur (curseur au dbut de la ligne 1) */
/********************************************************************************/
void efface_LCD(void)
{
LCD_Commande(0x01);
}
/********************************************************************************/
/* Commande de dcalage du curseur gauche */
/********************************************************************************/
void DECALE_GAUCHE(unsigned char Nbr_de_decalage)
{
do
{
AFFICHEC (0x10) ;
Nbr_de_decalage -- ;
}
while (Nbr_de_decalage > 0) ;
}
/********************************************************************************/
/* Commande de dcalage du curseur droite */
/********************************************************************************/
void DECALE_DROITE(unsigned char Nbr_de_decalage)
{
do
{
AFFICHEC (0x14) ;
Nbr_de_decalage -- ;
}
while (Nbr_de_decalage > 0) ;
}
/********************************************************************************/
/* Affichage d'une chaine de caractre la position actuelle du curseur */
/********************************************************************************/
void CHAINE(unsigned char *chaine_de_caractere)
{
unsigned char nbr = 0, valeur_a_afficher ;
while (chaine_de_caractere[nbr] != 0x00)
{
AFFICHED (chaine_de_caractere[nbr]) ;
nbr ++ ;
}
}
/********************************************************************************/
/* Positionnement du curseur */
/********************************************************************************/
void gotoxy(unsigned char x, unsigned char y)
{
x -- ;
y -- ;
AFFICHEC (0x80 + x + (y * 0x40)) ;
}
/********************************************************************************/
/* Active le curseur */
/********************************************************************************/
void curseur_ON(void)
{
LCD_Commande(0x0F);
}
/********************************************************************************/
/* Cache le curseur */
/********************************************************************************/
void curseur_OFF(void)
{
LCD_Commande(0x0C);
}