rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Scrutation d'un clavier matriciel 12 touches

  Posté par olivier du 49, le dimanche 30 mars 2008 à 20:50:50
Bonjour,
je voudrais de l'aide sur un exercice que je dois completer cela fait des jours que je suis dessus et je n'arrive pas à executer le programme mais je pense etre prêt de la solution.
Là je vous mets le programme à completer , il faut remplacer les points d'interrogation et en dessous je mets ma solution.
L'exercice : c'est un clavier matriciel connecte à un coupleur qui va scruter ce clavier matriciel pour voir quel touche son appuyer ou non. Si vous voulez je peux vous envoyer le schéma en jpg.
Je vous remercie d'avance.
olivier



/***********************************************************­*****************/
/* Pilotage d'un clavier 12 touches */
/* ATTENTION !!! PROGRAMME A COMPLETER */
/***********************************************************­*****************/
/* fonction : exploration par scrutation du clavier */
/* connecte a un coupleurs 8 bits 8255 : */
/* connexion : */
/* selection des lignes ------> port C haut */
/* lecture des colonnes ------> port C bas */
/* code touche sur LED ------> port A */
/***********************************************************­*****************/

/*___initialisations_________________________*/
I_COLONNE ?? // masque sur 1ère colonne
I_LIGNE ?? // active 1ère ligne
I_TOUCHE ?? // initialise compteur de touches
NB_LIGNE 4 // nombre de lignes
NB_COLONNE 3 // nombre de touches
I_CONTROL ?? // programmation coupleur

/*___adresses des coupleurs__________________*/
#define V_PORT_LED (* ??????????????????) // pilote les LED
#define V_PORT_LIGNE (* ??????????????????) // pilote les lignes (Ch)
#define V_PORT_COLONNE (* ??????????????????) // pilote les colonnes (Cb)
#define V_PORT_CONTROL (* ??????????????????) // registre de contrôle

/*---définitions--------------------------*/
typedef unsigned char byte; // fabrique un octet

/***********************************************************­****************/
/* PROGRAMME PRINCIPAL */
/***********************************************************­****************/
void main(void)
{
/*___variables________________________________*/
byte sort_ligne ; // var complément etat sur lignes
byte comp_ligne ; // état ligne
byte lect_col ; // etat colonnes
byte m_colonne ; // masque courant colonne
byte colonne ; // état courant colonne
byte num_touch ; // numéro touche courante
char code_touche[12]="123456789*0#"; // tableau des codes ASCII des touches
int i ; // compteur de boucle lignes
int j ; // compteur colonnes

/*___boucle générale___________________________*/
V_PORT_CONTROL = ??;
do
{
comp_ligne = ?? ; // pour activer la 1ère ligne
num_touch = ?? ; // initialise numero de touches
for (i=0 ; i<NB_LIGNE ; i++) // de 1ère à derniere ligne
{
sort_ligne = ~ ?? ; // complémente var état ligne
V_PORT_LIGNE = sort_ligne ; // active la ligne
m_colonne = ?? ; // initialise masque sur 1ère colonne

for (j=0 ; j<NB_COLONNE ; j++) // de 1ère à derniere colonne
{
lect_col = ; // lit état colonnes
colonne = lect_col & ?? ; // garde 1 col
if (??) // si touche activée
{
It = i * NB_COLONNE + j;
touche = Table[It];
V_PORT_LED = num_touch ; // affiche numero touche sur les LEDs
}
?? = ?? << ?? ; // mise a jour du masque sur les colonnes
?? = ?? + ?? ; // mise a jour du numero de touche
}

?? = ?? << ?? ; // prépare nouvelle ligne
}
}
while (1) ;

}



Ma version corriger


