RC523已經可以正常讀寫M1卡了,按鍵控制,OLED顯示數據,沒有用串口顯示但是ID讀不出來,第一步尋卡直接失敗了,找不到問題點在哪里,知道的大佬能提點一下。以下是代碼。
單片機源程序如下:
- u8 xdata AAA=0;
- u8 xdata pUID[10]={0};
- void Pcd_Config(u8 type)//寄存器配置
- {
- PcdAntennaOff();
- if ('A' == type)
- {
- WriteRawRC(CommandReg,PCD_RESETPHASE);
- _nop_();
- WriteRawRC(ModeReg,0x3D); //和Mifare卡通訊,CRC初始值0x6363
- WriteRawRC(TReloadRegL,30);
- WriteRawRC(TReloadRegH,0);
- WriteRawRC(TModeReg,0x8D);
- WriteRawRC(TPrescalerReg,0x3E);
- WriteRawRC(TxAutoReg,0x40);
- ClearBitMask(Status2Reg,0x08);
- WriteRawRC(ModeReg,0x3D);//3F
- WriteRawRC(RxSelReg,0x86);//84
- WriteRawRC(RFCfgReg,0x7F); //4F
- WriteRawRC(TReloadRegL,30);//tmoLength);// TReloadVal = 'h6a =tmoLength(dec)
- WriteRawRC(TReloadRegH,0);
- WriteRawRC(TModeReg,0x8D);
- WriteRawRC(TPrescalerReg,0x3E);
- }
- else if ('B' == type)
- {
- ClearBitMask(Status2Reg, 0x08);
- WriteRawRC(ControlReg, 0x10);
- WriteRawRC(ModeReg, 0x3F); // For 0xFFFF crc
- WriteRawRC(TReloadRegL, 30);
- WriteRawRC(TReloadRegH, 0);
- WriteRawRC(TModeReg, 0x8D);
- WriteRawRC(TPrescalerReg, 0x3E);
- WriteRawRC(TxAutoReg, 0); // Force 100ASK = 0
-
- /**************************************發送部分*****************************/
- WriteRawRC(GsNReg, 0xFa); //0xF8
- WriteRawRC(CWGsCfgReg, 0x3F);
- WriteRawRC(ModGsCfgReg, 0x08); //08
- WriteRawRC(TxModeReg, 0x83); //03
- WriteRawRC(BitFramingReg, 0x00);
- WriteRawRC(AutoTestReg, 0x00);
-
- WriteRawRC(TypeBReg, 0xc0);
- WriteRawRC(ModWidthReg,0x68);
- WriteRawRC(DemodReg, 0x5D);
- WriteRawRC(RFCfgReg, 0x70); // 0x59 RegRxControl1//73,
- WriteRawRC(RxModeReg, 0x83); //03
- WriteRawRC(RxThresholdReg, 0x65);//0x75);
- /**************************************TYPEB特征參數設定*****************************/
- ClearBitMask(RxSelReg,0x3F); // TR0
- SetBitMask(RxSelReg, 0x08);
- ClearBitMask(TxModeReg, 0x80); // ?CRC
- ClearBitMask(RxModeReg, 0x80);
- ClearBitMask(Status2Reg, 0x08); // MFCrypto1On =0
- }
- PcdAntennaOn();
- }
- void typeB_Allot()
- {
- u8 status;
- static u16 xdata count=0;
- if(key4x4_Read_Byte==5)
- {
- count++;
- if(count>=200)
- {
- count=0;
- switch(key4x4_Read_Byte)
- {
- case 5:
- status=RCRequestTypeB();
- if(status==MI_OK)
- {
- key4x4_Read_Byte=6;
- }
- else
- {
- AAA=1;
- }
- break;
- case 6:
- status=RCATTRIBTypeB();
- if(status==MI_OK)
- {
- key4x4_Read_Byte=7;
- }
- else
- {
- AAA=2;
- }
- break;
- case 7:
- status=RCGetUIDTypeB(pUID);
- if(status==MI_OK)
- {
- key4x4_Read_Byte=8;
- }
- else
- {
- AAA=3;
- }
- break;
- case 8:
- // PcdHalt();//終止卡的操作,命令卡片進入休眠狀態
- AAA=4;
- key4x4_Read_Byte=0;
- break;
- }
- }
- }
- }
- void OLED_Allot()
- {
- static u16 xdata count=0;
- if(OLED_Modify_Allow) //允許單片機修改XRAM
- {
- count++;
- switch(count)
- {
- case 5: OLED_Symbol_Ser(0,0,pUID[0]/16+'0',pUID[0]%16+'0');break;
- case 10:OLED_Symbol_Ser(0,1,pUID[1]/16+'0',pUID[1]%16+'0');break;
- case 15:OLED_Symbol_Ser(0,2,pUID[2]/16+'0',pUID[2]%16+'0');break;
- case 20:OLED_Symbol_Ser(0,3,pUID[3]/16+'0',pUID[3]%16+'0');break;
- case 25:OLED_Symbol_Ser(0,4,pUID[4]/16+'0',pUID[4]%16+'0');break;
- case 30:OLED_Symbol_Ser(0,5,pUID[5]/16+'0',pUID[5]%16+'0');break;
- case 35:OLED_Symbol_Ser(0,6,pUID[6]/16+'0',pUID[6]%16+'0');break;
- case 40:OLED_Symbol_Ser(0,7,pUID[7]/16+'0',pUID[7]%16+'0');break;
- case 45:OLED_Symbol_Ser(2,0,pUID[8]/16+'0',pUID[8]%16+'0');break;
- case 50:OLED_Symbol_Ser(2,2,pUID[9]/16+'0',pUID[9]%16+'0');break;
- case 55:OLED_Symbol_Ser(2,4,key4x4_Read_Byte+'0',AAA+'0');
- // case 60:OLED_Symbol_Ser(2,7,Read_Buffer[14]+'0',Read_Buffer[15]+'0');break;
- // case 65:OLED_Symbol_Ser(4,3,(AAA-1)/10+'0',(AAA-1)%10+'0');
- count=0;break;
- }
- OLED_Modify_Allow=0;
- }
- else //不允許修改RAM,只能顯示數據到OLED
- {
- OLED_New_Show_Ser();
- }
- }
- void main()
- {
- P0M1=0;P0M0=0;
- P1M1=0;P1M0=0;
- P2M1=0;P2M0=0;
- P3M1=0;P3M0=0;
- P4M1=0;P4M0=0;
- P5M1=0;P5M0=0;
- IIC_Init();
- OLED_Init();
- // Pcd_Config('A');
- Pcd_Config('B');
- while(1)
- {
- OLED_Allot();
- key_Scan_Drive();
- typeA_Allot();
- typeB_Allot();
- }
- }
復制代碼 |