Vous êtes sur la page 1sur 17

I.

Introduction :

Le but de ce Mini-projet on général est le développement d'une calculatrice simple


(En utilisant un microcontrôleur PIC18F452), Seras capable d’exécuté les
opérations suivante : Addition, Soustraction, Multiplication, Division.

Les principales composantes du projet sont:

 Le cœur du projet est microcontrôleur PIC 18F452.


 2 lignes alpha numérique LCD.
 Clavier pour l'entrée.

II. Généralité

a. Microcontrôleur :
1. Datasheet de PIC18F452 : il constitue de 40 pattes
2. Les portes entres /sorties :
Le PIC 18F452 a cinq type de porte : PORTA, PORTB, PORTC, PORTD, PORTE, La plupart
des ces portes ont de nombreuses utilisation, par exemple on peut l’utilise le PORTA comme
entre et aussi comme sortie.

3. Caractéristique de PIC 18F452 :


D’autre caractéristique :

 Le PIC18F452 présente un compilateur 'de C’.


 un ICD, 2 fonctions de capture/compare/PWM.
 8 canaux d'Analogue-à-numérique de 10 bit convertisseur (A/D).
b. Claviers :

Sont de petits claviers utilisés pour entrer des données numériques dans les systèmes de
microcontrôleurs. Les Claviers sont disponibles dans une variété de tailles et de styles, de 2 x 2 à
4 x 4 ou même plus grand. Dans Ce Mini- projet on a utilise un clavier 4 x 4 et un écran LCD de
concevoir une simple calculatrice.
La structure du clavier utilisé dans ce projet se compose de seize interrupteurs formés dans une
matrice 4 x 4, et les chiffres cités 0-9, Entrez, "+", ".", "-", "*" et "/ ".

Les rangées et les colonnes du clavier sont connectées à PORTB d'un microcontrôleur qui balaie le
clavier pour détecter le moment où un commutateur est enfoncé.

L’utilisation du clavier est la suivante


:

La l'utilisation du clavier est la suivante:

- 1 logique est appliquée à la première colonne par l'intermédiaire d'RB0.


2 broches Port RB4 à RB7 sont lues. Si la donnée est différente de zéro, un commutateur est
actionné. Si RB4 est 1, la touche 1 est pressé, si RB5 est 1, la touche 4 est pressé, si RB6 est 1, la
touche 9 est pressé, et ainsi de suite.

- Un niveau logique 1 est appliqué à la seconde colonne par l'intermédiaire de RB1.


4 Encore une fois, broches du port RB4 à RB7 sont lus. Si la donnée est différente de zéro, un
commutateur est actionné. Si RB4 est 1, la touche 2 est pressée, si RB5 est 1, touche 6 est pressée,
si RB6 est 1, la touche 0 est pressé, et ainsi de suite.
5 Ce processus est répété pour toutes les quatre colonnes en continu.
Dans ce projet, une calculatrice simple entière est conçue. La calculatrice peut additionner,
soustraire, multiplier et diviser des nombres entiers et afficher le résultat sur l'écran LCD.

c. LCD (Liquid Crystal Display) :

Les afficheurs à cristaux liquides généralement appelés LCD (Liquid Crystal Display)
sont des modules
compacts qui nécessitent peu de composants pour leur mise en œuvre. Plusieurs affi
cheurs sont disponibles sur le marché, ils se différencient les uns des autres par leurs
dimensions (de 1 à 4 lignes de 6 à 80 caractères).
Pour communiquer avec l'extérieur tout afficheur à besoin d'un circuit spécialisé de
gestion appelé « contrôleur d'affichage
», il en existe différents modèles sur le marché mais ils ont tous le même foncti
onnement.
Le contrôleur sert donc d'interface entre le microcontrôleur et l'afficheur .

Communication avec l’afficheur

