Calculatrice à base de PIC18F452 avec clavier et écran LCD

Calculatrice à base de PIC18F452 avec clavier et écran LCD



Projet réalise + Rapport détaille de projet + shéma sur ISI + Porgame sure mikroC.....



                                                                   Sommaire 



  1.   I.              Introduction :

                     II.            Généralité :


  • 1.        Microcontrôleur  PIC18F452.

  • 2.       Clavier  pour les entres.

  • 3.       LCD numérique.

  1.   III.            Application :


  • 1.       Programmation sur MICRO C :

a.       Programme avec logiciel  Mikroc

  • 2.       Simulation  sur ISIS :

a.       Composant utilise

b.      Schéma globale de calculatrice.

c.       Exemple de calcule


  1.   IV.            Conclusion :













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écute 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   afficheurs   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   fonctionnement.
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   synchronisation   entre   le  microcontrôleur et l'afficheur.
§  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 : 
                                        
                                                                                 Tableau commande LCD 



d.      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

III.          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:
                                       0 1 2 3
                                4 5 6 7
                                8 9 10 11
                               12 13 14 15


Les touches sont étiquetées comme suit:

                               1 2 3 4
                               5 6 7 8
                             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.

b.      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);
}
}


c.       Simulation  sur ISIS :

lien Schéma complet de calculatrice sous ISIS  :    http://adf.ly/zNDUN

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.


- See more at: http://www.coursmaroc-ayochti.ml/2015/01/calculatrice-base-de-pic18f452-avec_80.html#sthash.Ezr8FaCo.dpuf

ليست هناك تعليقات:

إرسال تعليق

إدا أعجبكم الموضوع شاركوه مع أصدقائكم لكي يستفيدو كما إستفدتم

كافة الحقوق محفوظة 2012 © site.com مدونة إسم المدونة