- Composants requis:
- Schéma:
- Microcontrôleur 8051:
- Écran LCD 16x2:
- Lecteur RFID EM-18:
- Explication du fonctionnement et du code:
L'identification par radiofréquence (RFID) utilise la radiofréquence pour lire les informations stockées sur une carte ou une étiquette RFID. Dans ce projet, nous allons utiliser un lecteur RFID EM-18 avec un microcontrôleur 8051 et afficher le numéro de carte RFID sur un écran LCD 16 * 2. Cette identification RF sans fil est utilisée dans de nombreux systèmes tels que le système de présence basé sur RFID, les systèmes de sécurité, les machines à voter, etc. Ce projet servira également d'interface appropriée de 16 * 2 LCD avec le microcontrôleur 8051.
Composants requis:
- Microcontrôleur 8051
- Lecteur RFID EM-18
- Écran LCD 16 * 2
- Cartes / étiquettes RFID
- Potentiomètre
- Fils de cavalier
Schéma:
Microcontrôleur 8051:
Le microcontrôleur 8051 est un microcontrôleur 8 bits qui a 128 octets de RAM sur puce, 4K octets de ROM sur puce, deux minuteries, un port série et quatre ports 8 bits. Le microcontrôleur 8052 est une extension du microcontrôleur. Le tableau ci-dessous montre la comparaison de 8051 membres de la famille.
Fonctionnalité |
8051 |
8052 |
ROM (en octets) |
4K |
8K |
RAM (octets) |
128 |
256 |
Minuteries |
2 |
3 |
Broches E / S |
32 |
32 |
Port série |
1 |
1 |
Sources d'interruption |
6 |
8 |
Écran LCD 16x2:
L'écran LCD 16 * 2 est un écran largement utilisé pour les applications intégrées. Voici une brève explication sur les broches et le fonctionnement de l'écran LCD 16 * 2. Il y a deux registres très importants à l'intérieur de l'écran LCD. Ce sont un registre de données et un registre de commande. Le registre de commande est utilisé pour envoyer des commandes telles que l'affichage clair, le curseur à la maison, etc., le registre de données est utilisé pour envoyer des données qui doivent être affichées sur l'écran LCD 16 * 2. Le tableau ci-dessous montre la description des broches de 16 * 2 lcd.
Épingle |
symbole |
E / S |
La description |
1 |
Vss |
- |
Sol |
2 |
Vdd |
- |
Alimentation + 5V |
3 |
Vee |
- |
Alimentation pour contrôler le contraste |
4 |
RS |
je |
RS = 0 pour le registre de commande, RS = 1 pour registre de données |
5 |
RW |
je |
R / W = 0 pour l'écriture, R / W = 1 pour la lecture |
6 |
E |
E / S |
Activer |
sept |
D0 |
E / S |
Bus de données 8 bits (LSB) |
8 |
D1 |
E / S |
Bus de données 8 bits |
9 |
D2 |
E / S |
Bus de données 8 bits |
dix |
D3 |
E / S |
Bus de données 8 bits |
11 |
D4 |
E / S |
Bus de données 8 bits |
12 |
D5 |
E / S |
Bus de données 8 bits |
13 |
D6 |
E / S |
Bus de données 8 bits |
14 |
D7 |
E / S |
Bus de données 8 bits (MSB) |
15 |
UNE |
- |
+ 5V pour le rétroéclairage |
16 |
K |
- |
Sol |
Le tableau ci-dessous montre les codes de commande LCD fréquemment utilisés.
Code (hexadécimal) |
La description |
01 |
Écran d'affichage clair |
06 |
Curseur incrémental (décalage vers la droite) |
0A |
Affichage désactivé, curseur activé |
0C |
Affichage activé, curseur désactivé |
0F |
Affichage allumé, le curseur clignote |
80 |
Force le curseur au début de la 1ère ligne |
C0 |
Force le curseur au début de la 2 ème ligne |
38 |
2 lignes et matrice 5 * 7 |
Lecteur RFID EM-18:
Le lecteur RFID EM-18 fonctionne à 125 KHz et il est livré avec une antenne sur puce et il peut être alimenté avec une alimentation 5V. Il fournit une sortie série avec une sortie weigand. La portée est d'environ 8 à 12 cm. les paramètres de communication série sont 9600bps, 8 bits de données, 1 bit d'arrêt. Ses applications incluent l'authentification, la tarification routière électronique, la billetterie électronique pour les transports publics, les systèmes de présence, etc.
La sortie fournie par le lecteur RFID EM-18 est au format ASCII à 12 chiffres. Sur 12 chiffres, les 10 premiers chiffres sont le numéro de carte et les deux derniers chiffres sont le résultat XOR du numéro de carte. Les deux derniers chiffres sont utilisés pour la vérification des erreurs.
Par exemple, le numéro de carte est 0200107D0D62 lu sur le lecteur, le numéro de carte sur la carte sera comme ci-dessous.
02 - préambule
00107D0D = 1080589 en décimal.
62 est la valeur XOR pour (02 XOR 00 XOR 10 XOR 7D XOR 0D).
Le numéro sur la carte est donc 0001080589.
Explication du fonctionnement et du code:
Le programme C complet et la vidéo de démonstration de ce projet sont donnés à la fin de ce projet. Le code est divisé en petits morceaux significatifs et expliqué ci-dessous.
Pour l'interfaçage LCD 16 * 2 avec le microcontrôleur 8051, nous devons définir des broches sur lesquelles 16 * 2 LCD est connecté au microcontrôleur 8051. La broche RS de 16 * 2 lcd est connectée à P3.7, la broche RW de 16 * 2 lcd est connectée à P3.6 et la broche E de 16 * 2 lcd est connectée à P3.5. Les broches de données sont connectées au port 1 du microcontrôleur 8051.
sbit rs = P3 ^ 7; sbit rw = P3 ^ 6; sbit en = P3 ^ 5;
Ensuite, nous devons définir certaines fonctions qui sont utilisées dans le programme. La fonction de retard est utilisée pour créer un délai spécifié. La fonction Cmdwrt est utilisée pour envoyer des commandes à un écran LCD 16 * 2. La fonction datawrt est utilisée pour envoyer des données à un écran LCD 16 * 2. La fonction Rxdata est utilisée pour recevoir des données du port série.
délai d'annulation (int non signé); void cmdwrt (caractère non signé); void datawrt (caractère non signé); char rxdata (void);
Dans cette partie du code, nous allons configurer le microcontrôleur 8051 pour la communication série.
Le registre TMOD est chargé avec 0x20 pour le temporisateur 1, mode 2 (rechargement automatique). Le registre SCON est chargé avec 0x50 pour 8 bits de données, 1 bit d'arrêt et la réception est activée. Le registre TH1 est chargé avec 0xfd pour une vitesse de transmission de 9600 bits par seconde. TR1 = 1 est utilisé pour démarrer la minuterie.
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1;
Dans cette partie du code, nous envoyons des commandes à 16 * 2 lcd. Des commandes telles que l'affichage clair, incrémenter le curseur, forcer le curseur au début de la 1ère ligne sont envoyées à l'écran LCD 16 * 2 une par une après un certain délai spécifié.
pour (i = 0; i <5; i ++) {cmdwrt (cmd); retard (1); }
Dans cette partie du code, nous recevons la sortie du lecteur RFID EM-18 via l'interface série du microcontrôleur 8051 et stockée dans une variable. Count est utilisé pour suivre le nombre d'octets reçus. Une fois que tous les 12 octets de données sont reçus, nous devons ensuite les afficher sur un écran LCD 16 * 2. Ce processus est répété pour toujours afin de lire différentes cartes.
while (1) {count = 0; cmdwrt (0xC2); while (count <12) {input = rxdata (); count ++; } pour (i = 0; i <12; i ++) {datawrt (entrée); retard (1); } retard (100); }
Dans cette partie du code, nous envoyons des commandes à un écran LCD 16 * 2. La commande est copiée sur le port 1 du microcontrôleur 8051. RS est rendu bas pour l'écriture de commande. RW est rendu bas pour l'opération d'écriture. L'impulsion de haut en bas est appliquée sur la broche d'activation (E) pour démarrer l'opération d'écriture de commande.
void cmdwrt (caractère non signé x) {P1 = x; rs = 0; rw = 0; en = 1; retard (1); en = 0; }
Dans cette partie du code, nous envoyons des données à un écran LCD 16 * 2. Les données sont copiées sur le port 1 du microcontrôleur 8051. RS est rendu haut pour l'écriture de commande. RW est rendu bas pour l'opération d'écriture. L'impulsion de haut en bas est appliquée sur la broche d'activation (E) pour démarrer l'opération d'écriture de données.
void datawrt (caractère non signé y) {P1 = y; rs = 1; rw = 0; en = 1; retard (1); en = 0; } Vérifiez également tous nos projets RFID avec d'autres microcontrôleurs.