0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

将EM-18 RFID与8051微控制器连接并显示RFID卡号

科技观察员 来源:circuitdigest 作者:沙希·库马尔 2022-11-18 17:12 次阅读

射频识别 (RFID)使用射频来读取存储在 RFID 卡或标签中的信息。在这个项目中,我们将连接EM-18 RFID阅读器与8051微控制器,并在16* 2 LCD显示屏上显示RFID卡号。这种无线射频识别用于许多系统,如基于RFID的考勤系统,安全系统,投票机等。

所需组件:

8051微控制器

EM-18 无线射频识别读写器

16*2液晶显示屏

射频识别卡/标签

电位计

跳线

电路图:

8051 微控制器

8051微控制器是一款8位微控制器,具有128字节的片上RAM,4K字节的片上ROM,两个定时器,一个串行端口和四个8位端口。8052微控制器是微控制器的扩展。下表显示了8051名家庭成员的比较。

特征 8051 8052
只读存储器(以字节为单位) 4K 8K
内存(字节) 128 256
定时器 2 3
I/O 引脚 32 32
串行端口 1 1
中断源 6 8

16x2 液晶显示器:

16 * 2 LCD是嵌入式应用中广泛使用的显示器。以下是有关16 * 2液晶显示器的引脚和工作的简要说明。LCD内部有两个非常重要的寄存器。它们是数据寄存器和命令寄存器。命令寄存器用于发送清晰显示、光标在家乡等命令,数据寄存器用于发送要在16*2 LCD上显示的数据。下表显示了16 * 2 LCD的引脚说明。

象征 I/O 描述
1 VSS -
2 Vdd - +5V电源
3 V形 - 用于控制对比度的电源
4 RS RS=0 为命令寄存器 ,
RS=1 用于数据寄存器
5 乌尔曼 R/W=0 表示写入,R/W=1 表示读取
6 E I/O 使
7 D0 I/O 8位数据总线
8 D1 I/O 8位数据总线
9 D2 I/O 8位数据总线
10 D3 I/O 8位数据总线
11 D4 I/O 8位数据总线
12 D5 I/O 8位数据总线
13 D6 I/O 8位数据总线
14 D7 I/O 8位数据总线
15 一个 - +5V背光
16 K -

下表显示了常用的液晶屏命令代码。

代码(十六进制) 描述
01 清晰的显示屏
06 递增光标(右移)
0安 显示关闭,光标打开
0C 显示打开,光标关闭
0F 显示于 ,光标闪烁
80 强制光标从 1 开始圣线
C0 强制光标到开头 2德·线
38 2行和5 * 7矩阵

EM-18 无线射频识别读写器:

EM-18 RFID阅读器的工作频率为125 KHz,并配有片上天线,可采用5V电源供电。它提供串行输出以及 weigand 输出。范围约为8-12厘米。串行通信参数为9600bps,8个数据位,1个停止位。其应用包括身份验证、电子收费公路定价、公共交通电子票务、考勤系统等。在此处查看所有 RFID 项目。

EM-18 RFID阅读器提供的输出为12位ASCII格式。在 12 位数字中,前 10 位数字是卡号,后两位数字是卡号的异或结果。最后两位数字用于错误检查。

poYBAGN3TGqAMaX1AACz1vZfDRs749.jpg

pYYBAGN3TGyAEyw-AAAqmzyP_x8907.jpg

例如,从读卡器读取的卡号是0200107D0D62,那么卡上的卡号将如下所示。

02 – 序言

00107D0D = 十进制1080589。

62 是 (02 XOR 00 XOR 10 XOR 7D XOR 0D) 的 XOR 值。

因此,卡上的数字是0001080589。

工作和代码说明:

poYBAGN3THGAOKyIAAE2_P4oeo4212.jpg

该项目的完整C 程序和演示视频在本项目结束时给出。代码被分成有意义的小块,并在下面解释。

对于与8051微控制器的16 * 2 LCD接口,我们必须定义16 * 2 LCD连接到8051微控制器的引脚。16*2 LCD 的 RS 引脚连接到 P3.7,16*2 LCD 的 RW 引脚连接到 P3.6,16*2 LCD 的 E 引脚连接到 P3.5。数据引脚连接到 8051 微控制器的端口 1。

sbit rs=P3^7;
sbit rw=P3^6;
sbit en=P3^5;
接下来,我们必须定义一些在程序中使用的函数。延迟功能用于创建指定的时间延迟。Cmdwrt功能用于向16 * 2 LCD显示器发送命令。Datawrt功能用于将数据发送到16 * 2 LCD显示器。Rxdata功能用于从串口接收数据。

void delay(unsigned int) ;
void cmdwrt(unsigned char);
void datawrt(unsigned char);
char rxdata(void);
在代码的这一部分中,我们将配置8051微控制器进行串行通信。

