- Vereiste componenten:
- Schakelschema:
- 8051 Microcontroller:
- 16x2 LCD:
- EM-18 RFID-lezer:
- Werking en Code toelichting:
Radiofrequentie-identificatie (RFID) maakt gebruik van radiofrequentie om informatie te lezen die is opgeslagen in een RFID-kaart of tag. In dit project gaan we naar Interface EM-18 RFID-lezer met 8051 microcontroller en RFID-kaartnummer weergeven op 16 * 2 LCD-scherm. Deze draadloze RF-identificatie wordt gebruikt in veel systemen zoals RFID-gebaseerd aanwezigheidssysteem, beveiligingssystemen, stemmachines enz. Dit project zal ook dienen als een goede interface van 16 * 2 LCD-schermen met 8051 microcontroller.
Vereiste componenten:
- 8051 microcontroller
- EM-18 RFID-lezer
- 16 * 2 LCD-scherm
- RFID-kaarten / -tags
- Potentiometer
- Doorverbindingsdraden
Schakelschema:
8051 Microcontroller:
8051-microcontroller is een 8-bits microcontroller met 128 bytes op chip RAM, 4K bytes op chip ROM, twee timers, een seriële poort en vier 8-bits poorten. 8052 microcontroller is een uitbreiding van microcontroller. Onderstaande tabel toont de vergelijking van 8051 gezinsleden.
Voorzien zijn van |
8051 |
8052 |
ROM (in bytes) |
4K |
8K |
RAM (bytes) |
128 |
256 |
Timers |
2 |
3 |
I / O-pinnen |
32 |
32 |
Seriële poort |
1 |
1 |
Bronnen onderbreken |
6 |
8 |
16x2 LCD:
16 * 2 LCD is een veelgebruikt beeldscherm voor embedded toepassingen. Hier is de korte uitleg over pinnen en werking van 16 * 2 LCD-scherm. Er zijn twee zeer belangrijke registers in het LCD-scherm. Ze zijn dataregister en commandoregister. Commandoregister wordt gebruikt om commando's te verzenden zoals duidelijke weergave, cursor thuis enz., Dataregister wordt gebruikt om gegevens te verzenden die op 16 * 2 LCD-schermen moeten worden weergegeven. Onderstaande tabel toont de pin beschrijving van 16 * 2 lcd.
Pin |
Symbool |
IO |
Omschrijving |
1 |
VSS |
- |
Grond |
2 |
Vdd |
- |
+ 5V voeding |
3 |
Vee |
- |
Voeding om het contrast te regelen |
4 |
RS |
ik |
RS = 0 voor commandoregister, RS = 1 voor gegevensregister |
5 |
RW |
ik |
R / W = 0 voor schrijven, R / W = 1 voor lezen |
6 |
E. |
IO |
Inschakelen |
7 |
D0 |
IO |
8-bits databus (LSB) |
8 |
D1 |
IO |
8-bits databus |
9 |
D2 |
IO |
8-bits databus |
10 |
D3 |
IO |
8-bits databus |
11 |
D4 |
IO |
8-bits databus |
12 |
D5 |
IO |
8-bits databus |
13 |
D6 |
IO |
8-bits databus |
14 |
D7 |
IO |
8-bits databus (MSB) |
15 |
EEN |
- |
+ 5V voor achtergrondverlichting |
16 |
K |
- |
Grond |
De onderstaande tabel toont veelgebruikte LCD-opdrachtcodes.
Code (hexadecimaal) |
Omschrijving |
01 |
Helder beeldscherm |
06 |
Verhogingscursor (verschuiving naar rechts) |
0A |
Display uit, cursor aan |
0C |
Display aan, cursor uit |
0F |
Scherm aan, cursor knippert |
80 |
Dwing de cursor naar het begin van 1 st lijn |
C0 |
Forceer de cursor naar het begin van de 2 e regel |
38 |
2 regels en 5 * 7 matrix |
EM-18 RFID-lezer:
EM-18 RFID-lezer werkt op 125 KHz en wordt geleverd met een chip-antenne en kan worden gevoed met 5V-voeding. Het biedt seriële output samen met een weigand output. Het bereik is ongeveer 8-12 cm. seriële communicatieparameters zijn 9600bps, 8 databits, 1 stopbit. De toepassingen zijn onder meer authenticatie, e-tolheffing op de weg, e-ticketing voor het openbaar vervoer, aanwezigheidssystemen enz. Bekijk hier alle RFID-projecten.
De output van de EM-18 RFID-lezer is in 12-cijferig ASCII-formaat. Van de 12 cijfers zijn de eerste 10 cijfers het kaartnummer en de laatste twee cijfers het XOR-resultaat van het kaartnummer. De laatste twee cijfers worden gebruikt voor foutcontrole.
Het kaartnummer is bijvoorbeeld 0200107D0D62 gelezen van de lezer en het kaartnummer op de kaart zal er als volgt uitzien.
02 - preambule
00107D0D = 1080589 in decimaal.
62 is de XOR-waarde voor (02 XOR 00 XOR 10 XOR 7D XOR 0D).
Vandaar het nummer op de kaart is 0001080589.
Werking en Code toelichting:
Het volledige C-programma en demonstratie video voor dit project wordt gegeven aan het einde van dit project. De code is opgesplitst in kleine, betekenisvolle brokken en wordt hieronder uitgelegd.
Voor 16 * 2 LCD-interface met 8051-microcontroller, moeten we pinnen definiëren waarop 16 * 2-lcd is aangesloten op 8051-microcontroller. RS pin van 16 * 2 lcd is verbonden met P3.7, RW pin van 16 * 2 lcd is verbonden met P3.6 en E pin van 16 * 2 lcd is verbonden met P3.5. Datapinnen zijn verbonden met poort 1 van microcontroller 8051.
sbit rs = P3 ^ 7; sbit rw = P3 ^ 6; sbit en = P3 ^ 5;
Vervolgens moeten we enkele functies definiëren die in het programma worden gebruikt. De vertragingsfunctie wordt gebruikt om een gespecificeerde vertraging te creëren. Cmdwrt- functie wordt gebruikt om opdrachten naar een 16 * 2 lcd-scherm te sturen. datawrt- functie wordt gebruikt om gegevens naar een 16 * 2 lcd-scherm te verzenden. De functie Rxdata wordt gebruikt om gegevens van de seriële poort te ontvangen.
ongeldige vertraging (unsigned int); void cmdwrt (unsigned char); void datawrt (unsigned char); char rxdata (ongeldig);
In dit deel van de code gaan we de 8051-microcontroller configureren voor seriële communicatie.
TMOD-register wordt geladen met 0x20 voor timer 1, modus 2 (automatisch herladen). SCON-register is geladen met 0x50 voor 8 databits, 1 stopbit en ontvangen ingeschakeld. TH1-register is geladen met 0xfd voor een baudrate van 9600 bits per seconde. TR1 = 1 wordt gebruikt om de timer te starten.
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1;
In dit deel van de code sturen we opdrachten naar 16 * 2 lcd. Commando's zoals leeg scherm increment cursor dwingen de cursor naar het begin van 1 ste regel ene na enige sommige specifieke tijdvertraging tot 16 * 2 LCD on wordt verzonden.
voor (i = 0; i <5; i ++) {cmdwrt (cmd); vertraging (1); }
In dit deel van de code ontvangen we de output van de EM-18 RFID- lezer via seriële interface van 8051 microcontroller en opgeslagen in een variabele. Count wordt gebruikt om het aantal ontvangen bytes bij te houden. Zodra alle 12 bytes aan gegevens zijn ontvangen, moeten we deze weergeven op een 16 * 2 lcd-scherm. Dit proces wordt voor altijd herhaald om verschillende kaarten te lezen.
while (1) {count = 0; cmdwrt (0xC2); while (count <12) {input = rxdata (); tel ++; } for (i = 0; i <12; i ++) {datawrt (invoer); vertraging (1); } vertraging (100); }
In dit deel van de code sturen we opdrachten naar een 16 * 2 lcd-scherm. De opdracht wordt gekopieerd naar poort 1 van 8051 microcontroller. RS is laag gemaakt voor het schrijven van opdrachten. RW is laag gemaakt voor schrijfbewerking. Hoge naar lage puls wordt toegepast op de inschakel (E) -pin om de opdrachtschrijfbewerking te starten.
void cmdwrt (unsigned char x) {P1 = x; rs = 0; rw = 0; en = 1; vertraging (1); en = 0; }
In dit deel van de code sturen we gegevens naar een 16 * 2 lcd-scherm. De gegevens worden gekopieerd naar poort 1 van 8051 microcontroller. RS wordt hoog gemaakt voor het schrijven van opdrachten. RW is laag gemaakt voor schrijfbewerking. Hoge naar lage puls wordt toegepast op de inschakel (E) -pin om de gegevensschrijfbewerking te starten.
void datawrt (unsigned char y) {P1 = y; rs = 1; rw = 0; en = 1; vertraging (1); en = 0; } Bekijk ook al onze RFID-projecten met andere microcontrollers.