中科因仑“3+1”工程特种兵精英论坛
标题:
STM32 SPI控制 RC522,用了别人的例程改了下,程序比较乱
[打印本页]
作者:
张衍波
时间:
2015-9-18 10:49
标题:
STM32 SPI控制 RC522,用了别人的例程改了下,程序比较乱
基本的RFID卡检测与读写都可以实现,还添加了2.2寸液晶屏的驱动,但是遇到一个问题,我想让卡在离开时也退出操作页面,没有退出时一直能检测到卡并保留在某个页面,就如下面程序:
void rfid_tst(void)
{
uint8_t status=0;
int i ;
char array[15];
//寻找天线范围内的所有卡片
Area_Clear(0,160,240,320,WHITE);
while(1)
{
status = PcdRequest(PICC_REQALL, g_ucTempbuf);
if (status != MI_OK)
{
printf("\r\n寻找不到天线范围内的卡\r\n") ;
return;
}
printf("\r\n寻找到天线范围内的卡\r\n") ;
//防冲撞,返回卡片序列号存在sn里面
status = PcdAnticoll(g_ucTempbuf);
if (status != MI_OK)
{
printf("\r\n防冲撞处理不成功\r\n") ;
return;
}
memcpy(card_id,g_ucTempbuf,4);
//选定卡片,根据返回的序列号选定一张卡片
status = PcdSelect(g_ucTempbuf);
if (status != MI_OK)
{
printf("\r\n卡片选定不成功\r\n") ;
return;
}
//验证密码,根据自定义的密码验证
// status = PcdAuthState(PICC_AUTHENT1A, 1, "Liang ", g_ucTempbuf); //此处密码是对的
// if (status != MI_OK)
// {
// printf("\r\n密码验证不成功\r\n") ;
// return;
// }
printf("\r\n天线范围内的卡验证成功\r\n") ;
LED_On();
for(i=0;i<4;i++)
{
itoa((int)card_id[i],array+4*i,10);
if(i<3)
array[3+i*4]='.';
}
status=PcdAuthState(PICC_AUTHENT1A,4,DefaultKey,card_id);//
if(status!=MI_OK)
{
printf("\r\n密码验证错误!!\r\n");
}
else
{
status= PcdRead(4, g_ucTempbuf);
if (status != MI_OK)
{
printf("\r\n块数据读回错误!!\r\n");
}
else
{
printf("\r\n 用户名为: %s\r\n", g_ucTempbuf );
Gui_DrawFont_GBK24(20,160,BLUE,GRAY0,"用户名:");
Gui_DrawFont_GBK24(100,165,BLUE,GRAY0,g_ucTempbuf);
}
status= PcdRead(5, g_ucTempbuf);
if (status != MI_OK)
{
printf("\r\n块数据读回错误!!\r\n");
}
else
{
printf("\r\n 学号为: %s\r\n", g_ucTempbuf );
Gui_DrawFont_GBK24(20,190,BLUE,GRAY0,"学号:");
Gui_DrawFont_GBK24(100,195,BLUE,GRAY0,g_ucTempbuf);
}
status= PcdRead(6, g_ucTempbuf);
if (status != MI_OK)
{
printf("\r\n块数据读回错误!!\r\n");
}
else
{
printf("\r\n 卡内余额为: %s\r\n", g_ucTempbuf );
Gui_DrawLine(180,0,204,240,WHITE);
Gui_DrawFont_GBK24(20,220,BLUE,GRAY0,"卡内余额:");
Gui_DrawFont_GBK24(140,225,BLUE,GRAY0,g_ucTempbuf);
}
Key1_Handler();
Key2_Handler();
Area_Clear(0,160,240,320,WHITE);
}
}
}
按理说这句进入while(1)后,status = PcdRequest(PICC_REQALL, g_ucTempbuf);就能检测到所有天线范围内的卡,整个函数不会return,但是为什么我的卡一直贴着天线,还是出现不能重复检测的情况,程序执行的结果是执行一次后并没有一直停留在rfid_tst()函数里面,而是退出来,才能再一次进入(在main()里面一直执行rfid_tst()),所以不能实现卡不离开页面不离开,卡离开页面离开的效果。请各位帮忙解决这个问题,谢谢啊转载
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/)
Powered by Discuz! X3.4