亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機+RC522串口助手操作CPU卡源程序
[打印本頁]
作者:
chinafjt
時間:
2021-7-14 20:56
標題:
單片機+RC522串口助手操作CPU卡源程序
本人調試通過。
51hei.png
(8.54 KB, 下載次數: 54)
下載附件
2021-7-15 03:51 上傳
單片機源程序如下:
#include <STDIO.H>
#include <string.h>
#include "reg52.h"
#include "main.h"
#include "rc522.h"
#include "1602.h"
//////////////////CPU卡的指令/////////////////////////////////////////////////////////////////////////////////
unsigned char code Keyfile[7] ={0x3F, 0x00, 0xB0, 0x01, 0xF0, 0xFF, 0xFF}; //建密鑰文件
unsigned char code DefaultKey[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //原始外部密鑰
unsigned char code ExKey[5] ={0x39, 0xF0, 0xF0, 0xAA, 0x55}; ////外部密鑰建立的指令信息
unsigned char code DFfile[13] ={0x38,0x05,0x20,0xF0,0xF0,0x95,0xFF,0xFF,0x44,0x44,0x46,0x30,0x31};//建立的DF文件
unsigned char code EF_KEY_File[7]={0x3F, 0x01, 0x8F, 0x95, 0xF0, 0xFF, 0xFF};//建立EF密鑰文件
unsigned char code C_KEY[8]={0x3A, 0xF0, 0xEF, 0x44, 0x55, 0x12, 0x34, 0x56}; //增加口令密鑰
unsigned char code EF_File1[7]={0x28, 0x00, 0x1E, 0xF0, 0xF0, 0xFF, 0xFF};// 基本文件EF 建立的二進制文件1
unsigned char code EF_File2[7]={0x28, 0x00, 0x0F, 0xF4, 0xF0, 0xFF, 0xFF};// 基本文件EF 建立的二進制文件2
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////文件標識的定義/////////////////////////////////////////////////////////////////////////////////
unsigned char code MF_File_Flag[2] = {0x3f,0x00}; //MF文件標識3F00//
unsigned char code KEY_File_Flag[2] = {0x00,0x00}; //密鑰文件標識0000//
unsigned char code KEY_Flag = {0x00}; //密鑰標識00,即放在MF下密鑰文件里面的密鑰,用1個字節表示 //
unsigned char code DF_File_Flag[2] = {0x3f,0x01}; //DF文件標識3F01//
unsigned char code KEY_DF_File_Flag[2] = {0x00,0x01}; //DF下的密鑰文件標識0001//
unsigned char code Keyword_DF_Flag = {0x01}; //密鑰標識01,即放在DF下密鑰文件里面的密鑰,用1個字節表示 //
unsigned char code EF_File3_Flag[2] = {0x00,0x03}; //EF文件標識0003//
unsigned char code EF_File4_Flag[2] = {0x00,0x04}; //EF文件標識0004//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char xdata g_ucTempbuf[MAXRLEN];
unsigned char xdata Rec_Buf[MAXRLEN]; //接收到串口助手的數據緩存器
unsigned char WorkInt; //成功接收指令的標志
unsigned char Cmd_Len; //指令長度
void delay1(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void UART_Init()
{
PCON=0x80; //PCON的最高位SMOD=1時波特率加倍
TMOD=0x20; //時器1為方式2 初值自動裝入 產生波特率
TH1=0xfd; //定時器初始為0XFd,晶振為22.1184MHz,本函數實際產生的波特率為38400bps
TL1=0xfd; //同上
SCON=0x50; //串口設置為方式1,REN=1,允許接收
TR1=1; //啟動定時器1
ES=1; //使能串口接收中斷,
EA=1; //打開所有中斷
}
/**************************************************************************
- 功能描述:51單片機的串口發送字節的函數
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用
- 參數說明:mydata:要發送的一個字節
- 返回說明:無
- 注:發送一個字節,是串口發送的基礎操作
**************************************************************************/
void UART_Send_Byte(unsigned char mydata)
{
ES=0;
TI=0;
SBUF=mydata;
while(!TI);
TI=0;
ES=1;
}
/**************************************************************************
- 功能描述:51單片機的串口發送0d 0a ,即回車換行
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用
- 參數說明:無
- 返回說明:無
- 注:此函數就是發送0d 0a這兩個字節,在“超級終端”上會有回車換行的效果
**************************************************************************/
void UART_Send_Enter()
{
UART_Send_Byte(0x0d);
UART_Send_Byte(0x0a);
}
/**************************************************************************
- 功能描述:51單片機的串口發送字符串
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用
- 參數說明:s:指向字符串的指針
- 返回說明:無
- 注:如果在字符串中有'\n',則會發送一個回車換行
**************************************************************************/
void UART_Send_Str(char *s)
{
int len=strlen(s)-1;
int i;
for(i=0;i<len;i++)
UART_Send_Byte(s[i]);
if(s[i]=='\n')
{
UART_Send_Enter();
}
else
{
UART_Send_Byte(s[i]);
}
}
/////////////////////////////////////////////////////////////////////
//串行中斷,接收串口助手發來的數據
/////////////////////////////////////////////////////////////////////
seri_int () interrupt 4 using 1
{
unsigned char len, i;
unsigned int j=0;
if (RI)
{
ES=0;
len=SBUF;
RI=0;
for(i=0;i<len;i++)
{
while(!RI)
{
j++;
if(j>1000)
{
ES=1;
break;
}
}
if(j<1000)
{
Rec_Buf[i]=SBUF;
RI=0;
j=0;
}
else
{
ES=1;
break;
}
}
if(i==len)
{
ES=1;
Cmd_Len=len;
WorkInt = 1;
}
}
}
void u8tostr(unsigned char dat)
{
switch(dat>>4) //高位
{
case 0: UART_Send_Byte(0x30); break;
case 1: UART_Send_Byte(0x31); break;
case 2: UART_Send_Byte(0x32); break;
case 3: UART_Send_Byte(0x33); break;
case 4: UART_Send_Byte(0x34); break;
case 5: UART_Send_Byte(0x35); break;
case 6: UART_Send_Byte(0x36); break;
case 7: UART_Send_Byte(0x37); break;
case 8: UART_Send_Byte(0x38); break;
case 9: UART_Send_Byte(0x39); break;
case 0x0A: UART_Send_Byte(0x41); break;
case 0x0B: UART_Send_Byte(0x42); break;
case 0x0C: UART_Send_Byte(0x43); break;
case 0x0D: UART_Send_Byte(0x44); break;
case 0x0E: UART_Send_Byte(0x45); break;
case 0x0F: UART_Send_Byte(0x46); break;
}
switch(dat&0x0f) //低位
{
case 0: UART_Send_Byte(0x30); break;
case 1: UART_Send_Byte(0x31); break;
case 2: UART_Send_Byte(0x32); break;
case 3: UART_Send_Byte(0x33); break;
case 4: UART_Send_Byte(0x34); break;
case 5: UART_Send_Byte(0x35); break;
case 6: UART_Send_Byte(0x36); break;
case 7: UART_Send_Byte(0x37); break;
case 8: UART_Send_Byte(0x38); break;
case 9: UART_Send_Byte(0x39); break;
case 0x0A: UART_Send_Byte(0x41); break;
case 0x0B: UART_Send_Byte(0x42); break;
case 0x0C: UART_Send_Byte(0x43); break;
case 0x0D: UART_Send_Byte(0x44); break;
case 0x0E: UART_Send_Byte(0x45); break;
case 0x0F: UART_Send_Byte(0x46); break;
}
}
void UART_Put_Num(unsigned char * dat,unsigned char len)
{
unsigned char i;
for(i=0;i<len;i++)
{
u8tostr(dat[i]);
}
UART_Send_Enter();
}
//////////////////////////////////////////////////////////////////////////////
void main( )
{
unsigned char status;
unsigned char tt[2],st[2];
unsigned int sst=0;
InitSystem( );
lcd_int();
RC522_Init();
PcdAntennaOff();
PcdAntennaOn();
display_welcome();
delay1(500);
BEEP=0;
delay1(100);
BEEP=1;
memset(g_ucTempbuf, 0x00, MAXRLEN); //清0
while(1)
{
if(WorkInt)
{
WorkInt=0;
if((Cmd_Len==1)&&(Rec_Buf[0]==0xAA)) //尋卡及復位只操作一次 約定指令為:01AA
{
Rec_Buf[0]=0;
Cmd_Len=0;
if(GetCard(PICC_REQALL,tt,g_ucTempbuf)!=ST_OK) //尋卡函數
{
UART_Send_Str("無卡!");
UART_Send_Enter();
continue;
} //尋卡失敗返回
else
{
UART_Send_Str("類型:");
UART_Put_Num(tt,2); //串口助手顯示返回
UART_Send_Enter();
UART_Send_Str("卡號:");
UART_Put_Num(g_ucTempbuf,4); //串口助手顯示返回
UART_Send_Enter();
}
memset(g_ucTempbuf, 0x00, MAXRLEN); //清0
if (CardReset(g_ucTempbuf,st)!=ST_OK) //CPU卡復位函數
{
UART_Send_Str("復位失敗!");
UART_Send_Enter();
continue;
}
UART_Send_Str("復位成功!");
UART_Send_Str("返回ATS值:");
UART_Send_Enter();
UART_Put_Num(g_ucTempbuf,st[0]); //串口助手顯示返回
UART_Send_Enter();
memset(g_ucTempbuf, 0x00, MAXRLEN); //清0
BEEP=0;
delay1(500);
BEEP=1;
continue;
}
status=Pcd_Cmd(Rec_Buf, Cmd_Len, g_ucTempbuf,tt);
if(status) //1時出錯了
{
Cmd_Len=0;
memset(Rec_Buf, 0x00, MAXRLEN);
memset(g_ucTempbuf, 0x00, MAXRLEN); //清0
UART_Send_Str("操作失敗!");
UART_Send_Enter();
continue; //返回
}
UART_Put_Num(&g_ucTempbuf[2],tt[0]); //串口助手顯示返回狀態
BEEP=0;
delay1(100);
BEEP=1;
delay1(100);
BEEP=0;
delay1(100);
BEEP=1;
memset(g_ucTempbuf, 0x00, MAXRLEN); //清0
}
}
}
/////////////////////////////////////////////////////////////////////
//系統初始化
/////////////////////////////////////////////////////////////////////
void InitSystem()
{
P0 = P1 = P2 = P3 = 0xFF;
UART_Init();
}
復制代碼
所有資料51hei提供下載:
RC522_CPU卡.rar
(126.91 KB, 下載次數: 49)
2021-7-14 20:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1