51门禁系统源程序Word文件下载.docx

上传人:b****4 文档编号:8063247 上传时间:2023-05-10 格式:DOCX 页数:52 大小:41.07KB
下载 相关 举报
51门禁系统源程序Word文件下载.docx_第1页
第1页 / 共52页
51门禁系统源程序Word文件下载.docx_第2页
第2页 / 共52页
51门禁系统源程序Word文件下载.docx_第3页
第3页 / 共52页
51门禁系统源程序Word文件下载.docx_第4页
第4页 / 共52页
51门禁系统源程序Word文件下载.docx_第5页
第5页 / 共52页
51门禁系统源程序Word文件下载.docx_第6页
第6页 / 共52页
51门禁系统源程序Word文件下载.docx_第7页
第7页 / 共52页
51门禁系统源程序Word文件下载.docx_第8页
第8页 / 共52页
51门禁系统源程序Word文件下载.docx_第9页
第9页 / 共52页
51门禁系统源程序Word文件下载.docx_第10页
第10页 / 共52页
51门禁系统源程序Word文件下载.docx_第11页
第11页 / 共52页
51门禁系统源程序Word文件下载.docx_第12页
第12页 / 共52页
51门禁系统源程序Word文件下载.docx_第13页
第13页 / 共52页
51门禁系统源程序Word文件下载.docx_第14页
第14页 / 共52页
51门禁系统源程序Word文件下载.docx_第15页
第15页 / 共52页
51门禁系统源程序Word文件下载.docx_第16页
第16页 / 共52页
51门禁系统源程序Word文件下载.docx_第17页
第17页 / 共52页
51门禁系统源程序Word文件下载.docx_第18页
第18页 / 共52页
51门禁系统源程序Word文件下载.docx_第19页
第19页 / 共52页
51门禁系统源程序Word文件下载.docx_第20页
第20页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

51门禁系统源程序Word文件下载.docx

《51门禁系统源程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《51门禁系统源程序Word文件下载.docx(52页珍藏版)》请在冰点文库上搜索。

51门禁系统源程序Word文件下载.docx

relay_OFF();

//关继电器

LED_BLINK_1();

//ledtest

beep1();

//beeptest

display(0,0,0);

//显示初始化

while

(1)

{

key=key_scan();

//按键操作

if(key==12)if(states>

0)states--;

elsestates=0;

//上一功能

Card_SN_BUF[4]={0xff,0xff,0xff,0xff},//卡号登记缓冲区

KEY_BUF[8]={'

0'

'

};

INT8UbPass=0;

bWarn=0;

voiduart_over(void)//串口数据还原

UartCount=0;

UartStart=FALSE;

UartComp=FALSE;

voidpass(void)

Delay_ms(2000);

//让卡片离开

voidwarn(void)

LED_BLINK_2();

 

INT8UIC_READ(void)

INT8UID_ASC[8],i;

if(PcdRequest(PICC_REQIDL,Card_type)!

=MI_OK)//寻天线区内未进入休眠状态的卡,返回卡片类型2字节

if(PcdRequest(PICC_REQIDL,Card_type)!

{

returnFALSE;

}

}

if(PcdAnticoll(Card_SN)!

=MI_OK)//防冲撞,返回卡的序列号4字节

bWarn=1;

returnFALSE;

bPass=1;

send_bytes(Card_type,2);

send_bytes(Card_SN,4);

for(i=0;

i<

4;

i++)//卡ID号转化成ASCII

if(Card_SN[i]/16>

9)ID_ASC[i*2]=Card_SN[i]/16+'

7'

;

elseID_ASC[i*2]=Card_SN[i]/16+'

if(Card_SN[i]%16>

9)ID_ASC[i*2+1]=Card_SN[i]%16+'

elseID_ASC[i*2+1]=Card_SN[i]%16+'

display2(3,0,"

ID:

"

4);

//显示卡号

display2(3,2,ID_ASC,8);

returnTRUE;

voidctrl_process(void)

{

INT8Ui,key_count,key_value=16,table[8]="

--------"

statesbuf;

if(states!

=statesbuf)//状态改变,清屏

display_clear_line

(2);

display_clear_line(3);

statesbuf=states;

switch(states)

case0:

//IC卡读卡输入

display(1,0,1);

if(IC_READ())

{

if((Card_SN[0]==Card_SN_BUF[0])

&

&

(Card_SN[1]==Card_SN_BUF[1])

&

(Card_SN[2]==Card_SN_BUF[2])

(Card_SN[3]==Card_SN_BUF[3]))

{

relay_ON();

//灯开关

display(2,0,5);

}

elsedisplay(2,0,6);

relay_OFF();

break;

case1:

display(1,0,2);

//密码输入

display2(3,0,table,8);

key_count=0;

{

key_value=key_scan();

if(key_value==12)

{

states--;

return;

}

if(key_value==13)

states++;

return;

}

if(key_value>

=0&

key_value<

=9)//有按键输入

{

table[key_count++]=key_value+'

display2(3,0,table,8);

}

if(key_value==11)//退格

{

table[--key_count]='

-'

if(key_count==8)

if(table[0]==KEY_BUF[0]&

table[1]==KEY_BUF[1]&

table[2]==KEY_BUF[2]&

table[3]==KEY_BUF[3]&

table[4]==KEY_BUF[4]&

table[5]==KEY_BUF[5]&

table[6]==KEY_BUF[6]&

table[7]==KEY_BUF[7])//密吗正确

bPass=1;

display(2,0,5);

relay_OFF();

break;

else//密码错误

{

beep1();

bWarn=1;

display(2,0,6);

break;

}

break;

case2:

display(1,0,3);

//IC卡登记

if(IC_READ())

for(i=0;

i++)

Card_SN_BUF[i]=Card_SN[i];

EEPROM_WRITE(0,Card_SN,4);

//写入EEPROM

case3:

display(1,0,4);

//密码设置

while

(1)

if(key_value>

if(key_count==8&

key_value==15)//按下确定键

for(i=0;

8;

KEY_BUF[i]=table[i];

EEPROM_WRITE(7,KEY_BUF,8);

break;

}

default:

break;

}

if(bPass)//处理成功

bPass=0;

pass();

if(bWarn)//处理失败

bWarn=0;

warn();

#include"

intrins.h"

string.h"

voiddelay_ns(unsignedintns)

unsignedinti;

ns;

nop();

//------------------------------------------

//读SPI数据

unsignedcharSPIReadByte(void)

unsignedcharSPICount;

//Counterusedtoclockoutthedata

unsignedcharSPIData;

SPIData=0;

for(SPICount=0;

SPICount<

8;

SPICount++)//Preparetoclockinthedatatoberead

SPIData<

<

=1;

//Rotatethedata

CLR_SPI_CK;

//nop();

//nop();

//RaisetheclocktoclockthedataoutoftheMAX7456

if(STU_SPI_MISO)

SPIData|=0x01;

}

SET_SPI_CK;

//Droptheclockreadyforthenextbit

}//andloopback

return(SPIData);

//Finallyreturnthereaddata

}

//写SPI数据

voidSPIWriteByte(unsignedcharSPIData)

SPICount++)

