标题:
单片机RFID高频RC632读卡程序,14443A,B.15693,都有
[打印本页]
作者:
88889527
时间:
2019-10-23 23:16
标题:
单片机RFID高频RC632读卡程序,14443A,B.15693,都有
这是51单片机并行口rc632读卡程序
单片机源程序如下:
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#include "main.h"
#include "slrc632.h"
#include "iso14443a.h"
#include "iso14443b.h"
#include "iso15693.h"
/*Declare SFR associated with the IAP */
sfr IAP_DATA = 0xE2; //Flash data register
sfr IAP_ADDRH = 0xE3; //Flash address HIGH
sfr IAP_ADDRL = 0xE4; //Flash address LOW
sfr IAP_CMD = 0xE5; //Flash command register
sfr IAP_TRIG = 0xE6; //Flash command trigger
sfr IAP_CONTR = 0xE7; //Flash control register
//硬件版本号
unsigned char code hardmodel[12] = {"SL601F-0512"};
bit g_bReceOk; //正确接收到上位机指令标志
bit g_bReceAA; //接收到上位机发送的AA字节标志
bit g_bRc632Ok; //RC632复位正常标志
bit g_bIblock;
void outputconvery ();
unsigned char Readcard_flag,start_flag=0,startnum=0;
unsigned int idata g_cReceNum; //接收到上位机的字节数
unsigned int data g_cCommand; //接收到的命令码
unsigned char data g_cSNR[4]; //M1卡序列号
unsigned char g_cIcdevH; //设备标记
unsigned char g_cIcdevL; //设备标记
unsigned char g_cFWI; //
unsigned char idata g_cCidNad,huankuaiflag=0; //
unsigned char idata g_cReceBuf[64]; //和上位机通讯时的缓冲区
unsigned char idata canshu[5]={0x00,0x00,0x00,0x10,0x01};//0:扇区,1:块,2-3:卡号首尾位置,4:读卡方式
unsigned char idata key[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//密码
unsigned char idata canshuflag=0,timenum=0,UID[4];
struct TranSciveBuffer{unsigned char MfCommand;
unsigned int MfLength;
unsigned char MfData[64];
};
/***************************定时器0初始化********************************/
void timer0init (void)//22.1184MHZ,20ms
{
TH0=0x70;
TL0=0x00;
ET0=1;
TR0=1;
TMOD=0x21;
}
/*****************************定时器0中断函数********************************/
void timer0(void) interrupt 1
{
TH0=0x70;
TL0=0x00;
timenum++;
if(timenum==100) canshuflag=1,timenum=0;
}
void gonggongdaima(void)
{
IAP_TRIG = 0x46;//发送46h到触发寄存器
IAP_TRIG = 0xB9;//发送B9h到触发寄存器
_nop_();//延时
IAP_CONTR = 0;//关闭IAP功能
IAP_CMD = 0;//清空命令寄存器
IAP_TRIG = 0;//清空命令触发寄存器
IAP_ADDRH = 0;//清空地址高位
IAP_ADDRL = 0;//清空地址低位
}
/**************************字节读函数***************************************/
unsigned char Byte_Read(unsigned int add)
{
IAP_DATA = 0x00;//清空数据
IAP_CONTR = 0x81;//打开IAP,设置操作等待时间
IAP_CMD = 0x01;//字节读命令
IAP_ADDRH = add>>8;//设置高8位地址
IAP_ADDRL = add&0x00ff;//设置低8位地址
gonggongdaima();
return (IAP_DATA);//返回读到的数据
}
/*****************************字节编程函数*****************************/
void Byte_Program(unsigned int add, unsigned char dat)
{
IAP_CONTR = 0x81;//打开IAP,设置操作等待时间
IAP_CMD = 0x02;//字节编程命令
IAP_ADDRH = add>>8;//设置高8位地址
IAP_ADDRL = add&0x00ff;//设置低8位地址
IAP_DATA = dat;//要编程的数据先送进IAP_DATA寄存器
gonggongdaima();
}
/*****************************扇区擦除函数****************************/
void Sector_Erase(unsigned int add)
{
IAP_CONTR = 0x81;//打开IAP,设置操作等待时间
IAP_CMD = 0x03;//扇区擦除命令
IAP_ADDRH = add>>8;//设置高8位地址
IAP_ADDRL = add&0x00ff;//设置低8位地?
gonggongdaima();
}
/****************************读取参数函数************************/
void Read_canshu(void)
{
canshu[0]=Byte_Read(0x8000);
canshu[1]=Byte_Read(0x8001);
canshu[2]=Byte_Read(0x8002);
canshu[3]=Byte_Read(0x8003);
canshu[4]=Byte_Read(0x8004);
}
void Read_Akey(void)
{
key[0]=Byte_Read(0x8200);
key[1]=Byte_Read(0x8201);
key[2]=Byte_Read(0x8202);
key[3]=Byte_Read(0x8203);
key[4]=Byte_Read(0x8204);
key[5]=Byte_Read(0x8205);
}
void Read_Bkey(void)
{
key[0]=Byte_Read(0x8400);
key[1]=Byte_Read(0x8401);
key[2]=Byte_Read(0x8402);
key[3]=Byte_Read(0x8403);
key[4]=Byte_Read(0x8404);
key[5]=Byte_Read(0x8405);
}
/****************************保存参数函数****************************/
void Save_canshu(void)
{
Sector_Erase(0x8000);//擦除扇区
Byte_Program(0x8000,canshu[0]);
Byte_Program(0x8001,canshu[1]);
Byte_Program(0x8002,canshu[2]);
Byte_Program(0x8003,canshu[3]);
Byte_Program(0x8004,canshu[4]);
}
void Save_Akey(void)
{
Sector_Erase(0x8200);//擦除扇区
Byte_Program(0x8200,key[0]);
Byte_Program(0x8201,key[1]);
Byte_Program(0x8202,key[2]);
Byte_Program(0x8203,key[3]);
Byte_Program(0x8204,key[4]);
Byte_Program(0x8205,key[5]);
}
void Save_Bkey(void)
{
Sector_Erase(0x8400);//擦除扇区
Byte_Program(0x8400,key[0]);
Byte_Program(0x8401,key[1]);
Byte_Program(0x8402,key[2]);
Byte_Program(0x8403,key[3]);
Byte_Program(0x8404,key[4]);
Byte_Program(0x8405,key[5]);
}
void delay(unsigned int i)
{
unsigned char j;
while(i--) for(j=0;j<200;j++);
}
void BEEP(unsigned char i)
{
unsigned char k;
k=100;
sond = 0;
redled = 1;
blueled = 0;
delay(k);
sond =1;
blueled = 1;
redled = 0;
}
void REDON(void)
{
redled = 1;
}
void REDOFF(void)
{
redled = 0;
}
void BLUEON(void)
{
blueled = 1;
}
void BLUEOFF(void)
{
blueled = 0;
}
void main( )
{
InitializeSystem( );
Rc632Ready( );
PcdConfigISOType( '1' );
BEEP(2);
DelayMs(1000);
RC632_CE=0;
ComSetBound();//波特率
RC632_CE=1;
EA=1;
g_cReceBuf[6]=0;
RC632_CE=0;
ComPcdAntenna();//天线
RC632_CE=1;
EA=1;
RC632_CE=0;
ComM632PcdConfigISOType();//ISO14443A/B或ISO15693
RC632_CE=1;
EA=1;
Readcard_flag=0;
timer0init ();
while ( 1 )
{
if(canshuflag==1) Read_canshu(),Read_Akey(),BEEP(3),canshuflag=0,TR0=0;//读取参数
if(Readcard_flag==0)
{
g_cReceBuf[6]=0;
RC632_CE=0;
ComPcdAntenna();
RC632_CE=1;
EA=1;
}
if(Readcard_flag==2)
{
RC632_CE=0;
ComM632PcdConfigISOType();
RC632_CE=1;
EA=1;
}
if(Readcard_flag==3)
{
g_cReceBuf[6]=1;
RC632_CE=0;
ComPcdAntenna();
RC632_CE=1;
EA=1;
}
if(Readcard_flag==4)
{
RC632_CE=0;
ComISO15693_Inventory16();
RC632_CE=1;
EA=1;
}
//
// if(Readcard_flag==5)
// {
//
// RC632_CE=0;
//
// ComISO15693_Select();
// RC632_CE=1;
// EA=1;
//
// }
if(Readcard_flag==5)
{
RC632_CE=0;
ComISO15693_Read_sm();
RC632_CE=1;
EA=1;
}
g_bReceOk=0;
if (g_bReceOk)
{
g_bReceOk = 0;
RC632_CE=0;
switch(g_cCommand)
{
case 0x0101:
ComSetBound(); break;
case 0x0104:
ComGetHardModel(); break;
case 0x0108:
ComM632PcdConfigISOType(); break;
case 0x010C:
ComPcdAntenna(); break;
case 0x0201:
ComRequestA(); break;
case 0x0202:
ComAnticoll(); break;
case 0x0203:
ComSelect(); break;
case 0x0204:
ComHlta(); break;
case 0x0207:
ComAuthentication(); break;
case 0x0208:
ComM1Read(); break;
case 0x0209:
ComM1Write(); break;
case 0x020A:
ComM1Initval(); break;
case 0x020B:
ComM1Readval(); break;
case 0x020C:
ComM1Decrement(); break;
case 0x020D:
ComM1Increment(); break;
case 0x020E:
ComM1Restore(); break;
case 0x020F:
ComM1Transfer(); break;
case 0x0210:
ComTypeARst(); break;
case 0x0211:
ComTypeACOS(); break;
case 0x0212:
ComUL_PcdAnticoll(); break;
case 0x0213:
ComUL_PcdWrite(); break;
case 0x0301:
ComTypeBRst(); break;
// case 0x1E:
// ComAttrib(); break;
case 0x0302:
ComHltb(); break;
case 0x0303:
ComCL_Deselect(); break;
case 0x0401:
ComRF020Check(); break;
case 0x0402:
ComRF020Read(); break;
case 0x0403:
ComRF020Write(); break;
case 0x0404:
ComRF020Lock(); break;
case 0x0405:
ComRF020Count(); break;
case 0x0406:
ComRF020Deselect(); break;
case 0x0501:
ComSelectSR(); break;
case 0x0502:
ComCompletionSR(); break;
case 0x0503:
ComReadSR176(); break;
case 0x0504:
ComWriteSR176(); break;
case 0x0505:
ComProtectSR176(); break;
case 0x0506:
ComReadSR4K(); break;
case 0x0507:
ComWriteSR4K(); break;
case 0x0508:
ComAuthSR4K(); break;
case 0x0509:
ComGetUIDSR4K(); break;
case 0x050A:
ComProtectSR4K(); break;
case 0x1000:
ComISO15693_Inventory16(); break;
case 0x1001:
ComISO15693_Inventory(); break;
case 0x1002:
ComISO15693_Stay_Quiet(); break;
case 0x1003:
ComISO15693_Select(); break;
case 0x1004:
ComISO15693_Reset_To_Ready();break;
case 0x1005:
ComISO15693_Read_sm(); break;
case 0x1006:
ComISO15693_Write_sm(); break;
case 0x1007:
ComISO15693_Lock_Block(); break;
case 0x1008:
ComISO15693_Write_AFI(); break;
case 0x1009:
ComISO15693_Lock_AFI(); break;
case 0x100A:
ComISO15693_Write_DSFID(); break;
case 0x100B:
ComISO15693_Lock_DSFID(); break;
case 0x100C:
ComISO15693_Get_System_Information(); break;
case 0x100D:
ComISO15693_Get_Multiple_Block_Security();break;
default:
AnswerErr( FAULT11 ); break;
}
REDOFF();
BLUEON();
sond = 1;
sond_1 = 1;
REDON();
BLUEOFF();
RC632_CE=1;
ES = 1;
EA=1;
}
}
}
/////////////////////////////////////////////////////////////////////
//系统初始化
/////////////////////////////////////////////////////////////////////
void InitializeSystem()
{
TMOD &= 0x0F;
TMOD |= 0x21;
PCON |= 0x80;
SCON = 0x50;
TH1 = TL1 = BOUND19200;
TR1=1;
P0 = P1 = P2 = P3 = 0xFF;
IE |= 0x90;
}
/////////////////////////////////////////////////////////////////////
//初始化RC632
/////////////////////////////////////////////////////////////////////
void Rc632Ready()
{
char status;
delay(100);
status = PcdReset();
if(status != MI_OK)
{
delay(10);
status = PcdReset();
}
if(status != MI_OK)
{
delay(10);
status = PcdReset();
}
if(status == MI_OK)
{
g_bRc632Ok = 1;
}
}
/////////////////////////////////////////////////////////////////////
//响应上位机发送的设置波特率命令
/////////////////////////////////////////////////////////////////////
void ComSetBound()
{
unsigned char bound =1;
if (bound > 7)
{ Readcard_flag=1; }
else
{
Readcard_flag=1;
TR1 = 0;
switch(bound)
{
case 0:
TH1=TL1=BOUND4800;
break;
case 1:
TH1=TL1=BOUND9600;
break;
case 2:
TH1=TL1=BOUND14400;
break;
case 3:
TH1=TL1=BOUND19200;
break;
case 4:
TH1=TL1=BOUND28800;
break;
case 5:
TH1=TL1=BOUND38400;
break;
case 6:
TH1=TL1=BOUND57600;
break;
case 7:
TH1=TL1=BOUND115200;
break;
default:
break;
}
TR1 = 1;
}
}
/////////////////////////////////////////////////////////////////////
//响应上位机发送的读取硬件版本号命令
/////////////////////////////////////////////////////////////////////
void ComGetHardModel()
{
memcpy(&g_cReceBuf[0], &hardmodel[0], sizeof(hardmodel));
AnswerOk(&g_cReceBuf[0], sizeof(hardmodel));
}
/////////////////////////////////////////////////////////////////////
//响应上位机发送的设置RC632协议命令,ISO14443A/B或ISO15693
/////////////////////////////////////////////////////////////////////
void ComM632PcdConfigISOType()
{
if (MI_OK == PcdConfigISOType(49))
{ Readcard_flag=3; }
else
{ Readcard_flag=0; }
}
/////////////////////////////////////////////////////////////////////
//响应上位机发送的天线命令
/////////////////////////////////////////////////////////////////////
void ComPcdAntenna()
{
char status;
if (!g_cReceBuf[6])
{
status = PcdAntennaOff();
if (status == MI_OK)
{
Readcard_flag=2;
}
else
{
Readcard_flag=3;
}
}
else
{
DelayMs(5);
status = PcdAntennaOn();
DelayMs(5);
if (status == MI_OK)
{
Readcard_flag=4;
}
else
{
Readcard_flag=3;
}
}
}
/////////////////////////////////////////////////////////////////////
//响应上位机发送的寻卡命令
/////////////////////////////////////////////////////////////////////
/*void ComRequestA()
{
unsigned char atq[2];
char status;
status = ISO15693_Inventory(0x7b,0x30,0x10);
if (status != MI_OK)
{ status = ISO15693_Inventory(0x7b,0x30,0x10); }
if (status == MI_OK)
{
if(start_flag==0)Readcard_flag=5;
else
{
startnum=0;
Readcard_flag=0;
}
}
else
{
Readcard_flag=0;
if(start_flag==1)
{
startnum++;
if(startnum>=5)
{
start_flag=0;
startnum=0;
}
}
}
}
/////////////////////////////////////////////////////////////////////
//响应上位机发送的A卡防冲撞命令
/////////////////////////////////////////////////////////////////////
void ComAnticoll()
{
if (MI_OK == ISO15693_Stay_Quiet(0x7b))
{
Readcard_flag=6;
}
else
{
Readcard_flag=0;
}
}
/////////////////////////////////////////////////////////////////////
//响应上位机发送的A卡锁定命令
/////////////////////////////////////////////////////////////////////
void ComSelect()
{
if (MI_OK == ISO15693_Select(0x7b))
{
Readcard_flag=7;
}
else
{
Readcard_flag=0;
}
}*/
/////////////////////////////////////////////////////////////////////
//响应上位机发送的A卡休眠命令
/////////////////////////////////////////////////////////////////////
void ComHlta()
{
if (MI_OK == PcdHalt())
{ Readcard_flag=9; }
else
{ Readcard_flag=0; }
}
/////////////////////////////////////////////////////////////////////
//响应上位机发送的A卡验证密钥命令
/////////////////////////////////////////////////////////////////////
void ComAuthentication()
{
char status = MI_COM_ERR;
unsigned char *pkeys,*pSNR;
pkeys = &g_cReceBuf[20];
pSNR = &g_cSNR;
if (MI_OK == ChangeCodeKey(&g_cReceBuf[8],pkeys)) //转换密钥格式
{
if (MI_OK == PcdAuthKey(pkeys)) //传送密钥到RC500FIFO
{
status = PcdAuthState(0x60, canshu[0]*4+3, pSNR); //验证密钥0x08表示2扇区1块
}
}
if (status == MI_OK)
{
Readcard_flag=8;
}
else
{
Readcard_flag=4;
}
}
/////////////////////////////////////////////////////////////////////
//响应上位机读M1卡命令
/////////////////////////////////////////////////////////////////////
void ComM1Read()
{
if (PcdRead(g_cReceBuf[6], &g_cReceBuf[0]))
{
sond = 0;
redled = 1;
blueled = 0;
AnswerOk(&g_cReceBuf[0], 16);
Readcard_flag=4;
if(TR0==0)start_flag=1;
DelayMs(200);
sond = 1;
redled = 0;
blueled = 1;
}
else
{
Readcard_flag=4;
}
}
/////////////////////////////////////////////////////////////////////
//响应上位机写M1卡命令
/////////////////////////////////////////////////////////////////////
void ComM1Write()
{
if (MI_OK == PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机初始化钱包命令
/////////////////////////////////////////////////////////////////////
void ComM1Initval()
{
g_cReceBuf[11]=~g_cReceBuf[7];g_cReceBuf[12]=~g_cReceBuf[8];
g_cReceBuf[13]=~g_cReceBuf[9];g_cReceBuf[14]=~g_cReceBuf[10];
g_cReceBuf[15]=g_cReceBuf[7];g_cReceBuf[16]=g_cReceBuf[8];
g_cReceBuf[17]=g_cReceBuf[9];g_cReceBuf[18]=g_cReceBuf[10];
g_cReceBuf[19]=g_cReceBuf[6];g_cReceBuf[20]=~g_cReceBuf[6];
g_cReceBuf[21]=g_cReceBuf[6];g_cReceBuf[22]=~g_cReceBuf[6];
if (MI_OK == PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机读钱包命令
/////////////////////////////////////////////////////////////////////
void ComM1Readval()
{
if (MI_OK == PcdRead(g_cReceBuf[6], &g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0], 4); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机扣款命令
/////////////////////////////////////////////////////////////////////
void ComM1Decrement()
{
if (MI_OK == PcdValue(PICC_DECREMENT, g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机充值命令
/////////////////////////////////////////////////////////////////////
void ComM1Increment()
{
if (MI_OK == PcdValue(PICC_INCREMENT, g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机M1卡回传命令
/////////////////////////////////////////////////////////////////////
void ComM1Restore()
{
if (MI_OK == PcdRestore(g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机M1卡值传送命令
/////////////////////////////////////////////////////////////////////
void ComM1Transfer()
{
if (MI_OK == PcdTransfer(g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机ultra light防冲撞命令
/////////////////////////////////////////////////////////////////////
void ComUL_PcdAnticoll()
{
if (MI_OK == UL_PcdAnticoll(&g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0], 7); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机ultra light写卡命令
/////////////////////////////////////////////////////////////////////
void ComUL_PcdWrite()
{
if (MI_OK == UL_PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机TYPEA卡高级复位命令
/////////////////////////////////////////////////////////////////////
void ComTypeARst()
{
unsigned char status,i;
i = (FSDI << 4) & 0xF0;
status = PcdRequest(g_cReceBuf[6], &g_cReceBuf[0]);
if (status != MI_OK)
{ status = PcdRequest(g_cReceBuf[6], &g_cReceBuf[0]); }
if (status == MI_OK)
{ status = PcdAnticoll(&g_cReceBuf[1]); }
if (status == MI_OK)
{ status = PcdSelect(&g_cReceBuf[1], &g_cReceBuf[6]); }
if (status == MI_OK)
{
g_cFWI = 0xff;//g_cReceBuf[8]>>4;
g_cReceBuf[0] += 4;
g_cCidNad = 0;//(g_cReceBuf[9] & 0x03) << 2;
AnswerOk(&g_cReceBuf[1], g_cReceBuf[0]);
}
else
{ AnswerErr(FAULT21); }
}
void ComTypeACOS()
{
g_cReceBuf[0] -= 5;
if (MI_OK == MifareProCom(g_cCidNad, g_cFWI, &g_cReceBuf[0], &g_cReceBuf[6]))
{ AnswerOk(&g_cReceBuf[6], g_cReceBuf[0]); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//响应上位机高级复位TYPEB卡命令
/////////////////////////////////////////////////////////////////////
/*
void ComTypeBRst()
{
unsigned char status;
if ((status = M531PiccRequestB(g_cReceBuf[6], 0, 0, &g_cReceBuf[0])) == MI_OK)
{
g_cFWI = 0xFF;//g_cReceBuf[11] >> 4;
g_cCidNad = 8;//((g_cReceBuf[11]&0x02)<<1) | ((g_cReceBuf[11]&0x01)<<3);
// status = M531PiccAttrib(&g_cReceBuf[1], g_cReceBuf[10]&0x0F, &g_cReceBuf[12]);
// }
// if (status == MI_OK) {
AnswerOk(&g_cReceBuf[0], 12); }
else
{ AnswerErr(FAULT21); }
}
*/
void ComTypeBRst()
{
unsigned char status;
if ((status = M531PiccRequestB(g_cReceBuf[6], 0, 0, &g_cReceBuf[0])) == MI_OK)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
键盘口程序-15693.rar
(334.37 KB, 下载次数: 42)
2019-10-23 23:13 上传
点击文件名下载附件
13.56mhz,rc632,51单片机读卡程序
下载积分: 黑币 -5
作者:
csmyldl
时间:
2019-10-23 23:31
真的很感谢这样一个学习的平台,很多曾经自己没玩过的东西,看了大家无偿提供的资料,很新鲜,也很想去试一试
作者:
liu86708670
时间:
2020-8-7 21:00
请问当单片机的频率由11.0592MHz改为22.1184MHz后,不能读卡,请问程序哪里需要修改?
作者:
gjs555
时间:
2020-8-8 10:55
初学者仰慕大神已久
作者:
hilin029
时间:
2020-8-20 08:28
liu86708670 发表于 2020-8-7 21:00
请问当单片机的频率由11.0592MHz改为22.1184MHz后,不能读卡,请问程序哪里需要修改?
通讯波特率不对吧,有个头文件是定义晶振的,修改一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1