1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
| //////////Programme permettant d'afficher du texte sur un afficheur LCD
////////////////////////////////////////////////////////////////////////////////
//Fonctions
void init(void);
void affichage(char *message, int longeur_message);
void effacer(void);
void ligne_bas(void);
char *itoa (int value, char *string, int radix);
////////////////////////////////////////////////////////////////////////////////
//Constantes
#define LCD PORTB
#define RS PORTC.F3
#define E PORTC.F4
#define LED PORTC.F7
#define TOUCHE_OK PORTC.F6
#define NBR_VISITEURS PORTC.F5
#define EFFACER 0x01
#define LIGNE_BAS 0xC0
////////////////////////////////////////////////////////////////////////////////
char *itoa (int value, char *string, int radix) // fonction qui convertie un entier en chaîne de caractères, dans n'importe quelle base
{
char tmp[32];
char *tp = tmp;
int i;
unsigned v;
int sign;
char *sp;
if (radix > 36 || radix <= 1)
return 0;
sign = (radix == 10 && value < 0);
if (sign)
v = -value;
else
v = (unsigned)value;
while (v || tp == tmp)
{
i = v % radix;
v = v / radix;
if (i < 10)
*tp++ = i+'0';
else
*tp++ = i + 'A' - 10;
}
sp = string;
if (sign)
*sp++ = '-';
while (tp > tmp)
*sp++ = *--tp;
*sp = 0;
return string;
}
////////////////////////////////////////////////////////////////////////////////
void init() //Sous programme qui gère l'initialisation
{
// Définition des ports en entrée ou sortie
trisc.F3 = 0;
trisc.F4 = 0;
trisc.F7 = 0;
trisc.F6 = 1;
trisc.F5 = 1;
trisb = 0x00;
RS = 0;
// Config du LCD
LCD = 0x38;
impulsion_E();
LCD = 0x10;
impulsion_E();
LCD = 0x0C;
impulsion_E();
LCD = 0x06;
impulsion_E();
LCD = 0x01;
impulsion_E();
}
////////////////////////////////////////////////////////////////////////////////
void affichage(char *message, int longeur_message) // Sous programme qui gère l'affichage sur le LCD
{
int boucle;
RS = 1; // Permet d'écrire des caractères sur le LCD
for ( boucle = 0; boucle < longeur_message; boucle ++) // Boucle qui va afficher "BONJOUR"
{
LCD = message[boucle]; // Affiche "Appuyez sur une" sur le LCD
// tempo évitant de gérer le Handshaking possible avec l'afficheur.
E = 1;
delay_ms(2); //Tempo 2 ms
E = 0;
}
}
////////////////////////////////////////////////////////////////////////////////
void effacer(void)
{
RS = 0;
LCD = EFFACER; // Efface le texte sur le LCD
// tempo évitant de gérer le Handshaking possible avec l'afficheur.
E = 1;
delay_ms(2); //Tempo 2 ms
E = 0;
}
////////////////////////////////////////////////////////////////////////////////
void ligne_bas(void)
{
RS = 0;
LCD = LIGNE_BAS; // Affiche le prochain texte sur la 2ème ligne
// tempo évitant de gérer le Handshaking possible avec l'afficheur.
E = 1;
delay_ms(2); //Tempo 2 ms
E = 0;
}
////////////////////////////////////////////////////////////////////////////////
//Fonction principale
void main()
{
char nb[16];
unsigned int visiteur = 0;
init(); // appel de la procédure "init"
do
{
affichage("BONJOUR", 7);
delay_ms(1000);
effacer();
affichage("Appuyez sur une", 15);
delay_ms(1000);
effacer();
affichage("touche", 6);
delay_ms(1000);
effacer();
}while(TOUCHE_OK != 0);
affichage("TOUCHE OK", 9);
delay_ms(3000);
effacer();
affichage("NBR VISITEURS", 13);
ligne_bas();
while (1) // indéfiniment
{
if(NBR_VISITEURS == 0)
{
visiteur++;
affichage(itoa(visiteur, nb, 10));
effacer();
ligne_bas();
}
}
} |
Partager