/***********************************************************­*****************/
/* Pilotage d'un clavier 12 touches */
/* ATTENTION !!! PROGRAMME A COMPLETER */
/***********************************************************­*****************/
/* fonction : exploration par scrutation du clavier */
/* connecte a un coupleurs 8 bits 8255 : */
/* connexion : */
/* selection des lignes ------> port C haut */
/* lecture des colonnes ------> port C bas */
/* code touche sur LED ------> port A */
/***********************************************************­*****************/
/*___initialisations_________________________*/
I_COLONNE 0XEF // masque sur 1ère colonne
I_LIGNE 0XFE // active 1ère ligne
I_TOUCHE 0XFF // initialise compteur de touches
NB_LIGNE 4 // nombre de lignes
NB_COLONNE 3 // nombre de touches
I_CONTROL 0X83 // programmation coupleur

/*___adresses des coupleurs__________________*/
#define V_PORT_LED (* ((byte*)0x000010) // pilote les LED
#define V_PORT_LIGNE (* ((byte*)0x000014) // pilote les lignes (Ch)
#define V_PORT_COLONNE (* ((byte*)0x000014) // pilote les colonnes (Cb)
#define V_PORT_CONTROL (* ((byte*)0x000016) // registre de contrôle

/*---définitions--------------------------*/
typedef unsigned char byte; // fabrique un octet

/***********************************************************­****************/
/* PROGRAMME PRINCIPAL */
/***********************************************************­****************/
void main(void)
{
/*___variables________________________________*/
byte sort_ligne ; // var complément etat sur lignes
byte comp_ligne ; // état ligne
byte lect_col ; // etat colonnes
byte m_colonne ; // masque courant colonne
byte colonne ; // état courant colonne
byte num_touch ; // numéro touche courante
char code_touche[12]="123456789*0#"; // tableau des codes ASCII des touches
int i ; // compteur de boucle lignes
int j ; // compteur colonnes

/*___boucle générale___________________________*/
V_PORT_CONTROL = 0X16;
do
{
comp_ligne = I_LIGNE ; // pour activer la 1ère ligne
num_touch = I_TOUCHE ; // initialise numero de touches
for (i=0 ; i<NB_LIGNE ; i++) // de 1ère à derniere ligne
{
sort_ligne = comp_ligne + 1 ; // complémente var état ligne
V_PORT_LIGNE = sort_ligne ; // active la ligne
m_colonne = I_COLONNE ; // initialise masque sur 1ère colonne

for (j=0 ; j<NB_COLONNE ; j++) // de 1ère à derniere colonne
{
lect_col = m_colonne ; // lit état colonnes
colonne = lect_col & I_COLONNE ; // garde 1 col
if (colonne) // si touche activée
{
It = i * NB_COLONNE + j;
touche = Table[It];
V_PORT_LED = num_touch ; // affiche numero touche sur les LEDs
}
I_COLONNE = I_COLONNE << j ; // mise a jour du masque sur les colonnes
num_touch = num_touch + ?? ; // mise a jour du numero de touche
}

?? = ?? << ?? ; // prépare nouvelle ligne
}
}
while (1) ;

}
Configuration: Windows XP
Internet Explorer 6.0
Répondre à olivier du 49  Signaler ce message aux modérateurs
Logiciels pertinents trouvés dans les téléchargements
Télécharger Pas Touche XP 1.0.1Pas Touche XP - Pas Touche XP permet la surveillance automatique de votre ordinateur lors de vos absences. Si le logiciel détecte une...Catégorie: Anonymat/Confidentialité
Licence: Freeware/gratuit
Télécharger Alcohol 120° 1.9.7.6221Alcohol 120° - Alcohol 120°, est une application permettant de créer des sauvegardes de vos CD ou DVD sous forme d'images disque (images ...Catégorie: Gravure
Licence: Demo
Télécharger Pilote pour clavier enrichi  1.05Pilote pour clavier enrichi - Il manque quelques caractères bien utiles sur notre Clavier ordinaire (AZERTY). Souvent, on perd de précieuses minutes en...Catégorie: Sécurité
Licence: Freeware/gratuit
Télécharger Clavier +  10.6.1Clavier + - Clavier+ est un outil qui vous permet d'associer toutes les touches du clavier à une action, y compris la touche Windows. ...Catégorie: Emulation
Licence: Open Source
Plus de logiciels gratuits sur « scrutation d'un clavier matriciel 12 touches »