久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
單片機+RC522串口助手操作CPU卡源程序
[打印本頁]
作者:
chinafjt
時間:
2021-7-14 20:56
標(biāo)題:
單片機+RC522串口助手操作CPU卡源程序
本人調(diào)試通過。
51hei.png
(8.54 KB, 下載次數(shù): 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
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////文件標(biāo)識的定義/////////////////////////////////////////////////////////////////////////////////
unsigned char code MF_File_Flag[2] = {0x3f,0x00}; //MF文件標(biāo)識3F00//
unsigned char code KEY_File_Flag[2] = {0x00,0x00}; //密鑰文件標(biāo)識0000//
unsigned char code KEY_Flag = {0x00}; //密鑰標(biāo)識00,即放在MF下密鑰文件里面的密鑰,用1個字節(jié)表示 //
unsigned char code DF_File_Flag[2] = {0x3f,0x01}; //DF文件標(biāo)識3F01//
unsigned char code KEY_DF_File_Flag[2] = {0x00,0x01}; //DF下的密鑰文件標(biāo)識0001//
unsigned char code Keyword_DF_Flag = {0x01}; //密鑰標(biāo)識01,即放在DF下密鑰文件里面的密鑰,用1個字節(jié)表示 //
unsigned char code EF_File3_Flag[2] = {0x00,0x03}; //EF文件標(biāo)識0003//
unsigned char code EF_File4_Flag[2] = {0x00,0x04}; //EF文件標(biāo)識0004//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char xdata g_ucTempbuf[MAXRLEN];
unsigned char xdata Rec_Buf[MAXRLEN]; //接收到串口助手的數(shù)據(jù)緩存器
unsigned char WorkInt; //成功接收指令的標(biāo)志
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 初值自動裝入 產(chǎn)生波特率
TH1=0xfd; //定時器初始為0XFd,晶振為22.1184MHz,本函數(shù)實際產(chǎn)生的波特率為38400bps
TL1=0xfd; //同上
SCON=0x50; //串口設(shè)置為方式1,REN=1,允許接收
TR1=1; //啟動定時器1
ES=1; //使能串口接收中斷,
EA=1; //打開所有中斷
}
/**************************************************************************
- 功能描述:51單片機的串口發(fā)送字節(jié)的函數(shù)
- 隸屬模塊:STC51串口操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:mydata:要發(fā)送的一個字節(jié)
- 返回說明:無
- 注:發(fā)送一個字節(jié),是串口發(fā)送的基礎(chǔ)操作
**************************************************************************/
void UART_Send_Byte(unsigned char mydata)
{
ES=0;
TI=0;
SBUF=mydata;
while(!TI);
TI=0;
ES=1;
}
/**************************************************************************
- 功能描述:51單片機的串口發(fā)送0d 0a ,即回車換行
- 隸屬模塊:STC51串口操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:無
- 返回說明:無
- 注:此函數(shù)就是發(fā)送0d 0a這兩個字節(jié),在“超級終端”上會有回車換行的效果
**************************************************************************/
void UART_Send_Enter()
{
UART_Send_Byte(0x0d);
UART_Send_Byte(0x0a);
}
/**************************************************************************
- 功能描述:51單片機的串口發(fā)送字符串
- 隸屬模塊:STC51串口操作
- 函數(shù)屬性:外部,使用戶使用
- 參數(shù)說明:s:指向字符串的指針
- 返回說明:無
- 注:如果在字符串中有'\n',則會發(fā)送一個回車換行
**************************************************************************/
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]);
}
}
/////////////////////////////////////////////////////////////////////
//串行中斷,接收串口助手發(fā)來的數(shù)據(jù)
/////////////////////////////////////////////////////////////////////
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)) //尋卡及復(fù)位只操作一次 約定指令為:01AA
{
Rec_Buf[0]=0;
Cmd_Len=0;
if(GetCard(PICC_REQALL,tt,g_ucTempbuf)!=ST_OK) //尋卡函數(shù)
{
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卡復(fù)位函數(shù)
{
UART_Send_Str("復(fù)位失敗!");
UART_Send_Enter();
continue;
}
UART_Send_Str("復(fù)位成功!");
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]); //串口助手顯示返回狀態(tài)
BEEP=0;
delay1(100);
BEEP=1;
delay1(100);
BEEP=0;
delay1(100);
BEEP=1;
memset(g_ucTempbuf, 0x00, MAXRLEN); //清0
}
}
}
/////////////////////////////////////////////////////////////////////
//系統(tǒng)初始化
/////////////////////////////////////////////////////////////////////
void InitSystem()
{
P0 = P1 = P2 = P3 = 0xFF;
UART_Init();
}
復(fù)制代碼
所有資料51hei提供下載:
RC522_CPU卡.rar
(126.91 KB, 下載次數(shù): 49)
2021-7-14 20:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
91成人
|
欧美成人一区二区三区
|
91成人免费
|
97精品国产97久久久久久免费
|
国产美女自拍视频
|
欧美中文字幕一区二区三区亚洲
|
欧美日韩国产不卡
|
国产精品成人在线播放
|
亚洲精品九九
|
一级免费毛片
|
亚洲欧美精品
|
免费观看的av毛片的网站
|
日韩高清一区
|
亚洲精品99999
|
欧美一区二区三区在线观看
|
日韩和的一区二区
|
国产91久久精品一区二区
|
欧美日韩综合
|
欧美日一区
|
精品自拍视频
|
久久久久久国产
|
a级黄色片在线观看
|
成人在线免费观看视频
|
亚洲小视频在线观看
|
99热欧美
|
九九综合九九
|
狠狠狠干
|
欧美黄色录像
|
久久久久国产精品
|
亚洲精久久久
|
91精品在线播放
|
欧美日韩亚洲国产综合
|
www.国产视频
|
色综合久
|
天天操天天射天天
|
日韩91在线
|
国产精品一区二区三区在线
|
日韩在线免费播放
|
免费观看一级毛片
|
涩涩导航
|
国产婷婷在线视频
|