无线射频辨识 (Radio Frequency IDentification,缩写:RFID) 是一种无线通讯技术,可以通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或者光学接触。
RFID 使用的范围很广,票卡、门禁卡、会员卡,eTAG、宠物身上的标签...等,使用的射频频率也依需求的不同有多种选择,一般常用的卡大都是选择使用 13.56MHz 的 MIFARE 卡,而读写卡片的控制芯片大都是使用 NXP 的 RC522,因此市场上有很多厂家生产了这类的感应模块,而这些感应模块大致分成了 2 类,一类是板子上没有 MCU,主板需透过 SPI/I2C/UART 的连接方式去控制模块上的 RC522 读写感应卡,使用这种模块的优点是除非芯片停产否则不会有买不到的风险,而缺点就是主程序必须要自己去存取 RC522 的内部寄存器,这多少增加了程序的复杂性。
另一类是板子上有 MCU,厂家会规划出特定的通讯协议,使用者只需要透过这些通讯命令就可以读写感应卡,本次调试就是使用这种模块。使用这种模块的优点是模块上的 MCU 已经处理了 RC522 的控制,因此主程序只要直接发送命令就可以了,甚至于有些模块上已经具备了 RS485/RS232 的转换芯片,可以直接应用在长距离的需求。不过缺点就是这类模块的通讯协议并没有标准,每家厂家都不一样,因此也就受制于该生产厂家了。
我们选择所使用的模块可设定成"主动模式"或是"被动模式",所谓主动模式就是当感应到 RFID 卡时模块会主动将卡内的 ID 或是内部扇区数据经由串口主动送出,而被动模式就是主程序要自己发送命令给模块读取数据。
本次调试中我们将模块设定在主动模式,当有 RFID 卡感应时将卡上的 32 位 ID 显示在 N5110 液晶屏上面。 while 回圈先呼叫读取 RFID 卡的函数 ReadCardID(),然后将读取到的 ID 存入记录的 5 组数组之中,最后呼叫显示函数 Ds_IDBUF() 显示数组内容。
while(1)
{
ReadCardID(&buf1[0]); // Read CARD ID
for(i=4;i>0;i--)
{
for(j=0;j<5;j++)
{
IdBuf[i][j] = IdBuf[i-1][j];
}
}
for(i=0;i<4;i++)
{
IdBuf[0][i+1] = buf1[i];
}
IdBuf[0][0] = 1;
Ds_IDBuf(IdBuf); // Display ID buffer
}
感应第 1 张卡
感应第 2 张卡
显示前 5 笔数据
原本对于数据的显示是使用大写英文字体 (A-F),在调试的过程中发现这种小尺寸的液晶屏上 8 与 B 经常会看错,因此后面也就修改成使用小写英文字体 (a-f)。
模块资料:
M3650B-HA资料(V3.0).rar
(2.35 MB)
工程文件,使用 KEIL 4.72 与 M051_Series_BSP_CMSIS_Rev3.00.002 库
D008.rar
(1.26 MB)
新唐使用笔记 - M051 的 LCD12864 显示程式
https://bbs.21ic.com/icview-894166-1-1.html
新唐使用笔记 - 使用牛桥调试 MAX7219 模组
https://bbs.21ic.com/icview-904322-1-1.html
新唐使用笔记 - 使用 M051 设计一个计时器
https://bbs.21ic.com/icview-910044-1-1.html
新唐使用笔记 - M051 小游戏 (数字防御)
https://bbs.21ic.com/icview-917284-1-1.html
新唐使用笔记 - M051 的 N5110 液晶屏驱动
https://bbs.21ic.com/icview-945442-1-1.html
|