File "programme.c"
Full Path: /home/analogde/www/NAVETTE/programme.c
File size: 5.85 KB
MIME-type: text/x-c
Charset: 8 bit
#include <68hc11.h>
#include <stdio.h>
/******************************************************************/
#define _IO_BASE 0x4000
#define LCD_CMD *(unsigned char volatile*)(_IO_BASE+0x60) /* registre de controle */
#define LCD_DATA *(unsigned char volatile*)(_IO_BASE+0x61)/* registre de donnes */
#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
/*
* 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
pokeb(LCD_CMD,0x38); /* get attn */
pokeb(LCD_CMD,0x38); /* set 2 line disp */
pokeb(LCD_CMD,0x06); /* character entry right */
pokeb(LCD_CMD,0x0E); /* display control on, cursor on */
pokeb(LCD_CMD,0x01); /* set cursor home */
/******************************************************************/
void lcd_initisalise(void);
void lcd_retour_home(void);
void lcd_retour_home(void);
void lcd_on(void);
void lcd_off(void);
/////// void lcd_decalage_caractere(char nb);
void lcd_tempo(int cnt);
void lcd_status(void);
void lcd_efface(void);
void lcd curseur_on(void);
void lcd_curseur_off(void);
void lcd_affiche_caractere(unsigned char valeur_a_afficher);
void lcd_affiche_chaine(unsigned char *chaine_de_caractere);
void lcd_decale_gauche(unsigned char Nbr_de_decalage);
void lcd_decale_droite(unsigned char Nbr_de_decalage)
void beep(int cnt);
/******************************************************************/
void lcd_status(void)
{
/* boucle de test : attente du changement de l'tat du bit busy */
while ((LCD_CMD & 0x80)==0x80);
return;
}
/* autre possibilit
while ((control_aff & 0x80) != 0x00) ;
mais aussi
if(LCD_CMD & 0x80) == 0 )
return 1;
else
return 0;
}
*/
/******************************************************************/
void lcd_initisalise()
{
LCD_CMD=0x38; /* mode 8 bits */
lcd_tempo(3);
LCD_CMD=0x06; /* mode */
lcd_efface(); /* efface le display */
lcd_retour_home();
/*(0x38)
(0x14)
(0x0e)
(0x06)
(0x01)*/
}
/******************************************************************/
void lcd_tempo(int cnt)
{
int i;
for(;cnt;cnt--)
for(i=0;i<1000;i++);
}
/******************************************************************/
void lcd_cls(void)
{
lcd_status();
LCD_CMD=0x01;
}
/******************************************************************/
void lcd_retour_home();
{
lcd_status();
LCD_CMD=0x02;
}
/******************************************************************/
void lcd_on(void)
{
lcd_status();
LCD_CMD=0x0C;
}
/******************************************************************/
void lcd_off(void)
{
lcd_status();
LCD_CMD=0xB;
}
/******************************************************************/
void curseur_on(void)
{
lcd_status();
LCD_CMD=0x0F;
}
/******************************************************************/
void curseur_off(void)
{
lcd_status();
LCD_CMD=0x0C;
}
/******************************************************************/
void curseur_clignotant(void)
{ /* blink */
lcd_status();
///////////////////////////// a implementer LCD_CMD=;
}
/******************************************************************/
void lcd_decalage_caractere(char nb)
{
lcd_tempo(10);
if(nb)
{
lcd_status();
LCD_CMD=0x18; /* shift gauche */
}
else
{
lcd_status();
LCD_CMD=0x1F; /* shift droite */
}
}
/******************************************************************/
void beep( int cnt)
{
do
{
PORTG ^=01;
wait(7);
PORTG ^=01;
wait(4);
}
while(--cnt);
}
/******************************************************************/
void lcd_affiche_caractere(unsigned char valeur_a_afficher)
{
lcd_status();
LCD_DATA = valeur_a_afficher ;
}
/******************************************************************/
void lcd_affiche_caractere(unsigned char valeur_a_afficher)
{
lcd_status();
LCD_DATA = valeur_a_afficher ;
}
/******************************************************************/
void lcd_affiche_chaine(unsigned char *chaine_de_caractere)
{
unsigned char nbr = 0;
while (chaine_de_caractere[nbr] != 0x00)
{
lcd_affiche_caractere(chaine_de_caractere[nbr]) ;
nbr ++ ;
}
}
/******************************************************************/
void lcd_decale_gauche(unsigned char Nbr_de_decalage)
{
do
{
lcd_status();
LCD_CMD= 0x10;
Nbr_de_decalage -- ;
}
while (Nbr_de_decalage > 0) ;
}
/******************************************************************/
void lcd_decale_droite(unsigned char Nbr_de_decalage)
{
do
{
lcd_status();
LCD_CMD= 0x14;
Nbr_de_decalage -- ;
}
while (Nbr_de_decalage > 0) ;
}
/******************************************************************/