射频识别(RFID)使用射频读取存储在RFID卡或标签中的信息。在此项目中,我们将使用带有8051微控制器的EM-18 RFID阅读器接口,并在16 * 2 LCD显示屏上显示RFID卡号。该无线射频识别已在许多系统中使用,例如基于RFID的出勤系统,安全系统,投票机等。该项目还将用作16 * 2 LCD与8051微控制器的正确接口。
所需组件:
- 8051微控制器
- EM-18 RFID阅读器
- 16 * 2 LCD显示屏
- RFID卡/标签
- 电位器
- 跳线
电路原理图:
8051单片机:
8051微控制器是一个8位微控制器,具有128字节的片上RAM,4K字节的片上ROM,两个定时器,一个串行端口和四个8位端口。8052微控制器是微控制器的扩展。下表显示了8051家庭成员的比较。
特征 |
8051 |
8052 |
ROM(以字节为单位) |
4K |
8K |
RAM(字节) |
128 |
256 |
计时器 |
2 |
3 |
I / O引脚 |
32 |
32 |
串行端口 |
1个 |
1个 |
中断源 |
6 |
8 |
16x2 LCD:
16 * 2 LCD是嵌入式应用中广泛使用的显示器。这是有关16 * 2 LCD显示器的引脚和工作原理的简要说明。LCD内有两个非常重要的寄存器。它们是数据寄存器和命令寄存器。命令寄存器用于发送命令,例如清晰显示,在家中的光标等;数据寄存器用于发送要在16 * 2 LCD上显示的数据。下表显示了16 * 2 LCD的引脚说明。
销 |
符号 |
输入输出 |
描述 |
1个 |
VS |
-- |
地面 |
2 |
Vdd |
-- |
+ 5V电源 |
3 |
Vee |
-- |
电源控制对比度 |
4 |
RS |
一世 |
RS = 0,用于命令寄存器, RS = 1用于数据寄存器 |
5 |
读写器 |
一世 |
R / W = 0用于写入,R / W = 1用于读取 |
6 |
Ë |
输入输出 |
启用 |
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 |
一种 |
-- |
+ 5V背光 |
16 |
ķ |
-- |
地面 |
下表显示了常用的LCD命令代码。
代码(十六进制) |
描述 |
01 |
清除显示画面 |
06 |
增量光标(右移) |
0A |
显示关闭,光标打开 |
0C |
显示开启,光标关闭 |
0楼 |
显示开启,光标闪烁 |
80 |
强制光标到1条的开始日线 |
C0 |
强制光标移至第二行 |
38 |
2行5 * 7矩阵 |
EM-18 RFID阅读器:
EM-18 RFID阅读器的工作频率为125 KHz,并带有片上天线,并可以使用5V电源供电。它提供串行输出以及weigand输出。范围是8-12厘米左右。串行通讯参数为9600bps,8个数据位,1个停止位。它的应用包括身份验证,电子收费公路价格,公共交通电子票务,考勤系统等。在此处查看所有RFID项目。
EM-18 RFID阅读器提供的输出为12位ASCII格式。在12位数字中,前10位是卡号,后两位是卡号的XOR结果。后两位用于错误检查。
例如,从阅读器读取的卡号是0200107D0D62,则卡上的卡号将如下所示。
02 –前言
00107D0D = 1080589(十进制)
62是(02 XOR 00 XOR 10 XOR 7D XOR 0D)的XOR值。
因此,卡上的数字是0001080589。
工作和代码说明:
在该项目的结尾给出了该项目的完整C程序和演示视频。该代码分为多个有意义的小块,并在下面进行说明。
对于与8051微控制器接口的16 * 2 LCD,我们必须定义16 * 2液晶显示器连接到8051微控制器的引脚。16 * 2 LCD的RS引脚连接到P3.7,16 * 2 LCD的RW引脚连接到P3.6,而16 * 2 LCD的E引脚连接到P3.5。数据引脚连接到8051微控制器的端口1。
比特rs = P3 ^ 7; 比特rw = P3 ^ 6; sbit en = P3 ^ 5;
接下来,我们必须定义一些在程序中使用的功能。延迟功能用于创建指定的时间延迟。 Cmdwrt 功能用于将命令发送到16 * 2液晶显示器。 datawrt 功能用于将数据发送到16 * 2液晶显示器。 Rxdata 函数用于从串行端口接收数据。
void delay(unsigned int); void cmdwrt(unsigned char); 无效的datawrt(unsigned char); char rxdata(void);
在这部分代码中,我们将配置8051微控制器进行串行通信。
TMOD寄存器中的0x20用于定时器1,模式2(自动重载)。SCON寄存器装载了0x50的8个数据位,1个停止位并允许接收。TH1寄存器装入0xfd,波特率为每秒9600位。TR1 = 1用于启动计时器。
TMOD = 0x20; SCON = 0x50;TH1 = 0xfd;TR1 = 1;
在这部分代码中,我们将命令发送到16 * 2 lcd。命令,如清晰的显示,增量光标,迫使光标到1条的开始ST线由一个后一些一些指定的时间延迟被发送到16 * 2液晶显示器中的一个。
for(i = 0; i <5; i ++){cmdwrt(cmd); 延迟(1); }
在这部分代码中,我们将通过8051微控制器的串行接口接收EM-18 RFID阅读器的输出,并将其存储在变量中。 Count 用于跟踪接收到的字节数。接收完所有12个字节的数据后,接下来我们必须将其显示在16 * 2 LCD显示器上。永久重复此过程以读取不同的卡。
while(1){count = 0; cmdwrt(0xC2); while(count <12){input = rxdata(); 数++; } for(i = 0; i <12; i ++){datawrt(input); delay(1); } delay(100); }
在这部分代码中,我们将命令发送到16 * 2 lcd display。该命令将复制到8051微控制器的端口1。将RS设为低电平以进行命令写入。将RW设为低电平以进行写操作。在使能(E)引脚上施加从高到低的脉冲,以开始命令写入操作。
void cmdwrt(unsigned char x){P1 = x; rs = 0; rw = 0; en = 1; delay(1); en = 0; }
在这部分代码中,我们将数据发送到16 * 2 LCD显示器。数据被复制到8051微控制器的端口1。将RS设为高电平以进行命令写入。将RW设为低电平以进行写操作。在使能(E)引脚上施加从高到低的脉冲以开始数据写入操作。
无效的datawrt(无符号字符y){P1 = y; rs = 1; rw = 0; en = 1; delay(1); en = 0; }另外,请与其他微控制器一起检查我们所有的RFID项目。