- Необходимые компоненты:
- Принципиальная электрическая схема:
- 8051 Микроконтроллер:
- ЖК-дисплей 16x2:
- Считыватель RFID EM-18:
- Работа и объяснение кода:
Радиочастотная идентификация (RFID) использует радиочастоты для считывания информации, хранящейся на RFID-карте или метке. В этом проекте мы собираемся использовать RFID-считыватель EM-18 с микроконтроллером 8051 и отображать номер RFID-карты на ЖК-дисплее 16 * 2. Эта беспроводная RF-идентификация используется во многих системах, таких как система посещаемости на основе RFID, системы безопасности, машины для голосования и т. Д. Этот проект также будет служить надлежащим интерфейсом ЖК-дисплея 16 * 2 с микроконтроллером 8051.
Необходимые компоненты:
- 8051 микроконтроллер
- Считыватель RFID EM-18
- ЖК-дисплей 16 * 2
- RFID карты / метки
- Потенциометр
- Перемычки
Принципиальная электрическая схема:
8051 Микроконтроллер:
Микроконтроллер 8051 - это 8-битный микроконтроллер, который имеет 128 байт встроенной RAM, 4K байтов встроенной ROM, два таймера, один последовательный порт и четыре 8-битных порта. Микроконтроллер 8052 является продолжением микроконтроллера. В таблице ниже показано сравнение 8051 члена семьи.
Характерная черта |
8051 |
8052 |
ROM (в байтах) |
4K |
8K |
RAM (байты) |
128 |
256 |
Таймеры |
2 |
3 |
Контакты ввода / вывода |
32 |
32 |
Серийный порт |
1 |
1 |
Источники прерывания |
6 |
8 |
ЖК-дисплей 16x2:
ЖК-дисплей 16 * 2 широко используется для встраиваемых приложений. Вот краткое объяснение контактов и работы ЖК-дисплея 16 * 2. Внутри ЖК-дисплея есть два очень важных регистра. Это регистр данных и регистр команд. Регистр команд используется для отправки команд, таких как четкое отображение, курсор в исходном положении и т. Д., Регистр данных используется для отправки данных, которые должны отображаться на ЖК-дисплее 16 * 2. В таблице ниже показано описание контактов ЖК-дисплея 16 * 2.
Штырь |
Условное обозначение |
Ввод / вывод |
Описание |
1 |
Vss |
- |
Земля |
2 |
Vdd |
- |
+ 5В питание |
3 |
Ви |
- |
Блок питания для контроля контрастности |
4 |
RS |
я |
RS = 0 для регистра команд, RS = 1 для регистра данных |
5 |
RW |
я |
R / W = 0 для записи, R / W = 1 для чтения |
6 |
E |
Ввод / вывод |
включить |
7 |
D0 |
Ввод / вывод |
8-битная шина данных (LSB) |
8 |
D1 |
Ввод / вывод |
8-битная шина данных |
9 |
D2 |
Ввод / вывод |
8-битная шина данных |
10 |
D3 |
Ввод / вывод |
8-битная шина данных |
11 |
D4 |
Ввод / вывод |
8-битная шина данных |
12 |
D5 |
Ввод / вывод |
8-битная шина данных |
13 |
D6 |
Ввод / вывод |
8-битная шина данных |
14 |
D7 |
Ввод / вывод |
8-битная шина данных (MSB) |
15 |
А |
- |
+ 5В для подсветки |
16 |
K |
- |
Земля |
В таблице ниже показаны часто используемые коды команд ЖК-дисплея.
Код (шестнадцатеричный) |
Описание |
01 |
Очистить экран дисплея |
06 |
Курсор увеличения (сдвиг вправо) |
0A |
Дисплей выключен, курсор включен |
0C |
Дисплей включен, курсор выключен |
0F |
Дисплей включен, курсор мигает |
80 |
Переместить курсор в начало 1- й строки |
C0 |
Установить курсор в начало 2- й строки |
38 |
2 строки и матрица 5 * 7 |
Считыватель RFID EM-18:
Считыватель RFID EM-18 работает на частоте 125 кГц, имеет встроенную антенну и может питаться от источника питания 5 В. Он обеспечивает последовательный вывод вместе с выводом весов. Диапазон составляет около 8-12 см. Параметры последовательной связи: 9600 бит / с, 8 бит данных, 1 стоповый бит. Его приложения включают аутентификацию, электронное ценообразование платных дорог, электронные билеты для общественного транспорта, системы посещаемости и т. Д. Здесь вы можете посмотреть все проекты RFID.
Вывод, обеспечиваемый считывателем RFID EM-18, имеет 12-значный формат ASCII. Из 12 цифр первые 10 цифр - это номер карты, а последние две цифры - результат операции XOR номера карты. Последние две цифры используются для проверки ошибок.
Например, номер карты - 0200107D0D62, считанный со считывателя, тогда номер карты на карте будет таким, как показано ниже.
02 - преамбула
00107D0D = 1080589 в десятичной системе.
62 - значение XOR для (02 XOR 00 XOR 10 XOR 7D XOR 0D).
Следовательно, номер на карте 0001080589.
Работа и объяснение кода:
Полная программа C и демонстрация видео для этого проекта дается в конце этого проекта. Код разбит на небольшие значимые фрагменты и объяснен ниже.
Для сопряжения ЖК-дисплея 16 * 2 с микроконтроллером 8051 необходимо определить контакты, на которых ЖК-дисплей 16 * 2 подключен к микроконтроллеру 8051. Вывод RS 16 * 2 ЖК-дисплея подключен к P3.7, вывод RW 16 * 2 ЖК-дисплея подключен к P3.6, а вывод E 16 * 2 ЖК-дисплея подключен к P3.5. Контакты данных подключены к порту 1 микроконтроллера 8051.
сбит rs = P3 ^ 7; сбит rw = P3 ^ 6; сбит en = P3 ^ 5;
Далее нам нужно определить некоторые функции, которые используются в программе. Функция задержки используется для создания заданной временной задержки. Функция Cmdwrt используется для отправки команд на ЖК-дисплей 16 * 2. Функция datawrt используется для отправки данных на ЖК-дисплей 16 * 2. Функция Rxdata используется для получения данных из последовательного порта.
недействительная задержка (беззнаковое целое); void cmdwrt (беззнаковый символ); void datawrt (unsigned char); char rxdata (недействительно);
В этой части кода мы собираемся настроить микроконтроллер 8051 для последовательной связи.
Регистр TMOD загружается 0x20 для таймера 1, режим 2 (автоматическая перезагрузка). В регистр SCON загружается 0x50 для 8 бит данных, 1 стоповый бит и разрешен прием. В регистр TH1 загружается 0xfd для скорости передачи 9600 бит в секунду. TR1 = 1 используется для запуска таймера.
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1;
В этой части кода мы отправляем команды на ЖК-дисплей 16 * 2. Такие команды, как очистка дисплея, увеличение курсора, установка курсора в начало 1- й строки, отправляются на ЖК-дисплей 16 * 2 по одной после некоторой заданной задержки.
для (я = 0; я <5; я ++) {cmdwrt (cmd); задержка (1); }
В этой части кода мы получаем выходные данные считывателя RFID EM-18 через последовательный интерфейс микроконтроллера 8051 и сохраняем их в переменной. Счетчик используется для отслеживания количества полученных байтов. После получения всех 12 байтов данных мы должны отобразить их на ЖК-дисплее 16 * 2. Этот процесс повторяется бесконечно, чтобы читать разные карточки.
в то время как (1) {count = 0; cmdwrt (0xC2); в то время как (количество <12) {вход = rxdata (); count ++; } for (я = 0; я <12; я ++) {datawrt (вход); задержка (1); } задержка (100); }
В этой части кода мы отправляем команды на ЖК-дисплей 16 * 2. Команда копируется в порт 1 микроконтроллера 8051. RS устанавливается на низкий уровень для записи команды. RW становится низким для операции записи. На вывод включения (E) подается импульс от высокого к низкому, чтобы начать операцию записи команды.
void cmdwrt (unsigned char x) {P1 = x; rs = 0; rw = 0; en = 1; задержка (1); en = 0; }
В этой части кода мы отправляем данные на ЖК-дисплей 16 * 2. Данные копируются в порт 1 микроконтроллера 8051. RS устанавливается в высокий уровень для записи команды. RW становится низким для операции записи. На вывод включения (E) подается импульс от высокого к низкому, чтобы начать операцию записи данных.
void datawrt (unsigned char y) {P1 = y; rs = 1; rw = 0; en = 1; задержка (1); en = 0; } Также проверьте все наши проекты RFID с другими микроконтроллерами.