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

射频识别 (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 位数字是卡号,后两位数字是卡号的异或结果。最后两位数字用于错误检查。
例如,从读卡器读取的卡号是0200107d0d62,那么卡上的卡号将如下所示。
02 – 序言
00107d0d = 十进制1080589。
62 是 (02 xor 00 xor 10 xor 7d xor 0d) 的 xor 值。
因此,卡上的数字是0001080589。
工作和代码说明:
该项目的完整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
}
}

工业级无人机将成为智慧城市发展不可或缺的一部分
iPhone8最大亮点在于价格?7000起太吓人!
双波段毫米波天线的仿真
中国移动等三大运营商年底宣布5G信息商用
江山轮流转:魅族现在可是高通和三星眼里的香饽饽
将EM-18 RFID与8051微控制器连接并显示RFID卡号
使用电源管理模块有效控制GaN功率放大器的电源开关
北京与自动驾驶的磨合进入了新阶段
中国移动新一代OTN智臻政企专网成功发布
基于神经网络的人工智能设计
Micropython解释器MaixPy 常见问题
英特尔的FPGA漫漫发展长路,中国将成为重要市场之一
美国监管机构对加密货币是如何进行分类的
中国移动旗下全新双摄全面屏手机,用户好评口碑良好
NI成功主办第七届 “中国PXI技术和应用论坛”
基于Verilog的经典数字电路设计(2)比较器
苹果效应下IC制造业发展的3大趋势
移动和智能系统助力 iPhone驱动ARM市值狂飙近10倍
用于医疗器械导管内液体压力测量的光纤压力传感器
AI走进手机,智慧生命诞生