- Wymagane składniki:
- Schemat obwodu:
- Mikrokontroler 8051:
- Wyświetlacz LCD 16x2:
- Czytnik RFID EM-18:
- Działanie i wyjaśnienie kodu:
Identyfikacja radiowa (RFID) wykorzystuje częstotliwość radiową do odczytywania informacji przechowywanych na karcie lub znaczniku RFID. W tym projekcie zamierzamy użyć czytnika RFID interfejsu EM-18 z mikrokontrolerem 8051 i wyświetlić numer karty RFID na wyświetlaczu LCD 16 * 2. Ta bezprzewodowa identyfikacja RF jest używana w wielu systemach, takich jak system obecności oparty na RFID, systemy bezpieczeństwa, maszyny do głosowania itp. Projekt ten będzie również służył jako właściwe połączenie wyświetlacza LCD 16 * 2 z mikrokontrolerem 8051.
Wymagane składniki:
- Mikrokontroler 8051
- Czytnik RFID EM-18
- Wyświetlacz LCD 16 * 2
- Karty / tagi RFID
- Potencjometr
- Przewody połączeniowe
Schemat obwodu:
Mikrokontroler 8051:
Mikrokontroler 8051 to 8-bitowy mikrokontroler, który ma 128 bajtów pamięci RAM w chipie, 4 bajty pamięci ROM chipa, dwa timery, jeden port szeregowy i cztery porty 8-bitowe. Mikrokontroler 8052 jest rozszerzeniem mikrokontrolera. Poniższa tabela przedstawia porównanie 8051 członków rodziny.
Funkcja |
8051 |
8052 |
ROM (w bajtach) |
4K |
8K |
RAM (bajty) |
128 |
256 |
Timery |
2 |
3 |
Piny I / O |
32 |
32 |
Port szeregowy |
1 |
1 |
Źródła przerwań |
6 |
8 |
Wyświetlacz LCD 16x2:
16 * 2 LCD to wyświetlacz szeroko stosowany w aplikacjach wbudowanych. Oto krótkie wyjaśnienie dotyczące pinów i działania wyświetlacza LCD 16 * 2. Wewnątrz LCD znajdują się dwa bardzo ważne rejestry. Są to rejestr danych i rejestr poleceń. Rejestr poleceń służy do wysyłania poleceń, takich jak czytelny wyświetlacz, kursor w domu itp., Rejestr danych służy do wysyłania danych, które mają być wyświetlane na wyświetlaczu LCD 16 * 2. Poniższa tabela przedstawia opis pinów 16 * 2 lcd.
Kołek |
Symbol |
I / O |
Opis |
1 |
Vss |
- |
Ziemia |
2 |
Vdd |
- |
Zasilanie + 5V |
3 |
Vee |
- |
Zasilacz do kontroli kontrastu |
4 |
RS |
ja |
RS = 0 dla rejestru poleceń, RS = 1 dla rejestru danych |
5 |
RW |
ja |
R / W = 0 do zapisu, R / W = 1 do odczytu |
6 |
mi |
I / O |
Włączyć |
7 |
D0 |
I / O |
8-bitowa magistrala danych (LSB) |
8 |
D1 |
I / O |
8-bitowa magistrala danych |
9 |
D2 |
I / O |
8-bitowa magistrala danych |
10 |
D3 |
I / O |
8-bitowa magistrala danych |
11 |
D4 |
I / O |
8-bitowa magistrala danych |
12 |
D5 |
I / O |
8-bitowa magistrala danych |
13 |
D6 |
I / O |
8-bitowa magistrala danych |
14 |
D7 |
I / O |
8-bitowa magistrala danych (MSB) |
15 |
ZA |
- |
+ 5V dla podświetlenia |
16 |
K. |
- |
Ziemia |
W poniższej tabeli przedstawiono często używane kody poleceń na wyświetlaczu LCD.
Kod (szesnastkowo) |
Opis |
01 |
Czytelny ekran wyświetlacza |
06 |
Kursor przyrostowy (przesunięcie w prawo) |
0A |
Wyświetlacz wyłączony, kursor włączony |
0C |
Wyświetlacz włączony, kursor wyłączony |
0F |
Wyświetlacz włączony, kursor miga |
80 |
Wymusić kursor począwszy od 1 st linii |
C0 |
Wymusić kursor beginningof 2 nd linii |
38 |
2 linie i matryca 5 * 7 |
Czytnik RFID EM-18:
Czytnik RFID EM-18 pracuje z częstotliwością 125 KHz i jest wyposażony w antenę wbudowaną w chip i może być zasilany napięciem 5V. Zapewnia wyjście szeregowe wraz z wyjściem wagi. Zasięg to około 8-12cm. parametry komunikacji szeregowej to 9600bps, 8 bitów danych, 1 bit stopu. Jego zastosowania obejmują uwierzytelnianie, elektroniczne opłaty drogowe, e-bilety dla transportu publicznego, systemy obecności itp. Sprawdź tutaj wszystkie projekty RFID.
Wyjście dostarczane przez czytnik RFID EM-18 jest w 12-cyfrowym formacie ASCII. Z 12 cyfr pierwszych 10 cyfr to numer karty, a dwie ostatnie to wynik XOR numeru karty. Ostatnie dwie cyfry służą do sprawdzania błędów.
Np. Numer karty to 0200107D0D62 odczytany z czytnika to numer karty na karcie będzie taki jak poniżej.
02 - preambuła
00107D0D = 1080589 dziesiętnie.
62 to wartość XOR dla (02 XOR 00 XOR 10 XOR 7D XOR 0D).
Stąd numer na karcie to 0001080589.
Działanie i wyjaśnienie kodu:
Kompletny program C i demonstracja wideo dla tego projektu jest podany na końcu tego projektu. Kod jest podzielony na małe znaczące fragmenty i wyjaśniony poniżej.
Dla interfejsu 16 * 2 LCD z mikrokontrolerem 8051, musimy zdefiniować piny, na których 16 * 2 lcd jest podłączony do mikrokontrolera 8051. Pin RS 16 * 2 lcd jest podłączony do P3.7, pin RW 16 * 2 lcd jest podłączony do P3.6, a pin E 16 * 2 lcd jest podłączony do P3.5. Piny danych są podłączone do portu 1 mikrokontrolera 8051.
sbit rs = P3 ^ 7; sbit rw = P3 ^ 6; sbit en = P3 ^ 5;
Następnie musimy zdefiniować funkcje, które są używane w programie. Funkcja opóźnienia służy do tworzenia określonego opóźnienia czasowego. Funkcja Cmdwrt służy do wysyłania poleceń do wyświetlacza LCD 16 * 2. Funkcja datawrt służy do wysyłania danych do wyświetlacza LCD 16 * 2. Funkcja Rxdata służy do odbioru danych z portu szeregowego.
void delay (unsigned int); void cmdwrt (znak bez znaku); void datawrt (unsigned char); char rxdata (void);
W tej części kodu skonfigurujemy mikrokontroler 8051 do komunikacji szeregowej.
Rejestr TMOD jest ładowany z 0x20 dla timera 1, tryb 2 (automatyczne przeładowanie). Rejestr SCON jest ładowany z 0x50 dla 8 bitów danych, 1 bit stopu i włączony odbiór. Rejestr TH1 jest ładowany z 0xfd dla szybkości transmisji 9600 bitów na sekundę. TR1 = 1 służy do uruchomienia timera.
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1;
W tej części kodu wysyłamy komendy na 16 * 2 lcd. Polecenia takie jak przejrzysty wyświetlacz, przyrost kursora wymusić kursor począwszy od 1 st linii są wysyłane do jednego wyświetlacza lcd 16 * 2 jeden po pewnym jakiś określony czas opóźnienia.
for (i = 0; i <5; i ++) {cmdwrt (cmd); opóźnienie (1); }
W tej części kodu otrzymujemy wyjście czytnika RFID EM-18 poprzez interfejs szeregowy mikrokontrolera 8051 i zapisane w zmiennej. Licznik służy do śledzenia liczby odebranych bajtów. Po odebraniu wszystkich 12 bajtów danych musimy je wyświetlić na wyświetlaczu LCD 16 * 2. Ten proces jest powtarzany w nieskończoność, aby czytać różne karty.
while (1) {count = 0; cmdwrt (0xC2); while (liczba <12) {wejście = rxdata (); liczyć ++; } for (i = 0; i <12; i ++) {datawrt (wejście); opóźnienie (1); } opóźnienie (100); }
W tej części kodu wysyłamy komendy na wyświetlacz LCD 16 * 2. Polecenie jest kopiowane do portu 1 mikrokontrolera 8051. RS jest niski do zapisu poleceń. RW ma niski poziom dla operacji zapisu. Impuls od wysokiego do niskiego poziomu jest stosowany na pinie włączania (E) w celu rozpoczęcia operacji zapisu poleceń.
void cmdwrt (unsigned char x) {P1 = x; rs = 0; rw = 0; en = 1; opóźnienie (1); en = 0; }
W tej części kodu wysyłamy dane do wyświetlacza LCD 16 * 2. Dane są kopiowane do portu 1 mikrokontrolera 8051. RS jest ustawione na wysokim poziomie do zapisu poleceń. RW ma niski poziom dla operacji zapisu. Impuls od wysokiego do niskiego jest stosowany na pinie włączania (E) w celu rozpoczęcia operacji zapisu danych.
void datawrt (unsigned char y) {P1 = y; rs = 1; rw = 0; en = 1; opóźnienie (1); en = 0; } Sprawdź również wszystkie nasze projekty RFID z innymi mikrokontrolerami.