RFID实验报告读写一体.docx
《RFID实验报告读写一体.docx》由会员分享,可在线阅读,更多相关《RFID实验报告读写一体.docx(7页珍藏版)》请在冰豆网上搜索。
RFID实验报告读写一体
郑州轻工业学院
实验报告
名称:
《课程名称》综合实验
院(系):
计算机与通信工程学院
专业班级:
网络工程(物联网技术13-01)
指导教师:
时间:
2015-2016
(1)
郑州轻工业学院
实验报告
名称:
《课程名称》综合实验
院(系):
计算机与通信工程学院
专业班级:
网络工程(物联网技术13-01)
姓名:
学号:
指导教师:
杨永双陈燕
成绩评定表
内容
成绩
评语
平时成绩(10%)
考核成绩(50%)
报告成绩(40%)
总分(100)
评定成绩
时间:
2015-2016
(1)
实验五:
读卡/写卡功能
1实验任务和目的
1.1实验任务
熟悉VC++6.0环境。
熟悉M1卡中读卡所需调用函数的规则。
实现M1卡任一块的读/写功能。
1.2实验目的
能够选取扇区号和块号。
能够显示选定块号的内容。
能够将内容写入选定的块中。
实验过程和结果:
1、用MicrosoftVisualC++新建一个工程(MFCAppWizard[exe]),应用程序类型是基本对话框,应用程序向导创建完成之后,系统进入到对话框编译页面的主页面,用控件设计对话框,对话框的设计如下图所示:
2、编写程序。
(1)连接设备。
双击连接设备按钮,进入程序设计界面。
代码如下:
HANDLEicdev;
intst;
voidCRFEYEDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
icdev=rf_usbinit();//返回设备描述符
if(icdev>0)//如果设备连接成功,读卡。
{
m_list.ResetContent();//清除列表框数据
m_list.AddString("设备连接成功!
");
unsignedlongsnr;
st=rf_card(icdev,1,&snr);//寻卡并返回卡片的系列号
if(st==0)
{
m_list.AddString("读卡成功!
");//在列表框中显示读卡状况
}
else
{
m_list.AddString("读卡失败!
");//在列表框中显示读卡状况
}
rf_beep(icdev,50);//控制蜂鸣器,蜂鸣时间,单位:
毫秒
}
(2)读数据。
能够读出指定块号的内容,代码如下:
voidCRFEYEDlg:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();//更新变量数据,区为m_sector,块为m_kuai。
m_list1.ResetContent();//清空列表框数据
st=rf_authentication(icdev,0,m_sector);/*验证某一扇区密码,
认证第m_sector(选定的扇区)扇区的密码A*/
if(st!
=0)
{
m_list1.AddString("验证密码失败!
");
}
unsignedchardatabuff[17];
ZeroMemory(databuff,17);
st=rf_read(icdev,m_sector*4+m_kuai,databuff);/*从一个已选择的卡中
读取一个数据块(选定的块m_kuai);databuff为读出的数据*/
if(st==0)
{
m_list1.AddString((char*)databuff);//在列表框中显示读出的数据
}
else
m_list1.AddString("读数据失败!
");
rf_beep(icdev,30);//控制蜂鸣器,蜂鸣时间,单位:
毫秒
}
(3)写数据。
对指定的区块进行写操作。
代码如下:
voidCRFEYEDlg:
:
OnButton5()
{
UpdateData();//更新变量数据,区为m_sector1,块为m_kuai1。
m_list3.ResetContent();//清空第三个列表框中的数据
st=rf_authentication(icdev,0,m_sector1);/*验证选定扇区的密码,
密码类型为密码A*/
if(st!
=0)//判断验证密码是否失败
{
m_list3.AddString("验证密码失败!
");
}
CStringdata=m_edit5;//把编辑框中的数据赋值给变量data。
char*data1=data.GetBuffer(data.GetLength());
st=rf_write(icdev,m_sector1*4+m_kuai1,(unsignedchar*)data1);/*向卡中写入数据,
一次必须写一个块,为16个字节;块地址m_sector1*4+m_kuai1;要写入的数据,长度为16字节*/
if(st==0)//判断数据是否写入成功
{
m_list3.AddString("写数据成功!
");
}
else
m_list3.AddString("写数据失败!
");
unsignedchardatabuff[17];
ZeroMemory(databuff,17);
st=rf_read(icdev,m_sector1*4+m_kuai1,databuff);/*读取指定数据块的数据*/
if(st==0)
{
m_list3.AddString((char*)databuff);//显示读出的数据
}
else
m_list3.AddString("读数据失败!
");
rf_beep(icdev,30);//控制蜂鸣器,蜂鸣时间,单位:
毫秒
}
3、程序编译之后的运行效果。
(1)运行程序,点击连接设备。
显示结果如下:
(2)读卡操作。
区选为1,块选为0,点击读数据,读出之前写入的数据,效果如下:
(3)写卡操作。
区选为1,块选为1,点击写数据,运行结果如下:
(4)点击读数据(区选为1,块选为1)读出之前写入的数据,效果如下:
(5)点击断开连接,显示效果如下:
(6)点击清空数据,效果如下:
四、实验心得。
通过本次试验,我基本熟悉了VC++6.0环境。
能够编写基本的对话框程序,明白了调用函数的规则,对读卡、写卡需要使用的函数有了基本了解,明白了阅读器与电子标签之间的通信过程,对整个射频识别系统有了清晰的认识。