- Các thành phần bắt buộc:
- Sơ đồ mạch:
- Bộ vi điều khiển 8051:
- LCD 16x2:
- Đầu đọc RFID EM-18:
- Làm việc và giải thích mã:
Nhận dạng tần số vô tuyến (RFID) sử dụng tần số vô tuyến để đọc thông tin được lưu trữ trong thẻ hoặc thẻ RFID. Trong dự án này, chúng ta sẽ đi đến đầu đọc RFID Giao diện EM-18 với vi điều khiển 8051 và hiển thị số thẻ RFID trên màn hình LCD 16 * 2. Nhận dạng RF không dây này được sử dụng trong nhiều hệ thống như Hệ thống chấm công dựa trên RFID, hệ thống an ninh, máy bỏ phiếu, v.v. Dự án này cũng sẽ đóng vai trò là giao diện thích hợp của LCD 16 * 2 với bộ vi điều khiển 8051.
Các thành phần bắt buộc:
- Bộ vi điều khiển 8051
- Đầu đọc RFID EM-18
- Màn hình LCD 16 * 2
- Thẻ / thẻ RFID
- Chiết áp
- Dây nhảy
Sơ đồ mạch:
Bộ vi điều khiển 8051:
Vi điều khiển 8051 là một vi điều khiển 8 bit có 128 byte RAM trên chip, 4K byte ROM trên chip, hai bộ định thời, một cổng nối tiếp và bốn cổng 8 bit. Vi điều khiển 8052 là một phần mở rộng của vi điều khiển. Bảng dưới đây cho thấy sự so sánh của các thành viên gia đình 8051.
Đặc tính |
8051 |
8052 |
ROM (tính bằng byte) |
4K |
8 nghìn |
RAM (byte) |
128 |
256 |
Hẹn giờ |
2 |
3 |
Chân I / O |
32 |
32 |
Cổng nối tiếp |
1 |
1 |
Nguồn gián đoạn |
6 |
số 8 |
LCD 16x2:
LCD 16 * 2 là màn hình được sử dụng rộng rãi cho các ứng dụng nhúng. Dưới đây là giải thích ngắn gọn về các chân và hoạt động của màn hình LCD 16 * 2. Có hai thanh ghi rất quan trọng bên trong màn hình LCD. Chúng là thanh ghi dữ liệu và thanh ghi lệnh. Thanh ghi lệnh được sử dụng để gửi các lệnh như hiển thị rõ ràng, con trỏ ở nhà, v.v., thanh ghi dữ liệu được sử dụng để gửi dữ liệu được hiển thị trên màn hình LCD 16 * 2. Bảng bên dưới hiển thị mô tả chân của màn hình LCD 16 * 2.
Ghim |
Biểu tượng |
I / O |
Sự miêu tả |
1 |
Vss |
- |
Đất |
2 |
Vdd |
- |
Nguồn điện + 5V |
3 |
Vee |
- |
Nguồn cung cấp để kiểm soát độ tương phản |
4 |
RS |
Tôi |
RS = 0 cho thanh ghi lệnh, RS = 1 cho thanh ghi dữ liệu |
5 |
RW |
Tôi |
R / W = 0 để ghi, R / W = 1 để đọc |
6 |
E |
I / O |
Kích hoạt |
7 |
D0 |
I / O |
Bus dữ liệu 8-bit (LSB) |
số 8 |
D1 |
I / O |
Xe buýt dữ liệu 8 bit |
9 |
D2 |
I / O |
Xe buýt dữ liệu 8 bit |
10 |
D3 |
I / O |
Xe buýt dữ liệu 8 bit |
11 |
D4 |
I / O |
Xe buýt dữ liệu 8 bit |
12 |
D5 |
I / O |
Xe buýt dữ liệu 8 bit |
13 |
D6 |
I / O |
Xe buýt dữ liệu 8 bit |
14 |
D7 |
I / O |
Bus dữ liệu 8 bit (MSB) |
15 |
A |
- |
+ 5V cho đèn nền |
16 |
K |
- |
Đất |
Bảng dưới đây hiển thị các mã lệnh LCD thường được sử dụng.
Mã (hex) |
Sự miêu tả |
01 |
Màn hình hiển thị rõ ràng |
06 |
Con trỏ tăng dần (dịch phải) |
0A |
Tắt hiển thị, bật con trỏ |
0C |
Bật hiển thị, tắt con trỏ |
0F |
Bật hiển thị, con trỏ nhấp nháy |
80 |
Buộc con trỏ đến đầu dòng thứ nhất |
C0 |
Buộc con trỏ đến đầu dòng thứ 2 |
38 |
2 dòng và ma trận 5 * 7 |
Đầu đọc RFID EM-18:
Đầu đọc RFID EM-18 hoạt động ở 125 KHz và nó đi kèm với một ăng-ten trên chip và nó có thể được cấp nguồn với nguồn điện 5V. Nó cung cấp đầu ra nối tiếp cùng với đầu ra cân và đầu ra. Phạm vi là khoảng 8-12cm. thông số giao tiếp nối tiếp là 9600bps, 8 bit dữ liệu, 1 bit dừng. Các ứng dụng của nó bao gồm Xác thực, định giá phí đường bộ điện tử, bán vé điện tử cho phương tiện giao thông công cộng, hệ thống tham dự, v.v. Kiểm tra tất cả các Dự án RFID tại đây.
Đầu ra được cung cấp bởi đầu đọc RFID EM-18 ở định dạng ASCII 12 chữ số. Trong số 12 chữ số, 10 chữ số đầu tiên là số thẻ và hai chữ số cuối là kết quả XOR của số thẻ. Hai chữ số cuối cùng được sử dụng để kiểm tra lỗi.
Ví dụ số thẻ là 0200107D0D62 đọc từ đầu đọc thì mã số thẻ trên thẻ sẽ như bên dưới.
02 - lời mở đầu
00107D0D = 1080589 ở dạng thập phân.
62 là giá trị XOR cho (02 XOR 00 XOR 10 XOR 7D XOR 0D).
Do đó, số trên thẻ là 0001080589.
Làm việc và giải thích mã:
Các hoàn thành chương trình C và trình diễn video cho dự án này được đưa ra vào cuối của dự án này. Mã được chia thành các đoạn nhỏ có ý nghĩa và được giải thích bên dưới.
Đối với giao tiếp LCD 16 * 2 với vi điều khiển 8051, chúng ta phải xác định các chân mà trên đó LCD 16 * 2 được kết nối với vi điều khiển 8051. Chân RS của LCD 16 * 2 được kết nối với P3.7, chân RW của LCD 16 * 2 được kết nối với P3.6 và chân E của LCD 16 * 2 được kết nối với P3.5. Các chân dữ liệu được kết nối với cổng 1 của vi điều khiển 8051.
sbit rs = P3 ^ 7; sbit rw = P3 ^ 6; sbit en = P3 ^ 5;
Tiếp theo chúng ta phải xác định một số hàm được sử dụng trong chương trình. Hàm Delay được sử dụng để tạo thời gian trễ được chỉ định. Chức năng cmdwrt được sử dụng để gửi lệnh đến màn hình LCD 16 * 2. Hàm datawrt được sử dụng để gửi dữ liệu đến màn hình LCD 16 * 2. Hàm Rxdata được sử dụng để nhận dữ liệu từ cổng nối tiếp.
void delay (unsigned int); void cmdwrt (char không dấu); void datawrt (không dấu char); char rxdata (void);
Trong phần này của mã, chúng ta sẽ cấu hình vi điều khiển 8051 cho giao tiếp nối tiếp.
Thanh ghi TMOD được tải với 0x20 cho bộ định thời 1, chế độ 2 (tự động tải lại). Thanh ghi SCON được tải với 0x50 cho 8 bit dữ liệu, 1 bit dừng và kích hoạt nhận. Thanh ghi TH1 được tải với 0xfd cho tốc độ truyền 9600 bit mỗi giây. TR1 = 1 được sử dụng để khởi động bộ định thời.
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1;
Trong phần này của mã, chúng tôi đang gửi lệnh đến màn hình LCD 16 * 2. Các lệnh như hiển thị rõ ràng, con trỏ tăng dần, buộc con trỏ đến đầu dòng thứ nhất được gửi lần lượt đến màn hình LCD 16 * 2 sau một số thời gian trễ được chỉ định.
for (i = 0; i <5; i ++) {cmdwrt (cmd); trì hoãn (1); }
Trong phần mã này, chúng ta đang nhận đầu ra của đầu đọc RFID EM-18 thông qua giao diện nối tiếp của vi điều khiển 8051 và được lưu trữ trong một biến. Số đếm được sử dụng để theo dõi số byte nhận được. Khi tất cả 12byte dữ liệu được nhận, tiếp theo chúng ta phải hiển thị nó trên màn hình LCD 16 * 2. Quá trình này được lặp lại mãi mãi để đọc các thẻ khác nhau.
while (1) {count = 0; cmdwrt (0xC2); while (count <12) {input = rxdata (); tính ++; } for (i = 0; i <12; i ++) {datawrt (input); trì hoãn (1); } delay (100); }
Trong phần này của mã, chúng tôi đang gửi các lệnh đến màn hình LCD 16 * 2. Lệnh được sao chép vào cổng 1 của vi điều khiển 8051. RS được đặt ở mức thấp để ghi lệnh. RW được đặt ở mức thấp cho hoạt động ghi. Xung từ cao xuống thấp được áp dụng trên chân bật (E) để bắt đầu thao tác ghi lệnh.
void cmdwrt (unsigned char x) {P1 = x; rs = 0; rw = 0; vi = 1; trì hoãn (1); vi = 0; }
Trong phần này của mã, chúng tôi đang gửi dữ liệu đến màn hình LCD 16 * 2. Dữ liệu được sao chép vào cổng 1 của vi điều khiển 8051. RS được tạo ra ở mức cao để ghi lệnh. RW được đặt ở mức thấp cho hoạt động ghi. Xung từ cao xuống thấp được áp dụng trên chân bật (E) để bắt đầu thao tác ghi dữ liệu.
void datawrt (unsigned char y) {P1 = y; rs = 1; rw = 0; vi = 1; trì hoãn (1); vi = 0; } Ngoài ra, hãy kiểm tra tất cả các dự án RFID của chúng tôi bằng các bộ vi điều khiển khác.