Le but du driver est de gérer le bus CONTROL afin que le contrôleur d'affichage comprenne Le
bus DATA et affiche ce que l'on souhaite sur l'écran LCD.
Le contrôleur d'affichage peut recevoir deux types d'information sur le bus DATA, un ordre (ex:
effacer l'écran) ou une donnée (ex: le caractère A). Ordres ou données sont envoyés sur le bus
DATA sous forme d'octets (8 bits). Mais pour ne pas utiliser toutes les broches de sorties d'un
microcontrôleur pour communiquer avec un LCD, les contrôleurs d'affichage fonctionnent
également en 4 bits, un nombre codé sur 4 bits s'appelle un quart et .En mode 4 bits, un octet est
Envoyé en deux fois : le quart et de poids fort puis le quart et de poids faible.
Le bus CONTROL est constitué de trois lignes:
La ligne RS (Register Select) qui permet au contrôleur d'affichage de savoir si le
contenu du bus DATA est un ordre ou une donnée .Un niveau bas indiquera un ordre et un niveau
haut une donnée.
La ligne RW (Read Write) informe le contrôleur si on vient lire ou écrire dans sa mémoire, un niveau
bas correspondant à une action d'écriture.
La ligne E (Enable) qui informe le contrôleur d'affichage qu'un quartet (mode 4 bits) ou un octet
(mode 8
bits) est disponible. Cette ligne est active sur front descendant. Elle réalise la sync
hronisation entre le microcontrôleur et l'afficheur.
v Bibliothèque pour LCD

La programmation en assembleur d'un écran LCD en mode parallèle ou en série est généralement
une tâche complexe et nécessite d’une bonne compréhension du fonctionnement interne de
l'écran LCD. La langue mikroC fournit des fonctions pour les deux modes de programmation
basée sur le texte déjà préparé, ce qui simplifie l'utilisation d'écrans LCD.
  Le contrôleur LCD HD44780
Le HD44780 est l'un des contrôleurs de cristaux liquides les plus appréciés, étant utilisé dans
l'industrie et dans les applications commerciales.
Le module est monochrome et vient dans différentes formes et tailles. Des modules avec 8, 16, 20,
24, 32 et 40 caractères sont disponibles.
Selon le modèle, l'écran LCD est fabriqué avec 14 ou 16 pattes pour l'interface.
Le tableau suivant présente la configuration des pattes et les fonctions des pattes d’un LCD
à 14 pattes.
 La patte VSS est à 0V ou du sol. La patte VDD doit être connectée
à la borne positive d’alimentation. Bien que les fabricants spécifient une alimentation 5V
DC, les modules travaillent habituellement aussi avec une alimentation un peu bas que 3V ou
aussi haut que 6V.

 La patte 3 VEE est désigné pour réglage du contraste de l'affichage et doit être
reliée à une alimentation en courant continu. Un potentiomètre est généralement connecté à
l'alimentation avec son curseur raccordé à la patte VEE et l'autre patte du potentiomètre relié à
la masse. De cette façon la tension à la patte VEE, et où le contraste de l'affichage, peut
être réglée à volonté.

  La patte 4 est le registre de sélection (RS) et lorsque


cette patte à 0 V, les données sont transférés à l'affichage à cristaux liquides. Lorsque RS
est à +5 V, les données de caractères peuvent être transférés à partir du module LCD.

 La patte 5 est le registre de sélection de lecture / écriture (R / W). Cette patte est
reliée avec la masse (état logique bas) afin d'écrire des données de caractères au module
LCD. Lorsque cette broche est à +5 V (états logique haut) donc les
informations sortants du module LCD peuvent être lues.
 La patte 6 est la validation (EN), qui est utilisé pour initier le transfert
de commandes ou de données entre le module et le microcontrôleur. Lors de l'écriture
à l'écran, les données sont transférés uniquement sur le front descendant (haut-
bas) sur cette patte. Lors de la lecture de l’affichage, les données deviennent accessibles
après le front montant (bas-haut) de la patte de validation, et ces données demeurent tant que la
patte de validation est au niveau logique haut.
  Les broches 7 à 14 sont les huit lignes de bus de données (D0
à D7). Les données peuvent être transférées entre le microcontrôleur et le module LCD à l'aide
soit d'un seul octet de 8 bits soit de deux 4-bits. Dans ce dernier cas, seuls les quatre lignes de
données supérieures (D4 à D7) sont utilisées. Le 4-bits mode a l'avantage de nécessiter
moins de lignes d'E / S pour communiquer avec l'écran LCD
Le mikroC LCD bibliothèque fournit un grand nombre de fonctions pour contrôler
du texte LCD avec 4-bits et les interfaces de données 8-bit, et pour les graphiques LCD. La
plus courante est la 4-bit interface en mode texte sur écran LCD. Ce qui suit sont les fonctions
disponibles, pour LCD 4-bit interface en mode texte LCD :