TMOD寄存器加载了定时器1模式2(自动重新加载)的0x20。SCON 寄存器加载了 8 个数据位、1 个停止位和接收启用的0x50。TH1寄存器加载了波特率为每秒9600位的0xfd。TR1=1 用于启动计时器。

TMOD= 0x20;
SCON=0x50;
TH1=0xfd;
TR1=1;
在代码的这一部分,我们将命令发送到 16*2 lcd。清除显示、递增光标、强制光标到开头 1 等命令圣线在一段时间后一一发送到16 * 2液晶显示器。

for(i=0;i<5;i++) 
{
cmdwrt (cmd[i]);
delay (1);
}
在代码的这一部分,我们通过8051微控制器的串行接口接收EM-18 RFID阅读器的输出并存储在变量中。计数用于跟踪接收的字节数。一旦收到所有12字节的数据,接下来我们必须将其显示在16 * 2 LCD显示屏上。这个过程永远重复,以便读取不同的卡片。

while(1)
{
count=0;
cmdwrt(0xC2);
while(count<12) 
{
input[count]=rxdata();
count++;
}
for(i=0;i<12;i++)
{
datawrt(input[i]);
delay(1);
}
delay(100);
}
在代码的这一部分中,我们将命令发送到 16*2 LCD 显示器。该命令将复制到 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)引脚上施加高到低脉冲以启动数据写入操作。

