中北大学2016届毕业设计说明书
附图3 读卡器系统原理图
第 41 页 共 61 页
中北大学2016届毕业设计说明书
附录B 程序
#include
const INT8U DefaultKeyABuf[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; INT8U FromCardRevBuf[16] = { 0 }; //定义从卡发送过来的信息,即RC522从卡中读取信息(存储信息)
INT8U const tangliankai[16] = {
0x74, 0x61, 0x6e, 0x67, 0x6c, 0x69, 0x61,0x6e,0x6b,0x61,
0x69, 0x00, 0x00, 0x00, 0x00, 0x00, };
//0xff,0x07,0x80,0x69为控制字,所有数据块,均可读可写可修改 //每一数据块都有4种控制模式可以供选择,可以有多种控制模式并存 //也可以所有模式都被禁止
INT8U bPass = 1; bWarn = 0; //bpass 上电操作成功 //操作成功,声音 void main(void) {
if((PCON&0x10)==0) //如果上电复位标志位POF位=0 {
PCON=PCON|0x10; //将POF位置1
IAP_CONTR=0x60; //软复位,从ISP监控区启动 } else {
PCON=PCON&0xef; //将POF位清零 }
init_all(); while(1) {
ctrl_process(); } }
void init_all(void) {
EA = 0;
第 42 页 共 61 页
中北大学2016届毕业设计说明书
init_uart(); init_rc522(); init_par();
// EA = 1;//串口发送使用查询发送。 }
void init_uart(void) {
SCON = 0x50;//工作方式1,禁止串行接收 ES=1;//打开接收中断
TMOD = 0x21;//定时器工作方式2 TH1 = 0xFD; TL1 = 0xFD;
TR1 = 1; // 启动定时器 }
//串口发送程序
void send_byte( INT8U SendData ) {
ES = 0; TI = 0;
SBUF = SendData;
while( TI == 0 );//发送结束后,TI=1 TI = 0;//软件复位 ES = 1;//打开接收中断 }
void send_bytes( INT8U *Buf, INT8U Len ) {
while( Len-- ) {
send_byte( *Buf++ ); } }
/////////////////////////////////////////////////////////////////// //RC522初始化
/////////////////////////////////////////////////////////////////// void init_rc522(void) {
PcdReset();
PcdAntennaOff();
M500PcdConfigISOType( 'A' ); PcdAntennaOn(); }
/////////////////////////////////////////////////////////////////////
第 43 页 共 61 页
中北大学2016届毕业设计说明书
//功 能:复位RC522 //返 回: 成功返回MI_OK
///////////////////////////////////////////////////////////////////// char PcdReset(void) {
SET_RC522RST; delay_us(10); CLR_RC522RST; delay_us(10); SET_RC522RST; delay_us(10);
Write_Reg_RC(CommandReg,PCD_RESETPHASE);//复位命令 delay_us(10); return MI_OK; }
///////////////////////////////////////////////////////////////////// //关闭天线
///////////////////////////////////////////////////////////////////// void PcdAntennaOff(void) {
ClearBitMask(TxControlReg, 0x03); }
///////////////////////////////////////////////////////////////////// //开启天线
//每次启动或关闭天险发射之间应至少有1ms的间隔
///////////////////////////////////////////////////////////////////// void PcdAntennaOn(void) {
unsigned char i;
i = Read_Reg_RC(TxControlReg); if (!(i & 0x03)) {
SetBitMask(TxControlReg, 0x03); } }
////////////////////////////////////////////////////////////////////// //设置RC522的工作方式
////////////////////////////////////////////////////////////////////// char M500PcdConfigISOType(unsigned char type) {
if (type == 'A') //ISO14443_A {
ClearBitMask(Status2Reg,0x08);//清与卡认证成功位
第 44 页 共 61 页
中北大学2016届毕业设计说明书
Write_Reg_RC(ModeReg,0x3D);//为PCD发送器的开启做准备,sigin高电平有效,CRC预设值6363
Write_Reg_RC(RxSelReg,0x86);//84 选择UART输入,定义帧保护时间 Write_Reg_RC(RFCfgReg,0x7F); //接收器信号电压的增益因子48dB //Timer: TPrescaler*TreloadVal/6.78MHz = 24ms Write_Reg_RC(TReloadRegL,30);//tmoLength);// TReloadVal = 'h6a =tmoLength(dec)
Write_Reg_RC(TReloadRegH,0);
Write_Reg_RC(TModeReg,0x8D); delay_us(1000); }
else{ return -1; } return MI_OK; }
void init_par( void ) {
BEEP_OFF; }
//模式选择程序
void ctrl_process( void ) {
board_process(); if( bPass ) {
bPass = 0; pass(); }
if( bWarn ) {
bWarn = 0; warn(); } }
void pass( void ) {
BEEP_ON;
delay_ms(1500); BEEP_OFF; }
//操作故障,声音 void warn(void) {
INT8U i;
自动启动定时器,减计数, 第 45 页 共 61 页
//