Lcd_Config
Lcd_Init
Lcd_Out
Lcd_Out_Cp
Lcd_Chr
Lcd_Chr_Cp
Lcd_Cmd
Lcd_Config
La fonction Lcd_Config est utilisée pour configurer l'interface LCD. La connexion par défaut
entre le LCD et le microcontrôleur est la suivante :
LCD Patte du port de microcontrôleurs
RS → 2
FR → 3
D4 → 4
D5 → 5
D6 → 6
D7 → 7
La patte R / W de l'écran n'est pas utilisé et doit être reliée à la masse.
Cette fonction devrait être utilisée pour modifier la connexion par défaut. Il devrait être
appelé avec les paramètres dans l'ordre suivant :
Nom de port, RS patte, EN patte, R/W patte, D7 patte, D6 patte, D5 patte, D4 patte ,
Le nom du port doit être spécifié en passant son adresse. Par exemple, si RS patte est
connectée à RB0, EN patte à RB1, D7 patte à RB2, D6 patte à RB3, D5 patte à RB4, et
D4 patte à RB5, alors la fonction doit être appelée comme suit :
 Lcd_Init
La fonction Lcd_Init est appelée pour configurer l'interface entre le microcontrôleur et
l'écran LCD lorsque les connexions sont faites par défaut que
vient d'être illustré. Le nom du port doit être spécifié en passant son adresse. Par exemple, en
supposant que LCD est reliée à PORTB et les connexions par défaut précédentes sont utilisées, la
fonction doit être appelée en tant que :
Lcd_Init();
 Lcd_Out
La fonction Lcd_Out affiche du texte à la ligne indiquée et la position des colonnes de
l'écran LCD. La fonction doit être appelée avec des paramètres dans l'ordre suivant :ligne,
colonne, texte
Exemple : pour afficher du texte "Ordinateur" à la ligne 1 et la colonne 2 de l'écran LCD nous
devrions appeler la fonction comme suit :
Lcd_Out (1, 2, "Ordinateur");
 Lcd_Out_Cp
La fonction Lcd_Out_Cp affiche le texte à la position actuelle du curseur.
Exemple : pour afficher le texte "Ordinateur" à la position actuelle du curseur, la fonction
devrait être appelé en tant que :
Lcd_Out_Cp ("Ordinateur");
 Lcd_Chr
La fonction Lcd_Chr affiche un caractère à la ligne indiquée et la colonne la position du curseur.
La fonction doit être appelée avec les paramètres dans le l'ordre suivant ligne, colonne, caractère
Exemple : pour afficher caractère "K" à la ligne 2 et la colonne 4 de l'écran LCD nous devrions
appeler la fonction de :
Lcd_Chr(2, 4, ‘K’);
 Lcd_Chr_Cp
La fonction Lcd_Chr_Cp affiche un caractère à la position actuelle du courser. Par exemple, pour
afficher le caractère "M" à la position actuelle du curseur, la fonction doit être appelée en tant que
:
Lcd_Chr_Cp ('M');
 Lcd_Cmd
La fonction Lcd_Cmd est utilisée pour envoyer une commande à l'écran LCD. Avec ce
commande, nous pouvons déplacer le curseur vers n'importe quelle ligne, désactiver l'écran
LCD, faire clignote le curseur, décaler l'affichage, etc. Une liste des plus
couramment utilisés commandes LCD est donnée dans Tableau suivant :
a. Le fonctionnement de la calculatrice :