void datawrt (unsigned char y)
{
P1=y;
rs=1;
rw=0;
en=1;
delay(1);
en=0;

在代码的这一部分,我们将数据发送到16 * 2 LCD显示器。数据被复制到 8051 微控制器的端口 1。RS 设置为高,用于命令写入。对于写入操作,RW 设置为低电平。在使能(E)引脚上施加高到低脉冲以启动数据写入操作。

void datawrt (unsigned char y) { P1=y; rs=1; rw=0; en=1; delay(1); en=0; }

*this program is for interfacing RFID reader with 8051 microcontroller and to display card number on 16*2 lcd display*/



#include



sbit rs=P3^7; //Register Select(RS) pin of 16*2 lcd

sbit rw=P3^6; //Read/Write(RW) pin of 16*2 lcd

sbit en=P3^5; //Enable(E) pin of 16*2 lcd



char count = 0; // count = 0

char input[12]; // character array of size 12

char ch;



void delay(unsigned int) ; //function for creating delay

void cmdwrt(unsigned char); //function for sending commands to 16*2 lcd display

void datawrt(unsigned char); //function for sending data to 16*2 lcd display

char rxdata(void); //function for receiving a character through serial port of 8051

microcontroller



void main(void)

{

unsigned char cmd[]={0x38,0x01,0x06,0x0c,0x80}; //16*2 lcd initialization commands

unsigned char msg[]={"RFID card Number"};

unsigned char i;

TMOD=0x20; //timer 1 , mode 2 , auto reload

SCON=0x50; //8bit data , 1 stop bit , REN enabled

TH1=0xfd; //timer value for 9600 bits per second(bps)

TR1=1; //start the timer



for(i=0;i<5;i++) //send commands to 16*2 lcd display one command at a time

{

cmdwrt(cmd[i]); //function call to send commands to 16*2 lcd display

delay(1);

}



for(i=0;i<16;i++) //send data to 16*2 lcd display one character at a time

{

datawrt(msg[i]); //function call to display message on 16*2 lcd display

delay(1);

}



while(1)

{

count=0;

cmdwrt(0xC2);

while(count<12) //repeat for 12 times

{

input[count]=rxdata(); //receive serial data and store it.

count++;

}



for(i=0;i<12;i++) //send data to 16*2 lcd display one character at a time

{

datawrt(input[i]); //function call to display rfid card number on 16*2 lcd display

delay(1);

}



delay(100);

}

}



void cmdwrt (unsigned char x)

{

P1=x; //send the command to Port 1 on which 16*2 lcd is connected

rs=0; //make RS = 0 for command

rw=0; //make RW = 0 for write operation

en=1; //send a HIGH to LOW pulse on Enable(E) pin to start commandwrite operation

delay(1);

en=0;

}



void datawrt (unsigned char y)

{

P1=y; //send the data to Port 1 on which 16*2 lcd is connected

rs=1; //make RS = 1 for command

rw=0; //make RW = 0 for write operation

en=1; //send a HIGH to LOW pulse on Enable(E) pin to start datawrite operation

delay(1);

en=0;

}



char rxdata()

{

while(RI==0); //wait till RI becomes HIGH

RI=0; //make RI low

ch=SBUF; //copy received data

return ch; //return the received data to main function.

}



void delay(unsigned int z)

{

unsigned int p,q;

for(p=0;p
{

for(q=0;q<1375;q++); //repeat for 1375 times

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7551

    浏览量

    151402
  • RFID
    +关注

    关注

    388

    文章

    6149

    浏览量

    237839
  • 无线射频
    +关注

    关注

    4

    文章

    205

    浏览量

    27023
收藏 人收藏

    评论

    相关推荐

    8051微控制器的基础知识

    8051微控制器是嵌入式系统、消费电子、汽车等各个领域中最流行和最常用的微控制器之一,技术上称为Intel MCS-51架构。8051微控制器
    发表于 09-12 17:32 3434次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>的基础知识

    基于RFID的淋浴控制器的设计

    本帖最后由 亲王殿下 于 2014-4-12 09:11 编辑 谁做过RFID淋浴控制器方面的毕业设计,能否指导一下。谢谢
    发表于 03-05 14:41

    关于LABVIEW读取USB-RFID读卡卡号问题

    有没有那位大神用LABVIEW程序读取过USB-RFID刷卡的(读取ID卡和IC卡2种读卡,每刷一次读取里面的卡号数据)!!指教下。
    发表于 12-23 23:35

    RFID 收发参考设计

    `描述此射频识别 (RFID) 参考设计概括了所需的组件和布局注意事项,并提供固件示例以说明如何 RFID 实施到应用中以从应答中提取 RFID
    发表于 04-08 11:06

    【EMC家园】RFID射频读写的设计

    效地解决核心问题。本文为射频通信系统的实现提供了一种可行的解决方案。  1 系统整体设计  本文选用的是C8051F310 微控制器和FM1702SL 读写芯片。C8051F310 具有10 位转换速率可达
    发表于 03-16 15:51

    如何8051微控制器引到FPGA中去?

    请问如何8051微控制器引到FPGA中去?
    发表于 04-28 06:41

    通过stm32单片机与RC522读卡读取RFID卡号

    整体思路也很简单:通过stm32单片机连RC522读卡RFID卡号读取出来,通过网络RFID
    发表于 01-12 06:43

    基于RFID阅读和ESP微控制器的访问控制系统

    描述ESP RFID - 带有 ESP8266 和 RC522 的访问控制板使用便宜的 RFID 阅读和 ESP 微控制器的访问
    发表于 08-26 07:37

    RFID收发参考设计

    描述此射频识别 (RFID) 参考设计概括了所需的组件和布局注意事项,并提供固件示例以说明如何 RFID 实施到应用中以从应答中提取 RFID
    发表于 09-22 07:25

    ST25RU3993 EVAL板上外部接口的相同RFID芯片,微控制器及其重新编程的后果是什么?

    在 ST25RU3993 EVAL 板中,微控制器通过 SPI 接口和控制信号(93_signals)与 RFID 读取芯片交互 - 总共有 6 条数据线。SPI 接口还与载波消除芯
    发表于 02-07 06:44

    C8051FMCU RFID读卡

    整个系统主要分成两部分(主控板和天线板),PC通过C8051FMCU RFID读卡对相应的卡进行读写等操作,其中主控板的控制器用C8051
    发表于 07-09 23:45 80次下载

    基于RFID应用的通用型控制器的设计方案

    文章以门禁控制为例,介绍一款基于RFID应用的通用型控制器的设计原理,给出了利用Proteus软件进行仿真调试的方法。该控制器
    发表于 08-06 11:35 1408次阅读
    基于<b class='flag-5'>RFID</b>应用的通用型<b class='flag-5'>控制器</b>的设计方案

    8051微控制器引脚说明与基本电路

    此前已经介绍过8051微控制器的基础知识,包括它的历史、特性、封装和一些实际应用。在本文中,小编将将继续介绍关于8051微控制器引脚图、引脚说明以及其他一些细节内容,包括
    发表于 08-23 15:53 8395次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>引脚说明与基本电路

    如何使用触摸传感8051微控制器控制LED灯

    在这个项目中,我们触摸传感8051 微控制器 AT89S52 连接。如果您是 8051
    的头像 发表于 09-07 15:13 3127次阅读
    如何使用触摸传感<b class='flag-5'>器</b>和<b class='flag-5'>8051</b><b class='flag-5'>微控制器</b><b class='flag-5'>控制</b>LED灯

    基于8051微控制器连接到SCI端口

    本应用笔记介绍如何配置高速微控制器或超高速闪存微控制器的UART,以便与支持SCI的设备通信。它首先简要讨论了SCI和UART模块之间的差异,并以一个实际示例结束,说明如何配置基于8051的达拉斯半导体
    的头像 发表于 06-13 15:48 762次阅读
    <b class='flag-5'>将</b>基于<b class='flag-5'>8051</b>的<b class='flag-5'>微控制器</b><b class='flag-5'>连接</b>到SCI端口