1、 relay_OFF(); /关继电器 LED_BLINK_1(); /led test beep1(); /beep test display(0,0,0); /显示初始化 while(1) key=key_scan(); /按键操作 if(key=12) if(states0) states-; else states=0; /上一功能 Card_SN_BUF4=0xff,0xff,0xff,0xff,/卡号登记缓冲区 KEY_BUF8=0,;INT8U bPass = 0; bWarn = 0;void uart_over( void ) /串口数据还原 UartCount = 0; U
2、artStart = FALSE; UartComp = FALSE;void pass( void ) Delay_ms(2000);/让卡片离开void warn(void) LED_BLINK_2();INT8U IC_READ( void ) INT8U ID_ASC8,i; if( PcdRequest( PICC_REQIDL, Card_type ) != MI_OK )/寻天线区内未进入休眠状态的卡,返回卡片类型 2字节 if( PcdRequest( PICC_REQIDL, Card_type ) ! return FALSE; if( PcdAnticoll( Card_
3、SN ) != MI_OK ) /防冲撞,返回卡的序列号 4字节 bWarn = 1; return FALSE; bPass = 1; send_bytes(Card_type,2); send_bytes(Card_SN,4); for(i=0;i9) ID_ASCi*2=Card_SNi/16+7; else ID_ASCi*2=Card_SNi/16+ if(Card_SNi%169) ID_ASCi*2+1=Card_SNi%16+ else ID_ASCi*2+1=Card_SNi%16+ display2(3,0,ID: ,4); /显示卡号 display2(3,2,ID_AS
4、C,8); return TRUE;void ctrl_process( void ) INT8U i,key_count,key_value=16,table8=-,statesbuf; if(states!=statesbuf) /状态改变,清屏 display_clear_line(2); display_clear_line(3); statesbuf=states; switch(states) case 0: /IC卡读卡输入 display(1,0,1); if(IC_READ() if (Card_SN0=Card_SN_BUF0) &(Card_SN1=Card_SN_BUF
5、1) &(Card_SN2=Card_SN_BUF2)(Card_SN3=Card_SN_BUF3) relay_ON();/灯开关 display(2,0,5); else display(2,0,6); relay_OFF(); break; case 1: 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
6、_value if(key_count=8 & key_value = 15) /按下确定键 for(i=0;8; KEY_BUFi=tablei; EEPROM_WRITE(7,KEY_BUF,8); break; default : break; if( bPass ) /处理成功 bPass = 0; pass(); if( bWarn ) /处理失败 bWarn = 0; warn(); #include intrins.hstring.hvoid delay_ns(unsigned int ns) unsigned int i;ns; nop();/-/ 读SPI数据 unsigne
7、d char SPIReadByte(void) unsigned char SPICount; / Counter used to clock out the data unsigned char SPIData; SPIData = 0; for (SPICount = 0; SPICount 8; SPICount+) / Prepare to clock in the data to be read SPIData =1; / Rotate the data CLR_SPI_CK; /nop();/nop(); / Raise the clock to clock the data o
8、ut of the MAX7456 if(STU_SPI_MISO) SPIData|=0x01; SET_SPI_CK; / Drop the clock ready for the next bit / and loop back return (SPIData); / Finally return the read data / 写SPI数据 void SPIWriteByte(unsigned char SPIData) SPICount+) if (SPIData & 0x80) SET_SPI_MOSI; else CLR_SPI_MOSI;nop();= 1; /功 能:读RC6
9、32寄存器/参数说明:AddressIN:寄存器地址/返 回:读出的值unsigned char ReadRawRC(unsigned char Address) unsigned char ucAddr; unsigned char ucResult=0; CLR_SPI_CS; ucAddr = (Address1)&0x7E)|0x80; SPIWriteByte(ucAddr); ucResult=SPIReadByte(); SET_SPI_CS; return ucResult;写RC632寄存器/ valueIN:写入的值void WriteRawRC(unsigned char
10、 Address, unsigned char value)0x7E); SPIWriteByte(value);清RC522寄存器位regIN:/ maskIN:清位值void ClearBitMask(unsigned char reg,unsigned char mask) char tmp = 0x00; tmp = ReadRawRC(reg); WriteRawRC(reg, tmp & mask); / clear bit mask置RC522寄存器位置位值void SetBitMask(unsigned char reg,unsigned char mask) WriteRaw
11、RC(reg,tmp | mask); / set bit mask/用MF522计算CRC16函数void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData) unsigned char i,n; ClearBitMask(DivIrqReg,0x04); WriteRawRC(CommandReg,PCD_IDLE); SetBitMask(FIFOLevelReg,0x80); for (i=0; i MAXRLEN) n = MAXRLEN;n; pOutDatai = ReadRawRC(FIFODataReg); status = MI_ERR;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2