Lorsque l'alimentation est appliquée au système, l'écran LCD de Calculatrice affiche au


départ « calculatrice » Ensuite, « NO 1 » l'utilisateur saisit première numéro puis appuis sure ENTRE,
par la suit affiche « NO 2 » pour entre le deuxième numéro, puis entre l’opération (+, -, *, /).
Après cela, Le résultat est affiché automatiquement sur l'écran LCD prêt pour le prochain calcule. Si
l’opération ne peut pas effectue on aura valeur « -1 » sur écran LCD.

Il est important de réaliser que lorsqu'une touche est enfoncée ou relâchée, nous obtenons ce que l'on
appelle contacter le bruit, où la sortie impulsions touche haut et bas momentanément, la production d'un
certain nombre de logique 0 et 1 des impulsions à la sortie. Bruit de contact de commutation est
habituellement retiré soit en matériel ou par programmation dans un processus appelé le contact anti-
rebond.

Dans le logiciel le plus simple pour éliminer le bruit de contact est d'attendre environ 20 ms après une
clé de contact est pressé ou clé de contact est libéré.
Une fonction appelée getkeypad a été développé pour lire une clé du clavier.
La langue mikroC a intégré les fonctions appelées Keypad_Read et Keypad_Released de lire une clé à
partir d'un clavier lorsqu'une touche est enfoncée et quand une touche est relâchée

II. Application :

1. Programmation sur MICRO C :


a. Algorithme :

Le clavier à 4 x 4 est connecte à PORTB de microcontrôleur PIC18F452. Et LCD connecte


a PORTC.

Notre projet et une simple calculatrice qui peut effectuer une arithmétique entière.
Les touches sont organisées comme suit:

0123
4567
8 9 10 11
12 13 14 15
Les touches sont étiquetées comme suit:

1234
5678
9 0 . Enter
+−*/

 Programme pour LCD : pour qu’on puisse voir le résultat affiché dans LCD en décimale.

 Programme calculatrice : pour que le PIC18F452, Seras capable d’exécute les


opérations : Addition, Soustraction, Multiplication et Division.
 Programme clavier : pour entres les donner (le premier et le seconde numéro et
l’opération) au système de microcontrôleur.

a. Sur MikroC:

#define MASK 0xF0


