La Troisiéme partie de Mini-Projet Calculatrice



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:

                                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.



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


Aucun commentaire:

Enregistrer un commentaire