- Componente necesare:
- Diagrama circuitului:
- Microcontroler 8051:
- 16x2 LCD:
- Cititor RFID EM-18:
- Explicare de lucru și cod:
Identificarea prin frecvență radio (RFID) utilizează frecvența radio pentru a citi informațiile stocate pe un card sau etichetă RFID. În acest proiect vom merge la Interface EM-18 cititor RFID cu microcontroler 8051 și afișăm numărul cardului RFID pe ecran LCD 16 * 2. Această identificare fără fir RF este utilizată în multe sisteme, cum ar fi sistemul de prezență bazat pe RFID, sistemele de securitate, mașinile de vot etc.
Componente necesare:
- 8051 microcontroler
- Cititor RFID EM-18
- Afisaj LCD 16 * 2
- Carduri / etichete RFID
- Potențiometru
- Sârme de jumper
Diagrama circuitului:
Microcontroler 8051:
8051 microcontroler este un microcontroler de 8 biți care are 128 de octeți pe cip RAM, 4K octeți pe cip ROM, două temporizatoare, un port serial și patru porturi de 8 biți. Microcontrolerul 8052 este o extensie a microcontrolerului. Tabelul de mai jos arată comparația a 8051 membri ai familiei.
Caracteristică |
8051 |
8052 |
ROM (în octeți) |
4K |
8K |
RAM (octeți) |
128 |
256 |
Cronometre |
2 |
3 |
Pinii I / O |
32 |
32 |
Port serial |
1 |
1 |
Surse de întrerupere |
6 |
8 |
16x2 LCD:
16 * 2 LCD este un ecran utilizat pe scară largă pentru aplicații încorporate. Iată o scurtă explicație despre pini și funcționarea afișajului LCD 16 * 2. Există două registre foarte importante în interiorul ecranului LCD. Sunt registre de date și registre de comenzi. Registrul de comandă este utilizat pentru a trimite comenzi precum afișarea clară, cursorul acasă etc., registrul de date este utilizat pentru a trimite date care urmează să fie afișate pe ecranul LCD 16 * 2. Tabelul de mai jos prezintă descrierea pinului a 16 * 2 lcd.
Pin |
Simbol |
I / O |
Descriere |
1 |
Vss |
- |
Sol |
2 |
Vdd |
- |
Alimentare + 5V |
3 |
Vee |
- |
Alimentare pentru controlul contrastului |
4 |
RS |
Eu |
RS = 0 pentru registrul de comandă, RS = 1 pentru registrul de date |
5 |
RW |
Eu |
R / W = 0 pentru scriere, R / W = 1 pentru citire |
6 |
E |
I / O |
Permite |
7 |
D0 |
I / O |
Magistrală de date pe 8 biți (LSB) |
8 |
D1 |
I / O |
Magistrală de date pe 8 biți |
9 |
D2 |
I / O |
Magistrală de date pe 8 biți |
10 |
D3 |
I / O |
Magistrală de date pe 8 biți |
11 |
D4 |
I / O |
Magistrală de date pe 8 biți |
12 |
D5 |
I / O |
Magistrală de date pe 8 biți |
13 |
D6 |
I / O |
Magistrală de date pe 8 biți |
14 |
D7 |
I / O |
Magistrală de date pe 8 biți (MSB) |
15 |
A |
- |
+ 5V pentru iluminare din spate |
16 |
K |
- |
Sol |
Tabelul de mai jos prezintă codurile de comandă LCD utilizate frecvent.
Cod (hex) |
Descriere |
01 |
Ștergeți ecranul de afișare |
06 |
Cursor de incrementare (schimbare dreapta) |
0A |
Afișare dezactivată, cursor activat |
0C |
Afișare activată, cursor oprit |
0F |
Afișarea este activată, cursorul clipește |
80 |
Forțați cursorul la începutul primei linii |
C0 |
Forțați cursorul să înceapă a 2 -a linie |
38 |
2 linii și 5 * 7 matrice |
Cititor RFID EM-18:
Cititorul RFID EM-18 funcționează la 125 KHz și vine cu o antenă on-chip și poate fi alimentat cu o sursă de alimentare de 5V. Oferă ieșire serială împreună cu ieșirea weigand. Gama este de aproximativ 8-12cm. parametrii de comunicare serială sunt 9600bps, 8 biți de date, 1 bit de oprire. Aplicațiile sale includ autentificare, tarifare pentru drumurile cu taxă electronică, biletarea electronică pentru transportul public, sisteme de prezență etc. Verificați aici toate proiectele RFID.
Ieșirea furnizată de cititorul RFID EM-18 este în format ASCII cu 12 cifre. Din cele 12 cifre, primele 10 cifre sunt numărul cardului, iar ultimele două cifre sunt rezultatul XOR al numărului cardului. Ultimele două cifre sunt utilizate pentru verificarea erorilor.
De exemplu, numărul cardului este 0200107D0D62 citit de pe cititor, apoi numărul cardului de pe card va fi cel de mai jos.
02 - preambul
00107D0D = 1080589 în zecimal.
62 este valoarea XOR pentru (02 XOR 00 XOR 10 XOR 7D XOR 0D).
Prin urmare, numărul de pe card este 0001080589.
Explicare de lucru și cod:
Programul complet C și videoclipul demonstrativ pentru acest proiect sunt prezentate la sfârșitul acestui proiect. Codul este împărțit în mici bucăți semnificative și explicat mai jos.
Pentru interfața LCD 16 * 2 cu microcontrolerul 8051, trebuie să definim pinii pe care 16 * 2 lcd este conectat la microcontrolerul 8051. Pinul RS de 16 * 2 lcd este conectat la P3.7, pinul RW de 16 * 2 lcd este conectat la P3.6 și pinul E de 16 * 2 lcd este conectat la P3.5. Pinii de date sunt conectați la portul 1 al microcontrolerului 8051.
sbit rs = P3 ^ 7; sbit rw = P3 ^ 6; sbit en = P3 ^ 5;
În continuare trebuie să definim câteva funcții care sunt utilizate în program. Funcția de întârziere este utilizată pentru a crea întârzierea specificată. Funcția Cmdwrt este utilizată pentru a trimite comenzi către un ecran LCD 16 * 2. funcția datawrt este utilizată pentru a trimite date către un ecran LCD 16 * 2. Funcția Rxdata este utilizată pentru a primi date de la portul serial.
întârziere nulă (int semnat); void cmdwrt (caracter nesemnat); void datawrt (caracter nesemnat); char rxdata (nul);
În această parte a codului vom configura microcontrolerul 8051 pentru comunicații seriale.
Registrul TMOD este încărcat cu 0x20 pentru temporizatorul 1, modul 2 (reîncărcare automată). Registrul SCON este încărcat cu 0x50 pentru 8 biți de date, 1 bit de oprire și recepție activată. Registrul TH1 este încărcat cu 0xfd pentru o rată de transmisie de 9600 biți pe secundă. TR1 = 1 este utilizat pentru a porni cronometrul.
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1;
În această parte a codului, trimitem comenzi către 16 * 2 lcd. Comenzi precum afișarea clară, cursorul incremental, forțarea cursorului la începutul primei linii sunt trimise pe afișaj 16 * 2 lcd unul câte unul după o anumită întârziere specificată.
pentru (i = 0; i <5; i ++) {cmdwrt (cmd); întârziere (1); }
În această parte a codului primim ieșirea cititorului RFID EM-18 prin interfața serială a microcontrolerului 8051 și stocată într-o variabilă. Contele este folosit pentru a ține evidența numărului de octeți primiți. Odată ce toți cei 12 biți de date sunt primiți, trebuie să-l afișăm pe un ecran LCD 16 * 2. Acest proces se repetă pentru totdeauna pentru a citi diferite cărți.
while (1) {count = 0; cmdwrt (0xC2); while (număr <12) {input = rxdata (); conta ++; } pentru (i = 0; i <12; i ++) {datawrt (intrare); întârziere (1); } întârziere (100); }
În această parte a codului, trimitem comenzi către un ecran LCD de 16 * 2. Comanda este copiată în portul 1 al microcontrolerului 8051. RS este redus pentru scrierea comenzii. RW este redus pentru operația de scriere. Pulsul de la mare la mic se aplică pe pinul de activare (E) pentru a începe operația de scriere a comenzii.
void cmdwrt (caracter nesemnat x) {P1 = x; rs = 0; rw = 0; ro = 1; întârziere (1); ro = 0; }
În această parte a codului, trimitem date către un ecran LCD de 16 * 2. Datele sunt copiate în portul 1 al microcontrolerului 8051. RS este ridicat pentru scrierea comenzilor. RW este redus pentru operația de scriere. Pulsul de mare la scăzut este aplicat pe pinul de activare (E) pentru a începe operația de scriere a datelor.
void datawrt (caracter nesemnat y) {P1 = y; rs = 1; rw = 0; ro = 1; întârziere (1); ro = 0; } De asemenea, verificați toate proiectele noastre RFID cu alte microcontrolere.