Nothing Special   »   [go: up one dir, main page]

Le Clavier

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 8

Le Clavier

On va étudier r 4 méthodes permettant de lire la touche appuyée d’un clavier. La méthode 1 et 2

sont largement utilisées il y plein de documents sur le NET, d’ici on va expliquer en détail deux

nouveaux méthodes

1. Méthode 1 : Taper sur Google keypad + arduino

2. Méthode 2 : Taper sur Google keypad I2C+ arduino

Méthodes 3 : contrôleur du clavier 74C922


Pour comprendre le fonctionnement du 74C922 on doit passer par son datasheet (largement
conseillé)
https://pdf1.alldatasheet.com/datasheet-pdf/view/9282/NSC/74C922.html
Mais rien n’empêche de l’étudier autrement (faiblement conseillé)
1 étapes : taper le montage suivant

# 0 D L3
C1
U1
9 8 7 C L2 C0
C1
11
10
X1
X2
KBM
OSC
6
5 C2
100nF
8
C2 X3
7 12
X4 DA N5
6 5 4 B L1 OE
13 100nF

1 17
L0 Y1 A N0
2 16
L1 Y2 B N1
3 2 1 A L0
L3
L2
3
4
Y3
Y4
C
D
15
14
N2
N3
3

MM74C922
C1
C2

C0

3. Appuyer sur les touche de clavier compléter le tableau ; que remarquez vous

4. Ecrire un code permettant d’afficher sur le Serial la touche appuyée


Touche N4 N3 N2 N1 N0
0
1
2
4
5
6
4
8
9
*
#

Soit le code suivant

int n;
char key;
int n0=12;
int n1=11;
int n2=10;
int n3=9;
int n4=8;
void setup() {

Serial.begin(9600);
pinMode(n0,INPUT);
pinMode(n1,INPUT);
pinMode(n2,INPUT);
pinMode(n3,INPUT);
pinMode(n4,INPUT);

char read_keypad ()
{
char key0;
n=1*digitalRead(n0)+2*digitalRead(n1)+4*digitalRead(n2)+8*digitalRead(n3);
switch (n)
{
case 0:
key0='1';
break;
case 1:
key0='2';
break;
case 2:
key0='3';
break;
case 4:
key0='4';
break;
case 5:
key0='5';
break;
case 6:
key0='6';
break;
case 8:
key0='7';
break;
case 9:
key0='8';
break;
case 10:
key0='9';
break;
case 13:
key0='0';
break;
case 12:
key0='*';
break;
case 14:
key0='#';
break;
}
return(key0);

}
void loop() {
key=read_keypad();
Serial.println(key);

}
5.Compiler le code et simuler le, que remarquer vous et comment on peut l’améliorer
6 Soit ce amélioré Compiler puis simuler le, que remarquer vous et comment on peut
l’améliorer

7. soit le code suivant simuler le


int n;
char key;
int n0=12;
int n1=11;
int n2=10;
int n3=9;
int n4=8;
bool key_pad;
bool last_key_pad_state, current_key_pad_state;
void setup() {
Serial.begin(9600);
pinMode(n0,INPUT);
pinMode(n1,INPUT);
pinMode(n2,INPUT);
pinMode(n3,INPUT);
pinMode(n4,INPUT);
key_pad=false;
last_key_pad_state=LOW;

void read_keypad_74922 ()
{

n=1*digitalRead(n0)+2*digitalRead(n1)+4*digitalRead(n2)+8*digitalRead(n3);
switch (n)
{
case 0:
key='1';
break;
case 1:
key='2';
break;
case 2:
key='3';
break;
case 4:
key='4';
break;
case 5:
key='5';
break;
case 6:
key='6';
break;
case 8:
key='7';
break;
case 9:
key='8';
break;
case 10:
key='9';
break;
case 13:
key='0';
break;
case 12:
key='*';
break;
case 14:
key='#';
break;
}
}
void key_read()
{
current_key_pad_state=digitalRead(n4);
if (last_key_pad_state!=current_key_pad_state)
{
last_key_pad_state=current_key_pad_state;
if(current_key_pad_state==HIGH)
{
key_pad=true;
}

void loop() {
key_read();
if (key_pad==true)
{
read_keypad_74922 ();
key_pad=false;
Serial.println(key);
}
}
7. citer la différence entre les trois codes
8. combien de pins on doit réserver selon cette méthode
//---------------------

Méthodes 4 : contrôleur du clavier 74C922 +PCF85748574


Taper le montage
Simuler le code
combien de pins on doit réserver selon cette méthode

SIM1

www.TheEngineeringProjects.com
13 12
D13 D12
REF 11
D11
A0
A0 Arduino D10
10
A1 9
A1 Nano D9
A2 8
A2 D8
A3 7
A3 D7
A4 6
A4 D6

ATMEGA328P
A5 5
A5 D5

ATMEL
SDATA
A6 4
SCLK A6 D4
A7 3
A7 D3
2 N4
5V D2
0
RST RX / D0
C3 GND TX / D1
1
100nF
# 0 D L3
C1
U1
9 8 7 C L2 C0
C1
11
10
X1
X2
KBM
OSC
6
5 C2100nF
ARDUINO NANO
RXD
8
C2 X3 TXD
7 12
X4 DA N4
6 5 4 B L1 OE
13 100nF U5:A
U3
RTS
1 17 3 2
L0 Y1 A CTS
2 16 4 14
L1 Y2 B P0 SCL SCLK
3 2 1 A L0
L3
L2
3
4
Y3
Y4
C
D
15
14
U4:A
4049
5
6
P1
P2
SDA
15
SDATA
3 2 7 13
P3 INT
MM74C922 9
3

P4
U4:B
4049
10
P5 A0
1
11 2
P6 A1
5 4 12 3
P7 A2

U4:C
4049
PCF8574
C1

7 6
C2

C0

4049

#include <Wire.h>
int n;
char key;
int n4=8;
uint8_t data_pcf;
bool key_pad;
bool last_key_pad_state, current_key_pad_state;
void setup() {

Serial.begin(9600);
Wire.begin();
Wire.setClock(100000);
pinMode(n4,INPUT);
key_pad=false;
last_key_pad_state=LOW;

}
//---
void keypad_read_pcf()
{

Wire.requestFrom(0x20,1);//
data_pcf=Wire.read();
data_pcf= data_pcf&0x0F;

switch (data_pcf)
{
case 1:
key='#';
break;
case 2:
key='0';
break;
case 3:
key='*';
break;
//-----------------------------------
case 5:
key='9';
break;
case 6:
key='8';
break;
case 7:
key='7';
break;
//--------------------------------
case 9:
key='6';
break;
//-------
case 10:
key='5';
break;
case 11:
key='4';
break;
//----------------------------------
case 13:
key='3';
break;
//----------------
case 14:
key='2';
break;
case 15:
key='1';
break;

}
}
void key_read()
{
current_key_pad_state=digitalRead(n4);
if (last_key_pad_state!=current_key_pad_state)
{
last_key_pad_state=current_key_pad_state;
if(current_key_pad_state==HIGH)
{
key_pad=true;
}

void loop() {
key_read();
if( key_pad==true)
{
keypad_read_pcf();
Serial.println(key);
key_pad=false;
}
}

Vous aimerez peut-être aussi