#define Enter 11
#define Plus 12
#define Minus 13
#define Multiply 14
#define Divide 15
//
// Cette fonction obtient une touche du clavier
//
unsigned char getkeypad()
{
unsigned char i, Key = 0;
PORTB = 0x01; // Commencer par la colonne 1
while((PORTB & MASK) == 0) // Masquer si aucune touche ne pas pressée
{
PORTB = (PORTB << 1); // Colonne suivante
Key++; // Numéro de colonne
if(Key == 4)
{
PORTB = 0x01; // Sauvegarder la colonne 1
Key = 0;
}
}
Delay_ms(20); // Mettre anti-rebond
for(i = 0x10; i !=0; i <<=1) // Déterminer la touche enfoncée
{
if((PORTB & i) != 0)break;
Key = Key + 4;
}
PORTB=0x0F;
while((PORTB & MASK) != 0); /* Attendre jusqu'a ce que touche sera relâchée */
Delay_ms(20); // Mettre anti-rebond
return (Key); // Retour le numéro de la touche
}
// Connections de LCD
sbit LCD_RS at RC2_bit;
sbit LCD_EN at RC3_bit;
sbit LCD_D4 at RC4_bit;
sbit LCD_D5 at RC5_bit;
sbit LCD_D6 at RC6_bit;
sbit LCD_D7 at RC7_bit;
sbit LCD_RS_Direction at TRISC2_bit;
sbit LCD_EN_Direction at TRISC3_bit;
sbit LCD_D4_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
// Fin de connections
//Start du program principale
//
void main()
{
unsigned char MyKey, i,j,lcd[5],op[12];
unsigned long Calc, Op1, Op2;
TRISC = 0; // PORTC est configure en sortie
TRISB = 0xF0; // RB4-RB7 sont configures en entrée
//
// Configuration de LCD
//
Lcd_Init(); // LCD est connecte ˆ PORTC
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"CALCULATRICE"); // Ecrire CALCULATRICE
Delay_ms(2000); // Temporisation de 2 secondes
Lcd_Cmd(_LCD_CLEAR); // Effacer l'écran LCD
//
// Boucle de programme
//
for(;;) // Boucle sans fin
{
MyKey = 0;
Op1 = 0;
Op2 = 0;
Lcd_Out(1,1,"No1: "); // Afficher No1:
while(1) // Composer la première chiffre
{
MyKey = getkeypad();
if(MyKey == Enter)break; // Presser ENTRER
MyKey++;
if(MyKey == 10)MyKey = 0; // Si la touche 0 est pressée
Lcd_Chr_CP( MyKey + '0');
Op1 = 10*Op1 + MyKey; // Premier numéro de Op1
}
Lcd_Out(2,1,"No2: "); // Afficher No2:
while(1) // Composer la deuxième chiffre
{
MyKey = getkeypad();
if(MyKey == Enter)break; // Si ENTRER est pressée
MyKey++;
if(MyKey == 10)MyKey = 0; // Si la touche 0 est pressée
Lcd_Chr_CP( MyKey +'0');
Op2 = 10*Op2 + MyKey; // Second numéro de Op2
}
Lcd_Cmd(_LCD_CLEAR); // Effacer l'écran de LCD
Lcd_Out(1,1,"Op: "); // Afficher Op:
MyKey = getkeypad(); // Obtenir le fonctionnement
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"Res="); // Afficher Res=
switch(MyKey) // Effectuer l'opération
{
case Plus:
Calc = Op1 + Op2; // Si Plus
break;
case Minus:
Calc = Op1 - Op2; // Si Minus
break;
case Multiply:
Calc = Op1 * Op2; // Si Multiply
break;
case Divide:
Calc = Op1 / Op2; // Si Divide
break;
}
LongToStr(Calc, op); // Convertir en chaine dans op
//
// Supprimer les espaces à gauche
//
j=0;
for(i=0;i<=11;i++)
{
if(op[i] != ' ') // Si un blanc
{
lcd[j]=op[i];
j++;
}
}
Lcd_Out_CP(lcd); // Afficher le résultat
Delay_ms(5000); // Temporisation de 5 secondes
Lcd_Cmd(_LCD_CLEAR);
}
}
a. Simulation sur ISIS :
a. Les composants utilisent :

 PIC 18F452 : Le cœur du projet (le cerveau).

 LM016L : 2 lignes alpha numérique LCD.

 KEYPAD : Clavier 4 X 4 pour les entrées, constitue des


boutons poussoir.

 CAP - ELEC :

 CRYSTAL : un oscillateur pour le cadencement.

b. Schéma complet de calculatrice sous ISIS :


 Exemple D’application :
On va essaye de calculer la devisions suivant : NO1 = 1500 , NO2 = 5 , Opération =
Devisions

Etape 1 : faire entre le numéro 1, NO1=1500.


Etape 2 : avant Entre le deuxième numéro NO2=5, il faut d’appuis sure bouton ENTRE :

Etape 3 : avant d’entre l’opération il faut appuis sure entre, et par la suit la résultat s’affiche
automatiquement :
 Résultat : 1500/5= 300 par la suit, le calculatrice efface le résultat et recommence ( il
affiche « NO1 » pour commencer une entre opération).
Conclusion :

Ce Mini-projet a réellement été un succès pour nous en termes d’acquis et


expérience Professionnelle ainsi un atout sur l’électronique-numérique qui est très bénéfique.
En ce qui nous concerne, Nous avons l’honneur a l’occasion de réussir à notre projet, et par
suite l’ajout d’une valeur de plus à notre expérience.