Bonjour
Je suis étudiant en Système Électronique, j'ai réaliser un montage simple comprenant un PIC 18F8722 , un écran LCD 8bit , et un Clavier Matriciel 16 touches.
je programme en C avec le logiciel MikroC Pro et un module Pic Flash 2
j'ai repris un exemple du logiciel permettant d'afficher la touche appuyé du clavier sur l’écran, je l'ai adapter a mon montage , mais je n'arrive pas a le faire fonctionner
L'affichage n'a aucun problème , mais le microcontroleur ne lit pas le clavier.
Je pense que le problème viens du PORTF ( un registre que je n'aurais pas ou mal régler ? )
Si quelqu'un connait ce type de microcontroleur , son aide est la bienvenue .
Merci d'avance
voici mon programme :
unsigned short kp, cnt, oldstate = 0;
char txt[6];
// Brochage du Clavier
char keypadPort at PORTF;
// Fin du brochage
// Brochage de l'ecran LCD
sbit LCD_RS at RE5_bit;
sbit LCD_EN at RE7_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISE5_bit;
sbit LCD_EN_Direction at TRISE7_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// Fin du brochage
void main() {
ADCON1 =0x0F; // Desactive le compteur analogique/numerique du PORTF et met les 0/I en numerique
MEMCON.F7=1; // Desactive le bus de memoire externe sur le PORTD
CMCON =0x07; // Desactive le comparateur sur le PORTF
PORTE = 0; // Met le PORTE a 0
PORTD = 0; // Met le PORTD a 0
PORTF = 0;
TRISE = 0; // Met le PORTE en sortie
TRISD = 0; // Met le PORTD en sortie
Keypad_Init(); // Initialise le Clavier
Lcd_Init(); // Initialise l'ecran LCD
Lcd_Cmd(_LCD_CLEAR); // Efface l'ecran LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Desactive le curseur
Lcd_Out(1, 1, "Vous avez presse"); // Ecrit ce texte sur l'ecran LCD
Lcd_Out(2, 1, "la touche :"); // Ecrit ce texte sur l'ecran LCD
do {
kp = 0; // Met la variable kp a 0
// Attend qu'une touche soit préssé et relaché
kp = Keypad_Key_Click(); // Store key code in kp variable
//Prepare la valeur en sortie , les cases correspondent a l'emplacement des touches sur le clavier
//, la valeur de kp asssocié correspond au code ASCII en base 10 de la touche.
// CASE // // TOUCHE //
// 1 / 2 / 3 / 4 // // 1 / 2 / 3 / F //
// 5 / 6 / 7 / 8 // // 4 / 5 / 6 / E //
// 9 / 10 / 11 / 12 // // 7 / 8 / 9 / D //
// 13 / 14 / 15 / 16 // // A / 0 / B / C //
switch (kp) {
case 1: kp = 49; break; // 1
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
case 4: kp = 70; break; // F
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 8: kp = 69; break; // E
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 12: kp = 68; break; // D
case 13: kp = 65; break; // A
case 14: kp = 48; break; // 0
case 15: kp = 66; break; // B
case 16: kp = 67; break; // C
}
Lcd_Chr(2, 14, kp); // Affiche la valeur du code ASCII sur l'ecran
} while (1);
}
-----