点击查看代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "RC522.h"
#include "string.h"
#include "usart2.h"
#include "key.h"
unsigned char g_ucTempbuf[20];
unsigned char DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
u8 ddata1[16] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x00};//1234567
u8 ddata2[16] = {0x32, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x00};//2234567
u8 ddata3[16] = {0x33, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x00};
extern u8 RC522_mode;
extern u8 Alarm_flag; //报警键标志位
extern u8 Change_flag; //模式切换标志位
void FindCard()
{
u8 status;
status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
if (status != MI_OK)
{
PcdReset();
PcdAntennaOff();
PcdAntennaOn();
return;
}
status = PcdAnticoll(g_ucTempbuf);//防冲撞,序列号从这出 取出id
if (status != MI_OK)
{
printf("error 1\r\n");
return;
}
else
{
printf("ok1\r\n");
printf("%s\r\n",g_ucTempbuf);
}
status = PcdSelect(g_ucTempbuf);//选定卡片
if (status != MI_OK)
{ printf("error2\r\n");return; }
else
{
printf("ok2\r\n");
}
status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//验证卡片密码
if (status != MI_OK)
{ printf("error3\r\n");return; }
else
{
printf("ok3\r\n");
}
}
int main(void)
{
u8 i;
u8 NFC=0,NFC1=0,NFC2=0; //三个RC522是否接触贴纸标志位 0:没有接触,1:有接触
u8 NFC_flag=0,NFC1_flag=0,NFC2_flag=0;
u8 Door_flag=0; //门状态 0:关门,1:开门
u8 Mode=1; //当前模式 0:进门模式,1:出门模式
u8 status; //临时储存NFC寻卡反馈
u8 OUT=0; //出门锁
u8 IN=0; //进门锁
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
uart_init(115200);
usart2_init(9600);
RC522_Init();
PcdReset();
PcdAntennaOff();
delay_ms(10);
PcdAntennaOn();
delay_ms(10);
PcdReset1();
PcdAntennaOff();
delay_ms(10);
PcdAntennaOn();
delay_ms(10);
PcdReset2();
PcdAntennaOff();
delay_ms(10);
PcdAntennaOn();
delay_ms(10);
LED2=1; //出门灯亮
while(1)
{
/*按键操作*/
KEY_Scan(0);
/*射频串口接收*/
if(USART2_RX_STA&0x8000)//+MQTTSUBRECV:0,"2221078",23,1234#数学,《作业》P5、P6
{
if(USART2_RX_BUF[0]=='o') //射频模块接收到"open",开门
{
Door_flag=1;
//printf("open\r\n");
}
else if(USART2_RX_BUF[0]=='c') //射频模块接收到"close",关门
{
Door_flag=0;
//printf("close\r\n");
}
memset(USART2_RX_BUF,0,200*sizeof(char));
USART2_RX_STA=0;
}
/*判断NFC接触情况*/
RC522_mode=0;
status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
if (status != MI_OK)
{
// PcdReset();
// PcdAntennaOff();
// delay_ms(10);
// PcdAntennaOn();
// delay_ms(10);
//NFC=0;
//printf("NO NFC0\r\n");
if(NFC_flag!=1)
{
NFC=0;
}
else
{
NFC_flag=0;
}
}
else
{
NFC=1;
NFC_flag=1;
//printf("NFC0\r\n");
}
RC522_mode=1;
status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
if (status != MI_OK)
{
// PcdReset1();
// PcdAntennaOff();
// delay_ms(10);
// PcdAntennaOn();
// delay_ms(10);
//NFC1=0;
//printf("NO NFC1\r\n");
if(NFC1_flag!=1)
{
NFC1=0;
}
else
{
NFC1_flag=0;
}
}
else
{
NFC1=1;
NFC1_flag=1;
//printf("NFC1\r\n");
}
RC522_mode=2;
status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
if (status != MI_OK)
{
// PcdReset2();
// PcdAntennaOff();
// delay_ms(10);
// PcdAntennaOn();
// delay_ms(10);
//NFC2=0;
//printf("NO NFC2\r\n");
if(NFC2_flag!=1)
{
NFC2=0;
}
else
{
NFC2_flag=0;
}
}
else
{
NFC2=1;
NFC2_flag=1;
//printf("NFC2\r\n");
}
/*门操作*/
if((Door_flag==1)&&(Mode==1)&&(Alarm_flag==0)) //门开 & 出门模式 & 未按接触报警键
{
if((NFC==1)||(NFC1==1)||(NFC2==1)) //任意一个物品还在
{
PLAY1=1;
PLAY3=1;
PLAY2=0; //播放"请拿走物品"
LED1=!LED1; //警示灯闪烁
}
else
{
PLAY2=1;
PLAY3=1;
PLAY1=0; //播放"请关门"
LED1=0; //警示灯灭
OUT=1; //该步操作完成
}
}
else if((Door_flag==0)&&(Mode==1)&&(OUT==1)) //门闭 & 出门模式 & 物品拿完
{
PLAY1=1;
PLAY2=1;
PLAY3=1;
STOP=0; //语音停止
delay_ms(100);
STOP=1;
LED2=0; //出门灯灭
LED3=1; //进门灯亮
OUT=0;
Mode=0;
}
else if((Door_flag==1)&&(Mode==0)&&(Alarm_flag==0)) //门开 & 进门模式 & 未按接触报警键
{
if((NFC==0)||(NFC1==0)||(NFC2==0)) //任意一个物品没放入
{
PLAY1=1;
PLAY2=1;
PLAY3=0; //播放"请放入物品"
LED1=!LED1; //警示灯闪烁
printf("进门 放入物品\r\n");
}
else
{
PLAY2=1;
PLAY3=1;
PLAY1=0; //播放"请关门"
LED1=0; //警示灯灭
IN=1; //该步操作完成
}
}
else if((Door_flag==0)&&(Mode==0)&&(IN==1)) //门开 & 进门模式 & 物品放完
{
PLAY1=1;
PLAY2=1;
PLAY3=1;
STOP=0; //语音停止
delay_ms(100);
STOP=1;
LED2=1; //出门灯灭
LED3=0; //进门灯亮
IN=0;
Mode=1;
}
else if((Door_flag==1)&&(Alarm_flag==1)) //其他人在进门模式或出门模式,门开
{
PLAY2=1;
PLAY3=1;
PLAY1=0; //播放"请关门"
LED1=0; //警示灯灭
}
else if((Door_flag==0)&&(Alarm_flag==1)) //其他人在进门模式或出门模式,进门后,门关
{
PLAY1=1;
PLAY2=1;
PLAY3=1;
STOP=0; //语音停止
delay_ms(100);
STOP=1;
Alarm_flag=0;
}
else if((Door_flag==0)&&(Change_flag==1)) //门关 & 模式切换键按下,出门改进门
{
if((NFC==1)||(NFC1==1)||(NFC2==1)) //任意一个物品还在
{
PLAY1=1;
PLAY3=1;
PLAY2=0; //播放"请拿走物品"
LED1=!LED1; //警示灯闪烁
NFC=0;
NFC1=0;
NFC2=0;
}
else
{
PLAY1=1;
PLAY2=1;
PLAY3=1;
STOP=0; //语音停止
delay_ms(100);
STOP=1;
LED1=0; //警示灯灭
LED2=0; //出门灯灭
LED3=1; //进门灯亮
}
}
else if((Door_flag==0)&&(Change_flag==2)) //门关 & 模式切换键按下,进门改出门
{
if((NFC==0)||(NFC1==0)||(NFC2==0)) //任意一个物品没放入
{
PLAY1=1;
PLAY2=1;
PLAY3=0; //播放"请放入物品"
LED1=!LED1; //警示灯闪烁
}
else
{
PLAY1=1;
PLAY2=1;
PLAY3=1;
STOP=0; //语音停止
delay_ms(100);
STOP=1;
LED1=0; //警示灯灭
LED2=1; //出门灯亮
LED3=0; //进门灯灭
Change_flag=0;
}
}
/*延时循环*/
delay_ms(500);
i++;
if(i==2)
{
LED0=!LED0;
i=0;
}
}
}