freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于rc522的非接觸式ic卡讀卡器設(shè)計含程序資料(參考版)

2025-06-30 19:11本頁面
  

【正文】 // == 2000/()/1000。//啟動發(fā)送 } //i = 600。 } Write_Reg_RC(CommandReg, Command)。 iInLenByte。//使RC522啟動喚醒過程,以準備執(zhí)行動作, SetBitMask(FIFOLevelReg,0x80)。 default: break。//可以更改為waitFor = 0x20。 case PCD_TRANSCEIVE: //發(fā)送FIFO中數(shù)據(jù) irqEn = 0x77。 waitFor = 0x10。 unsigned int i。 unsigned char lastBits。 unsigned char irqEn = 0x00。 pOutData[1] = Read_Reg_RC(CRCResultRegM)。0x04))。amp。 i。 //開始校驗 i = 0xFF。 i++) { Write_Reg_RC(FIFODataReg, *(pIndata+i))。 for (i=0。 Write_Reg_RC(CommandReg,PCD_IDLE)。 // 若mask=0x01,位0置1}///////////////////////////////////////////////////////////////////////用MF522計算CRC16函數(shù)(CRC預(yù)置在RC522的ModeReg中定義)//長為len的pindata數(shù)據(jù)寫入FIFO,再校驗,其2個字節(jié)結(jié)果存入pOutData//校驗由硬件完成,我們只需要寫數(shù)據(jù)及讀校驗后的CRC結(jié)果/////////////////////////////////////////////////////////////////////void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData){ unsigned char i,n。 tmp = Read_Reg_RC(reg)。 ~mask)。 tmp = Read_Reg_RC(reg)。 SET_SPI_CS。 SPIWriteByte(ucAddr)。 //啟動SPI //地址字節(jié)格式:第7位(1讀/0寫) 第61位(地址位) 位0(0保留、未用) //MFRRC522 ucAddr = ((Address1)amp。}///////////////////////////////////////////////////////////////////////功 能:寫RC522寄存器//參數(shù)說明:Address[IN]:寄存器地址// value[IN]:寫入的值/////////////////////////////////////////////////////////////////////void Write_Reg_RC(unsigned char Address, unsigned char value){ unsigned char ucAddr。 SET_SPI_CS。//地址格式 SPIWriteByte(ucAddr)。 ucAddr = ((Address1)amp。 unsigned char ucResult=0。 SPIData = 1。nop()。nop()。 CLR_SPI_CK。 } nop()。 0x80) { SET_SPI_MOSI。 SPICount 8。 // Finally return the read data} //// 寫SPI數(shù)據(jù) //void SPIWriteByte(unsigned char SPIData){ unsigned char SPICount。//nop()。 } SET_SPI_CK。//nop()。 // Rotate the data CLR_SPI_CK。 SPICount 8。 SPIData = 0。 } }}//// 讀SPI數(shù)據(jù)// return SPIData //unsigned char SPIReadByte(void){ unsigned char SPICount。 nop()。 nop()。 i ++ ) { nop()。 while( tms ) { for( i = 0。 //換行 PcdHalt()。 send_byte(0x0d)。CardReadBuf,16)。 return。//發(fā)送卡的序列號 if( PcdRead( 1, CardReadBuf ) != MI_OK )// 讀數(shù)據(jù),可以更改塊區(qū) { //display_error()。 } send_bytes(amp。 CardUid[j]=0x20。 CardUid[j]=exchange(n)。 namp。 j=j+1。 n=n4。i4。 return。 } if( PcdRead( 0, CardReadBuf ) != MI_OK )// 讀塊0 { //display_error()。 bWarn = 1。 } memcpy( CardWriteBuf, tangliankai, 16 )。FromCardRevBuf[2] ) != MI_OK )// 驗證密碼,可以更改塊區(qū) { bWarn = 1。 return。 } if( PcdSelect( amp。 bWarn = 1。FromCardRevBuf地址開始存儲 if( PcdAnticoll( amp。 //因為程序一直尋卡么,沒卡肯定不OK,就執(zhí)行這里的程序了么?。。? return。//可以在這里顯示調(diào)試信息 //bWarn = 1。FromCardRevBuf地址開始存儲 if( PcdRequest( PICC_REQIDL, amp。 unsigned char i,n,j=0。 INT8U CardWriteBuf[16]。 } return a。 if(n10) {a=n+48。 delay_ms(200)。 delay_ms(200)。 i 3。}//操作故障,聲音void warn(void){ INT8U i。 delay_ms(1500)。 warn()。 pass()。}//模式選擇程序void ctrl_process( void ){ board_process()。 } return MI_OK。 //自動啟動定時器,減計數(shù), delay_us(1000)。h6a =tmoLength(dec) Write_Reg_RC(TReloadRegH,0)。//tmoLength)。//84 選擇UART輸入,定義幀保護時間 Write_Reg_RC(RFCfgReg,0x7F)。//清與卡認證成功位 Write_Reg_RC(ModeReg,0x3D)。A39。 0x03)) { SetBitMask(TxControlReg, 0x03)。 i = Read_Reg_RC(TxControlReg)。}///////////////////////////////////////////////////////////////////////關(guān)閉天線/////////////////////////////////////////////////////////////////////void PcdAntennaOff(void){ ClearBitMask(TxControlReg, 0x03)。//復(fù)位命令 delay_us(10)。 delay_us(10)。 delay_us(10)。 delay_us(10)。 PcdAntennaOn()。A39。 PcdAntennaOff()。//打開接收中斷}void send_bytes( INT8U *Buf, INT8U Len ){ while( Len ) { send_byte( *Buf++ )。//發(fā)送結(jié)束后,TI=1 TI = 0。 SBUF = SendData。 // 啟動定時器} //串口發(fā)送程序void send_byte( INT8U SendData ){ ES = 0。 TL1 = 0xFD。//打開接收中斷 TMOD = 0x21。} void init_uart(void){ SCON = 0x50。 // EA = 1。 init_rc522()。 }} void init_all(void){ EA = 0。 //將POF位清零 } init_all()。 //軟復(fù)位,從ISP監(jiān)控區(qū)啟動 } else { PCON=PCONamp。0x10)==0) //如果上電復(fù)位標志位POF位=0 { PCON=PCON|0x10。 bWarn = 0。 //定義從卡發(fā)送過來的信息,即RC522從卡中讀取信息(存儲信息)INT8U const tangliankai[16] = { 0x74, 0x61, 0x6e, 0x67, 0x6c, 0x69, 0x61,0x6e,0x6b,0x61, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, }。附錄A 讀卡器圖附圖1 讀卡器實物圖附圖2 讀卡器PCB圖附圖3 讀卡器系統(tǒng)原理圖附錄B 程序include include include include include include include include const INT8U DefaultKeyABuf[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }。但是,我沒有達到自己最初的設(shè)想,我的最初的想法是想將集合所有模塊的一整個PCB板制作成實物,但由于RC522的芯片太小且引腳在芯片底下,以我的能力還焊接不了,所以就只制作了單片機的最小系統(tǒng),就用各模塊演示了。其次,我完成本次畢設(shè)所要求的任務(wù),設(shè)計了各個模塊的電路原理圖,制作了PCB版圖,也做出演示電路板,能達到讀卡器與計算機相互通信并正確顯示信息。通過這次畢設(shè)的研究學(xué)習(xí),我深入了解到RFID系統(tǒng)和讀卡器系統(tǒng)的原理,熟悉掌握51單片機和射頻芯片的運用,掌握了單片機與計算機的串口串行通信原理,也學(xué)會了天線的設(shè)計。 軟件調(diào)試 該軟件是串口調(diào)試助手,程序正確下載到單片機后,IC卡一進入天線的工作范圍,該軟件就會顯示如下信息,前4個字節(jié)為卡的序列號,后面為用戶名字。)(10)發(fā)送數(shù)據(jù):關(guān)閉接收中斷,中斷標志位TI清零,將數(shù)組中的第一個字節(jié)給到SBUF寄存器,判斷TI位,發(fā)送結(jié)束后,TI=1,再打開接收中斷。(9)轉(zhuǎn)換卡號:由于串口助手顯示的是ASCII碼所表示的字符,則需要將讀出的4個字節(jié)的序列號進行轉(zhuǎn)換,轉(zhuǎn)換后的數(shù)據(jù)存入CardUid數(shù)組中。讀寫命令只能讀寫整塊16個字節(jié)的數(shù)據(jù)。用PICC_WRITE(0xA0)寫命令將數(shù)組寫入?yún)^(qū)0的塊1處。(6)認證:驗證區(qū)0的密鑰KEY A,默認密碼為6個字節(jié)的FF,密碼正確則認證成功,卡允許進行讀寫操作。(4)防沖撞:清認證標志位,設(shè)置幀格式,即最后一個字節(jié)的所有位都應(yīng)該被發(fā)送,復(fù)位沖突寄存器,用TRANSCEIVE命令將防沖撞ANTICOLL1命令發(fā)送到IC卡,接收IC卡返回的4個字節(jié)的序列號。最后打開天線。 RxSelReg=0x86,選擇非接觸式UART輸入,定義6個幀保護時間;TModeReg=0x8D,自動啟動定時器,以減計數(shù)的方式;RFCfgReg=0x7F,接收器信號電壓的增益因子48dB。選擇ISO 14443協(xié)議typeA。6 讀卡器的軟件程序設(shè)計 程序設(shè)計思路 總程序流程圖(1)串口初始化:先設(shè)定波特率為9600,設(shè)串口為工作方式1,定時器為工作方式2,用波特率初值計算軟件得出定時器的計數(shù)初值為FDH。
點擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1