如何让1702对一张卡只进行一次操作?

2019-07-21 08:35发布

就是实现类似公交卡那种功能刷一下除非拿开否则不能再刷那种功能。
我用延时实现功能,但是系统不稳定,用标志位总觉得哪没考虑全。
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"  
#include "usb_lib.h"
#include "hw_config.h"
#include "usb_pwr.h"
#include "FM1702.h"
#include "stdio.h"
#include "string.h"
#include "rtc.h"
#include <stdlib.h>
#include <cstdlib>
unsigned char RevBuffer[32]; //RevBuffer&#189;óê&#213;oí·¢&#203;í&#187;o3&#229;&#199;&#248;        
extern uint8_t USB_Received_Flag;
uint8_t data[32];                        //USBêy&#190;Y&#187;o3&#229;
int main(void)
{
        unsigned int Money,Hundreds,Decade,Last;
    int i=0,j=0;
                   u8 flag =1,flag1=1;
        //unsigned char BuffKey[6] = {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
    unsigned char buf[16],Buff1[16]={0x30,0x30,0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};         //&#207;&#194;&#212;&#216;&#195;&#216;&#212;&#191;&#212;&#191;3×
    char shuju[3];
    u8 shuju2[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
        //unsigned char status;
       
       
        delay_init();        //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//&#214;D&#182;&#207;·&#214;×ééè&#214;&#195;         
        uart_init(9600);//′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a9600
        LCD_Init();
        LED_Init();                //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
       
          delay_ms(1800);
        USB_Port_Set(0);         //USB&#207;è&#182;&#207;&#191;a
        delay_ms(300);
           USB_Port_Set(1);        //USB&#212;ù′&#206;á&#172;&#189;ó
        //USB&#197;&#228;&#214;&#195;
        USB_Interrupts_Config();   
        Set_USBClock();   
        USB_Init();       
        FM1702_SPI_init();
    InitializeSystem();               

        while(RTC_Init())               
        {
                LCD_ShowString1(60,130,200,16,16,"RTC ERROR!   ");       
                delay_ms(800);
                LCD_ShowString1(60,130,200,16,16,"RTC Trying...");       
        }       

        TP_Init();//&#207;&#212;ê&#190;3&#245;ê&#188;&#187;ˉ
                while(1)
                {       
                        LCD_ShowNum(100,220,calendar.w_year,4,16);                                                                          
                        LCD_ShowNum(140,220,calendar.w_month,2,16);                                                                          
                        LCD_ShowNum(165,220,calendar.w_date,2,16);       
                        LCD_ShowNum(100,242,calendar.hour,2,16);                                                                          
                        LCD_ShowNum(130,242,calendar.min,2,16);                                                                          
                        LCD_ShowNum(160,242,calendar.sec,2,16);       
                        i++;j++;
                        if(j==5)
                        {
                               
                                TP_Clear();
                                j=0;
                                flag1=1;
                        }
                        if(i==5)
                        {
                                TP_Clear();
                                i=0;
                                flag=1;
                        }
                          if(RE_SELECT()==TYPE_SUCCESS)//&#209;&#182;&#191;¨&#187;&#189;D&#209;&#191;¨
                          {

                                if(Cmd_ex())//&#209;&#161;&#212;&#241;&#191;¨&#209;é&#214;¤&#195;ü&#194;&#235;       
                                {                 
                                         
                     LED0  = 1;
                     LED1 = 1;                                       
                                   if( Read(Buff1,13)==TYPE_SUCCESS)
                                   {
                                                shuju[0] = Buff1[0];
                                                shuju[1] = Buff1[1];
                                                shuju[2] = Buff1[2];
                                                 Money= atoi(shuju);
                                                   if(Money>=2)//×&#238;μí&#189;e&#182;&#238;
                                                {                                                       
                                                        if(Buff1[3]==0x01&&flag==1)
                                                        {
                                                                flag=0;

                                                                Money = Money-2;
                                                                Hundreds = Money/100%10;
                                                                Decade = Money%100/10;
                                                                Last = Money%10;
                                                               shuju2[0] = Hundreds+'0';
                                                                shuju2[1] = Decade+'0';
                                                                shuju2[2] = Last + '0';
                                                                shuju2[3] = Buff1[3];
                                                                memcpy(buf,&shuju2,4);
                                                                Write(shuju2,13);  
                                                                TP_Show(1,Money);                                                               
                                                        }
                                                       
                                                        else if(Buff1[3]==0x02&&flag1==1)
                                                        {
                                                                flag1=0;
                                                                Money = Money-1;
                                                                Hundreds = Money/100%10;
                                                                Decade = Money%100/10;
                                                                Last = Money%10;                       
                                                                shuju2[0] = Hundreds+'0';
                                                                shuju2[1] = Decade+'0';
                                                                shuju2[2] = Last + '0';
                                                                shuju2[3] = Buff1[3];
                                                                memcpy(buf,&shuju2,4);
                                                                Write(shuju2,13);
                                                                TP_Show(2,Money);                                                                          
                                                        }
                                                                delay_ms(300);
                                              }
                                                else
                                                {
                                                        LED1 = !LED1;
                                                }
                              }
                      }       
                                 else
                                 {
                                         LED0 = 0;
                                         delay_ms(200);
                                         LED0 = 0;

                                 }       
                 }                                             
        }       
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
peng1554
1楼-- · 2019-07-21 11:05
帮顶!!
正点原子
2楼-- · 2019-07-21 14:03
仿真找问题
da名昊
3楼-- · 2019-07-21 18:46
 精彩回答 2  元偷偷看……
Mr.liu
4楼-- · 2019-07-21 22:56
可以用指令,指定具体那一张卡(ID)进入休眠,这样只有卡重新进入才可以操作。这多读一下数据手册 吧。
da名昊
5楼-- · 2019-07-22 02:14
Mr.liu 发表于 2018-10-26 12:00
可以用指令,指定具体那一张卡(ID)进入休眠,这样只有卡重新进入才可以操作。这多读一下数据手册 吧。

0x26我休眠了然后还是能寻到卡。。。。
da名昊
6楼-- · 2019-07-22 03:10
Mr.liu 发表于 2018-10-26 12:00
可以用指令,指定具体那一张卡(ID)进入休眠,这样只有卡重新进入才可以操作。这多读一下数据手册 吧。

                  
                        while(1)
                        {       
                status=0xff;                               
                                status = Request(RF_CMD_REQUEST_STD);                    //寻卡
                                if(status == FM1702_OK)
                                {
                                        status = 0xff;
                                        status = AntiColl();
                                        if(status == FM1702_OK)
                                        {
                                                status = 0xff;
                                                status=Select_Card();
                                                if(status == FM1702_OK)
                                                {
                                                        status = 0xff;
                                                        status = Load_keyE2_CPY(DefaultKey);
                                                        if(status == TRUE)
                                                        {
                                                                status = 0xff;
                                                                status = Authentication(UID, 3, RF_CMD_AUTH_LB);
                                                                if(status == FM1702_OK)
                                                                {
                                                                        status = 0xff;
                                                                        status=MIF_READ(buf,12);
                                                                        if(status == FM1702_OK)
                                                                        {
                                                                                status = 0xff;
                                                                                status = MIF_Halt();
                                                                                printf("RFID读写一次成功");
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }                                        
                }
        }

一周热门 更多>