久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stc15w408as和rfid-rc522如何進行刷卡 求思路
[打印本頁]
作者:
陳慢慢
時間:
2020-4-5 17:37
標題:
stc15w408as和rfid-rc522如何進行刷卡 求思路
各位大佬 最近在做個刷卡功能的單片機,用的時stc15w408as,然后根據rc-522給的51單片機代碼,改了下管腳定義,但是在上位機上卻尋不到卡,有沒有大佬能幫我看下怎么改才能正常工作
作者:
陳慢慢
時間:
2020-4-5 17:38
這是我的代碼
#include "reg52.h"
#include "main.h"
#include "mfrc522.h"
#include <string.h>
//M1卡的某一塊寫為如下格式,則該塊為錢包,可接收扣款和充值命令
//4字節金額(低字節在前)+4字節金額取反+4字節金額+1字節塊地址+1字節塊地址取反+1字節塊地址+1字節塊地址取反
unsigned char code data2[4] = {0x12,0,0,0};
unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
unsigned char g_ucTempbuf[20];
unsigned char idata MLastSelectedSnr[4];
unsigned char idata RevBuffer[30];
unsigned char data SerBuffer[20];
bit CmdValid;
void iccardcode()
{
unsigned char cmd;
unsigned char status;
cmd = RevBuffer[0];
switch(cmd)
{
case 1: // Halt the card //終止卡的操作
status= PcdHalt();;
RevBuffer[0]=1;
RevBuffer[1]=status;
break;
case 2: // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)
// 尋卡,防沖突,選擇卡 返回卡類型(2 bytes)+ 卡系列號(4 bytes)
status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
if(status!=0)
{
status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
if(status!=0)
{
RevBuffer[0]=1;
RevBuffer[1]=status;
break;
}
}
RevBuffer[0]=3;
RevBuffer[1]=status;
break;
case 3: // 防沖突 讀卡的系列號 MLastSelectedSnr
status = PcdAnticoll(&RevBuffer[2]);
if(status!=0)
{
RevBuffer[0]=1;
RevBuffer[1]=status;
break;
}
memcpy(MLastSelectedSnr,&RevBuffer[2],4);
RevBuffer[0]=5;
RevBuffer[1]=status;
break;
case 4: // 選擇卡 Select Card
status=PcdSelect(MLastSelectedSnr);
if(status!=MI_OK)
{
RevBuffer[0]=1;
RevBuffer[1]=status;
break;
}
RevBuffer[0]=3;
RevBuffer[1]=status;
break;
case 5: // Key loading into the MF RC500's EEPROM
status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校驗卡密碼
RevBuffer[0]=1;
RevBuffer[1]=status;
break;
case 6:
RevBuffer[0]=1;
RevBuffer[1]=status;
break;
case 7:
RevBuffer[0]=1;
RevBuffer[1]=status;
break;
case 8: // Read the mifare card
// 讀卡
status=PcdRead(RevBuffer[1],&RevBuffer[2]);
if(status==0)
{RevBuffer[0]=17;}
else
{RevBuffer[0]=1;}
RevBuffer[1]=status;
break;
case 9: // Write the mifare card
// 寫卡 下載密碼
status=PcdWrite(RevBuffer[1],&RevBuffer[2]);
RevBuffer[0]=1;
RevBuffer[1]=status;
break;
case 10:
PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);
RevBuffer[0]=1;
RevBuffer[1]=status;
break;
case 12: // 參數設置
PcdBakValue(RevBuffer[1], RevBuffer[2]);
RevBuffer[0]=1; //contact
RevBuffer[1]=0;
break;
}
}
/////////////////////////////////////////////////////////////////////
//系統初始化
/////////////////////////////////////////////////////////////////////
void InitializeSystem()
{
P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;
ET2 = 0;
T2CON = 0x04;
PCON = 0x80;
SCON = 0x70;
TMOD = 0x21; //TMOD = 0x22;
TH1 = BAUD_9600;
TL1 = TH1;
TR1 = 1; // 波特率發生器
TH0 = 0x60;
TL0 = 0x60;
TR0 = 0;
ET0=0;
ET1=0;
EA=1;
EX0=1;
IT0 = 1;
TR2=0;
ES = 1;
CmdValid=0;
LED_GREEN = 1;
PcdReset();
PcdAntennaOff();
PcdAntennaOn();
M500PcdConfigISOType( 'A' );
LED_GREEN = 0;
delay_10ms(10);
LED_GREEN = 1;
delay_10ms(10);
LED_GREEN = 0;
}
/////////////////////////////////////////////////////////////////////
//用T2做延時子程序
/////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// 接收和發送中斷
///////////////////////////////////////////////////////////////////////
void isr_UART(void) interrupt 4 using 1
{
unsigned char len, i;
unsigned int j=0;
if(RI)
{
len=SBUF;
RI=0;
for(i=0;i<len;i++)
{
while(!RI)
{
j++;
if(j>1000)
{
break;
}
}
if(j<1000)
{
RevBuffer[i]=SBUF;
RI=0;
j=0;
}
else
{
break;
}
}
if(i==len)
{
REN=0;
CmdValid=1;
}
}
else if(!RI && TI)
{
TI=0;
len=RevBuffer[0];
for(i=0;i<len+1;i++)
{
SBUF=RevBuffer[i];
while(!TI);
TI=0;
}
REN=1;
}
}
void main( )
{
unsigned char baud;
InitializeSystem( );
while (1)
{
if (CmdValid)
{
CmdValid = FALSE;
if(RevBuffer[0]==11) //為了加快相應速度 測試風鳴器
{
RevBuffer[2]=RevBuffer[1];
RevBuffer[0]=1; //contact
RevBuffer[1]=0;
CALL_isr_UART();
LED_GREEN = 1;
delay_10ms(RevBuffer[2]);
LED_GREEN = 0;
}
else if(RevBuffer[0]==13) //設置通訊波特率
{
switch(RevBuffer[1])
{
case 0:
baud=BAUD_9600;
break;
case 1:
baud=BAUD_14400;
break;
case 2:
baud=BAUD_19200;
break;
case 3:
baud=BAUD_28800;
break;
case 4:
baud=BAUD_38400;
break;
case 5:
baud=BAUD_57600;
break;
case 6:
baud=BAUD_115200;
break;
default:
baud=BAUD_9600;
break;
}
RevBuffer[0]=1; //contact
RevBuffer[1]=0;
CALL_isr_UART();
delay_10ms(5);
TR1 = 0;
TH1 = baud;
TL1 = TH1;
delay_10ms(2);
TR1 = TRUE;
}
else
{
iccardcode();
CALL_isr_UART();
}
}
}
}
作者:
陳慢慢
時間:
2020-4-5 17:38
本帖最后由 陳慢慢 于 2020-4-5 17:49 編輯
/* BYTE Registers */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
/* 8052 Extensions */
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
/* BIT Registers */
/* PSW */
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0; //8052 only
/* TCON */
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
/* IE */
sbit EA = IE^7;
sbit ET2 = IE^5; //8052 only
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
/* IP */
sbit PT2 = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
/* P3 */
sbit RD = P3^7;
sbit WR = P3^6;
sbit T1 = P3^5;
sbit T0 = P3^4;
sbit INT1 = P3^3;
sbit INT0 = P3^2;
sbit TXD = P3^1;
sbit RXD = P3^0;
sfr P5 = 0xC8;
sbit P54 = P5^4;
sbit P55 = P5^5;
/* SCON */
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
/* P1 */
sbit T2EX = P1^1; // 8052 only
sbit T2 = P1^0; // 8052 only
/* T2CON */
sbit TF2 = T2CON^7;
sbit EXF2 = T2CON^6;
sbit RCLK = T2CON^5;
sbit TCLK = T2CON^4;
sbit EXEN2 = T2CON^3;
sbit TR2 = T2CON^2;
sbit C_T2 = T2CON^1;
sbit CP_RL2 = T2CON^0;
//sbit SPEAKER = P1^6;
//sbit RC500RST = P3^3;
sfr16 RCAP2LH = 0xCA;
sfr16 T2LH = 0xCC;
作者:
陳慢慢
時間:
2020-4-5 17:39
//////////////////////////////////
//端口定義
/////////////////////////////////////////////////////////////////////
//MFRC522
sbit MF522_RST = P5^4; //RC500片選
sbit MF522_NSS = P1^2;
sbit MF522_SCK = P1^5;
sbit MF522_SI = P1^3;
sbit MF522_SO = P1^4;
//指示燈
//指示燈
sbit LED_GREEN = P1^5;
/////////////////////////////////////////////////////////////////////
//函數原型
/////////////////////////////////////////////////////////////////////
void InitializeSystem();
#define BAUD_115200 256 - (OSC_FREQ/192L)/115200L // 255
#define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254
#define BAUD_38400 256 - (OSC_FREQ/192L)/38400L // 253
#define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 252
#define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 250
#define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 248
#define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 244
#define OSC_FREQ 22118400L
//#define OSC_FREQ 7372800L
#define OSC_FREQ 22118400L
#define RCAP2_50us 65536L - OSC_FREQ/40417L
#define RCAP2_1ms 65536L - OSC_FREQ/2000L
#define RCAP2_10ms 65536L - OSC_FREQ/1200L
#define TIME0_500us 65536L - OSC_FREQ/8000L
#define TIME0_10ms 65536L - OSC_FREQ/200
#define CALL_isr_UART() TI = 1
#define TRUE 1
#define FALSE 0
作者:
gsr64
時間:
2024-12-28 17:06
stc15w408as單片機的IO需要先設置工作模式,就是PxM0和PxM1要作相應設置才可以。
作者:
gsr64
時間:
2024-12-30 07:31
無標題.png
(6.8 KB, 下載次數: 0)
下載附件
2024-12-30 07:31 上傳
作者:
gsr64
時間:
2024-12-30 07:44
例如可以這樣設置:P1M0 = 0x2C; P1M1=0x10; // P1.2 P1.3 P1.5為推挽輸出模式 P1.4為高阻輸入
P5M0 |= 0x10; P5M1 &= ~0x10; /0001 0000設置P5.4 為推挽輸出模式
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美久久一区
|
国产精品高潮呻吟久久av黑人
|
欧美精品在线一区
|
亚洲成人在线免费
|
亚洲精品乱码久久久久久黑人
|
91在线精品播放
|
日韩av在线不卡
|
精品一区二区三区免费视频
|
久久久av
|
亚洲欧洲视频
|
成人av一区
|
久久久久久www
|
网站国产
|
国产精品国产馆在线真实露脸
|
免费午夜电影
|
黑人精品欧美一区二区蜜桃
|
精品av久久久久电影
|
五月天婷婷久久
|
欧美亚洲国语精品一区二区
|
五月天国产
|
91久久国产综合久久
|
国产成人一区在线
|
亚洲高清av
|
精品视频999
|
a级片网站
|
国产一级免费视频
|
黄色av网站在线免费观看
|
av黄色片在线观看
|
免费看大片bbbb欧美
|
免费xxxx大片国产在线
|
国产二区av
|
国产成人高清在线观看
|
国产一区二区三区四区三区四
|
欧美精品一区三区
|
日韩在线小视频
|
黄色大片免费网站
|
国产一区2区
|
欧美国产日韩在线观看
|
免费在线观看成人
|
国产在线激情视频
|
日韩午夜网站
|