if(SPIData&

0x80)

SET_SPI_MOSI;

else

CLR_SPI_MOSI;

nop();

=1;

}

/////////////////////////////////////////////////////////////////////

//功能:

读RC632寄存器

//参数说明:

Address[IN]:

寄存器地址

//返回:

读出的值

unsignedcharReadRawRC(unsignedcharAddress)

unsignedcharucAddr;

unsignedcharucResult=0;

CLR_SPI_CS;

ucAddr=((Address<

1)&

0x7E)|0x80;

SPIWriteByte(ucAddr);

ucResult=SPIReadByte();

SET_SPI_CS;

returnucResult;

写RC632寄存器

//value[IN]:

写入的值

voidWriteRawRC(unsignedcharAddress,unsignedcharvalue)

0x7E);

SPIWriteByte(value);

清RC522寄存器位

reg[IN]:

//mask[IN]:

清位值

voidClearBitMask(unsignedcharreg,unsignedcharmask)

chartmp=0x00;

tmp=ReadRawRC(reg);

WriteRawRC(reg,tmp&

~mask);

//clearbitmask

置RC522寄存器位

置位值

voidSetBitMask(unsignedcharreg,unsignedcharmask)

WriteRawRC(reg,tmp|mask);

//setbitmask

//用MF522计算CRC16函数

voidCalulateCRC(unsignedchar*pIndata,unsignedcharlen,unsignedchar*pOutData)

unsignedchari,n;

ClearBitMask(DivIrqReg,0x04);

WriteRawRC(CommandReg,PCD_IDLE);

SetBitMask(FIFOLevelReg,0x80);

for(i=0;

i<

len;

i++)

{WriteRawRC(FIFODataReg,*(pIndata+i));

WriteRawRC(CommandReg,PCD_CALCCRC);

i=0xFF;

do

n=ReadRawRC(DivIrqReg);

i--;

while((i!

=0)&

!

(n&

0x04));

pOutData[0]=ReadRawRC(CRCResultRegL);

pOutData[1]=ReadRawRC(CRCResultRegM);

通过RC522和ISO14443卡通讯

Command[IN]:

RC522命令字

//pInData[IN]:

通过RC522发送到卡片的数据

//InLenByte[IN]:

发送数据的字节长度

//pOutData[OUT]:

接收到的卡片返回数据

//*pOutLenBit[OUT]:

返回数据的位长度

charPcdComMF522(unsignedcharCommand,

unsignedchar*pInData,

unsignedcharInLenByte,

unsignedchar*pOutData,

unsignedint*pOutLenBit)

charstatus=MI_ERR;

unsignedcharirqEn=0x00;

unsignedcharwaitFor=0x00;

unsignedcharlastBits;

unsignedcharn;

switch(Command)

casePCD_AUTHENT:

irqEn=0x12;

waitFor=0x10;

casePCD_TRANSCEIVE:

irqEn=0x77;

waitFor=0x30;

default:

WriteRawRC(ComIEnReg,irqEn|0x80);

ClearBitMask(ComIrqReg,0x80);

InLenByte;

{

WriteRawRC(FIFODataReg,pInData[i]);

WriteRawRC(CommandReg,Command);

if(Command==PCD_TRANSCEIVE)

SetBitMask(BitFramingReg,0x80);

//i=600;

//根据时钟频率调整,操作M1卡最大等待时间25ms

i=2000;

n=ReadRawRC(ComIrqReg);

0x01)&

waitFor));

ClearBitMask(BitFramingReg,0x80);

if(i!

=0)

if(!

(ReadRawRC(ErrorReg)&

0x1B))

status=MI_OK;

if(n&

irqEn&

0x01)

{status=MI_NOTAGERR;

n=ReadRawRC(FIFOLevelReg);

lastBits=ReadRawRC(ControlReg)&

0x07;

if(lastBits)

*pOutLenBit=(n-1)*8+lastBits;

else

*pOutLenBit=n*8;

if(n==0)

n=1;

if(n>

MAXRLEN)

n=MAXRLEN;

n;

pOutData[i]=ReadRawRC(FIFODataReg);

status=MI_ERR;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2