基于RFID技術(shù)門禁系統(tǒng)的設計_第1頁
基于RFID技術(shù)門禁系統(tǒng)的設計_第2頁
基于RFID技術(shù)門禁系統(tǒng)的設計_第3頁
基于RFID技術(shù)門禁系統(tǒng)的設計_第4頁
基于RFID技術(shù)門禁系統(tǒng)的設計_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

綜合課程設計說明書題目:基于RFID的門禁系統(tǒng)設計學生姓名:學號:院(系):電氣與信息工程學院專業(yè):電子信息科學與技術(shù)指導教師:2016年6月16日目錄一前言…………1二案例描述……………………3三需求分析……………………43.1實驗箱模塊的選擇………43.2系統(tǒng)語言的選擇……………53.3數(shù)據(jù)交換方式………………63.4應用程序的結(jié)構(gòu)……………73.4.1顯示子程序………………73.4.2密碼子程序………………83.5存儲系統(tǒng)的設計及分析……93.6系統(tǒng)模塊的總體設計………113.6.1系統(tǒng)硬件設計…………123.6.2系統(tǒng)軟件設計…………12四系統(tǒng)的整體描述和實現(xiàn)……134.1射頻識別的簡單描述……134.2軟件結(jié)構(gòu)的實現(xiàn)…………154.3系統(tǒng)功能的具體實現(xiàn)……174.3.1系統(tǒng)軟件調(diào)試……………174.3.2系統(tǒng)整體調(diào)試…………18五課程設計總結(jié)………………22六參考文獻……………………23七致謝……………………24八附錄……………………25一前言射頻識別(RadioFrequencyIdentification,RFID)技術(shù)是從20世紀80年代開始走向成熟的一項自動識別技術(shù),是當前最受人們關注的熱點之一,該項技術(shù)既傳統(tǒng)也充滿新意和活力。射頻識別是無線電識別的簡稱,即通過無線電波進行識別。它源于無線電通信技術(shù),綜合了現(xiàn)代計算機智能控制、智能識別、計算機網(wǎng)絡等高新技術(shù),順應了計算機集成制造系統(tǒng),電子商務等熱點應用的發(fā)展需要。射頻識別應用電磁場,以非接觸、無視覺、高可靠的方式傳遞特定識別信息,由于大規(guī)模集成電路技術(shù)的日益成熟,使得射頻識別系統(tǒng)的體積大大減少,從而進入了實用化階段。射頻識別技術(shù)具有工作距離大、信息收集處理快捷及較好的環(huán)境適應性等優(yōu)點,極大地加速了有關信息的采集和處理,在近年來獲得了極為迅速的發(fā)展。基于RFID的考勤系統(tǒng)設計是將射頻識別技術(shù)應用到家庭安防系統(tǒng)中的一次成功嘗試。這一系統(tǒng)克服了家庭生活中居住的安全性不能得到保證的弱點,能夠有效地提高家庭安防系統(tǒng)的能力,為居家生活提供更好的,更安全的保障。隨著通訊計算機技術(shù)、元器件制造技術(shù)的發(fā)展和應用,由此產(chǎn)生的自動識別(AutomaticIdentification)技術(shù)在許多領域得到普及。出入口門禁管理是現(xiàn)代化安防系統(tǒng)的重要組成部分,出入口只允許有進出權(quán)限者通行。門禁管理系統(tǒng)就是基于這些自動識別技術(shù)識別進出人員或車輛的身份權(quán)限,通過與系統(tǒng)中信息比較,作出預設反應。常見的自動識別技術(shù)有條形碼、生物特征識別(指紋、面部特征)、IC卡和射頻卡。條形碼技術(shù)介質(zhì)存儲容量小,不能改寫,易污損。生物特征識別相對比較復雜,識別效率、誤識率較高。IC卡識別和射頻識別是目前較成熟且應用廣泛的兩種技術(shù),作為數(shù)據(jù)存儲器系統(tǒng),它們內(nèi)有CPU,可防更改,識別時間短。IC卡識別系統(tǒng)需要接觸識別,存在觸點對腐蝕和污染缺乏抵抗能力的缺點。射頻識別系統(tǒng)通過非接觸式工作模式,基本原理是利用射頻信號和空間耦合實現(xiàn)物體的自動識別。射頻識別系統(tǒng)支持密碼認證和效驗,識別工作無須人工干預,它既支持只讀工作模式又支持讀寫工作模式;射頻卡可工作在惡劣環(huán)境下,識別速度快數(shù)據(jù)容量大,可以達到數(shù)10K,標簽數(shù)據(jù)可以修改,寫入時間短,射頻卡可以設置密碼保護具有更好的安全性?,F(xiàn)階段大多數(shù)門禁系統(tǒng)都是基于射頻識別技術(shù),同時RFID技術(shù)還在飛速的發(fā)展,應用越來越廣泛。二案例描述門禁系統(tǒng),又稱人口控制系統(tǒng).在何時允許某些人進出,拒絕某些人進出,什么情況下要發(fā)生報警,記錄人員的出入狀況,是門禁系統(tǒng)最基本的功能.智能的RFID門禁系統(tǒng)是對樓房中的重要通道進行管理。在門口,電梯,等人員來往頻繁或重要的地方安裝控制裝置,例如:讀卡器,鍵盤等,人員想要進入必須有卡才能通過,大大增強的安全性。基于RFID技術(shù)的門禁系統(tǒng)作為智能門禁系統(tǒng)的“骨干”,已經(jīng)成為了一項先進的高科技技術(shù)防范和管理手段,在一些經(jīng)濟發(fā)達的國家已經(jīng)廣泛的應用于科研,工業(yè),博物館,酒店,商場,醫(yī)療監(jiān)護,銀行,監(jiān)獄等,已成為安防技術(shù)重點研究和開發(fā)的對象。1994年RFID技術(shù)進入中國,引發(fā)了中國RFID技術(shù)的應用革命。在我國基于RFID的智能門禁系統(tǒng)的使用仍然處于發(fā)展狀態(tài),因此對射頻識別技術(shù)在門禁系統(tǒng)方面的應用理論及實際可行性及實用性研究的重中之重。近幾年,關于識別系統(tǒng)的通訊模式,指紋等生物識別設備的集成管理及DVR系統(tǒng)的集成成為現(xiàn)代門禁系統(tǒng)發(fā)展的亮點。另外,作為蓬勃發(fā)展的生物識別技術(shù),隨著其辨別技術(shù)的的不斷成熟,以及人們對這類產(chǎn)品的進一步了解,若價格因素能保持人們可以接受的范圍內(nèi),那么,該技術(shù)的應用前景將是十分廣泛的。射頻識別(RFID,即RadioFrequencyIdentification)技術(shù)是自動識別技術(shù)在無線電技術(shù)方面的具體應用與發(fā)展,其基本原理是利用射頻方式進行非接觸雙向通信,以達到識別與數(shù)據(jù)交換的目的[1]。具有高精度、適應環(huán)境能力強、抗干擾強、操作快捷等優(yōu)點,能夠?qū)崿F(xiàn)無線自動識別,主動監(jiān)控的功能。RFID技術(shù)作為一項先進的自動識別和數(shù)據(jù)采集技術(shù),在實際應用中取得了顯著的成效,已經(jīng)成功應用到生產(chǎn)制造、物流管理、公共安全等各個領域。隨著RFID技術(shù)的日益成熟和普及,各國政府都意識到RFID技術(shù)的研究價值和蘊涵的巨大商機,制定相關政策加大財力、物力投資,積極推動本國RFID技術(shù)發(fā)展。RFID技術(shù)的運用是非接觸式IC卡目前的潮流,更快的響應速度和更高的頻率是未來的趨勢。三需求分析3.1實驗箱模塊的選擇本次實驗選擇的是實驗箱中的高頻模塊,即HF高頻下識別卡不需要繞制線圈,可以通過印刷的方式制作天線。識別卡一般是負載調(diào)制的方式工作,也就是通過識別卡的負載電阻的接通和斷開促使讀寫器天線上的電壓發(fā)生變化,實現(xiàn)遠距離識別卡對天線電壓進行振幅調(diào)制。就頻率而言,高頻RFID具有以下特性:①工作頻率為13.56MHz,該頻率的波長大概為22米。②除了金屬材料外,該頻率的波長可以穿過大多數(shù)的材料,但是往往會降低讀取距離。識別卡(感應器)需要離開金屬一段距離。③該頻段在全球都得到認可并沒有特殊的限制。④該系統(tǒng)具有防沖撞特性,可以同時讀取多個識別卡。⑤可以把某些數(shù)據(jù)信息寫入識別卡中。⑥數(shù)據(jù)傳輸速率比低頻要快且價格不是很貴。高頻RFID主要應用有:◎航空包裹的管理和應用◎瓦斯鋼瓶的管理應用◎預收費系統(tǒng)◎酒店門鎖的管理和應用◎大型會議人員通道系統(tǒng)◎固定資產(chǎn)的管理系統(tǒng)◎醫(yī)藥物流系統(tǒng)的管理和應用◎智能貨架的管理系統(tǒng)運行簡要說明:①:上電后,430先通過并口訪問7970芯片,在沒有讀到卡時,程序運行在串口讀寫模式,并每隔0.5s向串口發(fā)送一個“D”,直到有寫操作為止。②:當有卡讀寫時,針對相應的卡,程序進入不同的協(xié)議中,并且點亮相應的LED燈。(2)API調(diào)用說明①:上電后,配置完內(nèi)部寄存器,程序進入串口讀寫程序,可以進行人機交互。②:當讀到不同協(xié)議的卡時,程序退出串口讀寫程序,進入相應的協(xié)議子程序中(目前支持14443A協(xié)議和15693協(xié)議)。讀完卡后,退出相應的協(xié)議子程序,進入串口讀寫程序。(3)ISO15693第三部分通過讀卡器獲取指令流,讀卡器采用TItrf7970讀卡器芯片,開發(fā)資料參考協(xié)議ISO15693,trf7970datasheet,參考trf7960EVM.pdf實現(xiàn)ISO15693第三部分指令部分,防碰撞實驗。高頻讀寫模塊中,利用高頻卡可以進行識別操作,因此高頻讀寫有以下特性:1.支持近場通訊(NFC)標準NFCIP-1(ISO/IEC18092)和NFCIP-2(ISO/IEC21481)2.用于ISO15693、ISO18000-3、ISO14443A/B、和FeliCa的完全集成的協(xié)議處理3.集成編碼器、解碼器和用于NFC啟動程序的數(shù)據(jù)成幀,對所有3個比特率(106kbps,212kbps,424kbps)的有源和無源目標操作及卡仿真。4.用于NFC無源發(fā)射機應答器仿真操作的具有可編程喚醒電平的RF場偵測器。5.用于NFC物理沖突避免的RF場檢測器。6.用于ISO14443A防沖突(不完整字節(jié))操作(發(fā)射機應答器仿真或者NFC無源目標)的集成狀態(tài)機。7.輸入電壓范圍:2.7VDC至5.5VDC。8.可編程輸出功率:+20dBm(100mW),+23dBm(200mW)。9.可編程I/O電壓電平從1.8VDC至5.5VDC。3.2開發(fā)語言的選擇軟件結(jié)構(gòu)框圖:系統(tǒng)軟件主要包括信號處理和系統(tǒng)管理兩個部分,信號處理模塊采用C語言編程,系統(tǒng)管理部分軟件采用MicrosoftVisualC++編程,VC++是Windos平臺上的C++編程環(huán)境,學習VC要了解很多Windos平臺的特性并且掌握MFC、ATL、COM等的知識,C++的具有就是界面簡單,占用資源少,操作方便的特點。其中建立了一個中間數(shù)據(jù)庫,編程簡單,開發(fā)時間短,能夠?qū)崿F(xiàn)雙卡識別功能,控制道閥自動開啟和關閉,同時具有報警功能。其軟件流程圖如下圖1所示?;赗FID的門禁系統(tǒng)基于RFID的門禁系統(tǒng)數(shù)據(jù)采集模塊存儲模塊顯示模塊門控模塊報警模塊鍵盤模塊圖一軟件結(jié)構(gòu)框圖3.3數(shù)據(jù)交換的方式本次設計采用數(shù)據(jù)庫存儲用戶信息及數(shù)據(jù),執(zhí)行程序之前,首先要設置串口波特率等相關串口參數(shù),然后上位機通過串口向下位機發(fā)送命令,并進入串口中斷。下位機根據(jù)接收SBUF的值做相應的處理。程序流程圖如圖2所示開始開始上位機發(fā)送讀卡命令YYNN驗證感應卡權(quán)限開門,顯示正確信息報警,顯示錯誤信息延時后,自動關門結(jié)束圖2數(shù)據(jù)采集子程序流程圖3.4應用程序的結(jié)構(gòu)3.4.1顯示子程序顯示子程序的主要功能是對當前的門控狀態(tài)進行顯示,顯示函數(shù)首先判斷是寫命令操作還是寫數(shù)據(jù)操作,若是寫命令操作,則根據(jù)命令進行相應的操作,如清屏、設置顯示模式等;若是寫數(shù)據(jù)操作,則在顯示器上顯示相應數(shù)據(jù)。程序流程圖如圖3所示。顯示程序顯示程序液晶初始化設置第一行顯示數(shù)據(jù)地址顯示第一行數(shù)據(jù)設置第二行顯示數(shù)據(jù)地址顯示第二行數(shù)據(jù)延時后,清屏結(jié)束延時圖3顯示子程序流程圖3.4.2密碼子程序密碼子程序流程圖如圖4所示,當程序運行時,會一直判斷是否有按鍵被按下,當有按鍵被按下時,系統(tǒng)會確定鍵值,關將鍵值存入到密碼數(shù)組里,然后將輸入的密碼與本身的密碼做比較,若相同,則執(zhí)行開門和顯示正確信息的操作;若不相同,則執(zhí)行報警和顯示錯誤信息的操作。密碼子程序是整個門禁系統(tǒng)的關鍵部分,因為在通過密碼程序的實施之后,才可以進行數(shù)據(jù)的訪問與訪問者的信息匹配,因此,密碼系統(tǒng)就好比整個門禁系統(tǒng)的大門,它是連接訪問者與數(shù)據(jù)的關鍵一環(huán)。其中,密碼程序的代碼如下:P1=0x0f;if(P1!=0x0f)compare(P1);for(n=0;n<10;n++)if(input[n]!=password[n])break;if(n==10){if(m<10)continue;WriteLcdCom(0x01); //清屏WriteLcdCom(0x80); //第一行數(shù)據(jù)指針地址for(s=0;s<16;s++) WriteLcdDat(str2[s]);LEDG=0;BUZ=0;delay_10ms(20);LEDG=1;BUZ=1;WriteLcdCom(0x01);input[0]="";}elseif((n<10)&&(P1==0xbd)){WriteLcdCom(0x01); //清屏WriteLcdCom(0x80); //第一行數(shù)據(jù)指針地址for(s=0;s<16;s++)WriteLcdDat(str4[s]);LEDR=0;for(s=0;s<5;s++){BUZ=0;delay_10ms(20);BUZ=1;delay_10ms(20);}LEDR=1;}密碼子系統(tǒng)的流程圖如下:開始開始去除按鍵抖動的影響確定鍵值存入密碼數(shù)組開門,顯示正確信息報警,顯示錯誤信息延時后,自動關門結(jié)束YYN圖4密碼子程序流程圖3.5存儲系統(tǒng)的設計及分析本設計中數(shù)據(jù)的存儲芯片選用的是AT24C04,該芯片是串行的E2PROM,支持I2C總線數(shù)據(jù)傳送協(xié)議。程序流程圖如圖5所示。存儲程序存儲程序AT24C04初始化延時N結(jié)束圖5存儲系統(tǒng)程序流程圖當我們完成對存儲過程的分析之后,我們需要對存儲過程加以實施,此時,就需要編寫存儲程序的代碼,存儲程序核心的代碼如下:voideeprom(){write_byte(0,0x1e);write_byte(1,0xda);write_byte(2,0x62);write_byte(3,0xb6);write_byte(4,0x25);write_byte(5,0xee);write_byte(6,0xde);write_byte(7,0xb6);write_byte(8,0x05);write_byte(9,0xc8);write_byte(10,0x43);write_byte(11,0xb8);write_byte(12,0x3a);write_byte(13,0x04);write_byte(14,0x5d);write_byte(15,0xb6);}bitshout(ucharwrite_data)//從MCU移出數(shù)據(jù)到AT89C51{uchari;bitack_bit;for(i=0;i<8;i++)//循環(huán)移入8個位{SDA1=(bit)(write_data&0x80);_nop_();SCL1=1;delayNOP();SCL1=0;write_data<<=1;}SDA1=1;//讀取應答delayNOP();SCL1=1;delayNOP();ack_bit=SDA1;SCL1=0;returnack_bit;//返回AT24C04應答位}voidwrite_byte(ucharaddr,ucharwrite_data){start();shout(OP_WRITE);shout(addr);shout(write_data);stop();delay_10ms(1);}3.6系統(tǒng)模塊的總體設計依據(jù)上述功能的分析,系統(tǒng)中模塊分別為:數(shù)據(jù)采集模塊、數(shù)據(jù)處理模塊、數(shù)據(jù)存儲模塊、顯示模塊、串口發(fā)送/接收模塊、密碼輸入模塊、報警機制模塊。系統(tǒng)功能結(jié)構(gòu)圖如圖6所示,各功能模塊具體功能如下:1. 數(shù)據(jù)采集模塊:當RFID卡進入到讀卡器讀卡范圍時,讀卡器讀取卡序列號的過程。2. 數(shù)據(jù)處理模塊:針對于采集到的數(shù)據(jù)處理,從而對得到的數(shù)據(jù)進行判斷其有效性。3. 數(shù)據(jù)存儲模塊:用來存儲數(shù)據(jù)。4. 顯示模塊:用來接收單片機發(fā)送的數(shù)據(jù),并對數(shù)據(jù)進行操作從而得到要顯示的信息。5. 串口發(fā)送/接收模塊:主要用來通過串口發(fā)送和接收數(shù)據(jù)。6. 密碼輸入模塊:針對于用按鍵輸入密碼,根據(jù)密碼的正確與否來進行相應的操作。7. 報警機制模塊:當出現(xiàn)非法卡或輸入的密碼不正確時產(chǎn)生報警。綜合數(shù)據(jù)處理模塊讀卡器處理模塊綜合數(shù)據(jù)處理模塊讀卡器處理模塊密碼處理模塊讀卡模塊存儲模塊門控模塊報警模塊顯示模塊存儲模塊門控模塊報警模塊顯示模塊圖6系統(tǒng)功能結(jié)構(gòu)圖3.6.1系統(tǒng)硬件設計系統(tǒng)硬件設計主要由AT89C51主控芯片和ISO/IEC15693讀卡器模塊構(gòu)成。硬件電路由八部分構(gòu)成:微控制器AT89C51、讀卡器模塊ISO/IEC15693、LCD1602顯示、串口通信MAX232、按鍵電路、AT24C04存儲、報警電路、門控電路。微控制器AT89C51負責讀卡器模塊ISO/IEC15693的初始化,上位機通過串口向ISO/IEC15693發(fā)送命令,ISO/IEC15693根據(jù)上位機發(fā)送的命令做相應的操作,然后將得到的信息傳送給微控制器AT89C51,然后微控制器控制其它模塊完成顯示、報警、判斷和門控操作。上位機與下位機之間的連接主要是通過串口進行通信,采用MAX232芯片并將芯片的輸入和輸出管腳連接到AT89C51的I/O口,在MAX232的引腳上連接10μF的電解電容用來濾波。讀卡器模塊ISO/IEC15693與微控制器AT89C51之間的通信是通過I2C總線進行的,由于AT89C51單片機本身并沒有I2C總線,所以將ISO/IEC15693模塊的串行時鐘線與數(shù)據(jù)線接到AT89C51的兩個I/O口,然后通過模擬I2C時序來完成AT89C51與ISO/IEC15693之間的通信,為了防止出現(xiàn)三態(tài),在ISO/IEC15693的串行時鐘線和數(shù)據(jù)線上分別上拉10k電阻。而ISO/IEC15693讀卡器與RFID卡之間的數(shù)據(jù)通信主要是通過天線進行的。AT24C04與AT89C51之間的通信也是通過模擬I2C時序進行,同時為了防止出現(xiàn)三態(tài),在時鐘線與數(shù)據(jù)線上分別連接5.1k的上拉電阻。LCD1602與AT89C52之間的通信是通過將LCD1602的3條控制線和8條數(shù)據(jù)線與AT89C51的I/O口相連。對于按鍵電路的設計是將3*4按鍵直接連接到AT89C51的7位I/O口,采用線反轉(zhuǎn)法通過查詢方式進行工作。3.6.2系統(tǒng)軟件設計軟件主要實現(xiàn)數(shù)據(jù)的采集,數(shù)據(jù)的分析,模塊之間的通信,以及相應的數(shù)據(jù)處理。1. 數(shù)據(jù)采集:讀卡器ISO/IEC15693通過天線讀取RFID卡的數(shù)據(jù),然后將數(shù)據(jù)傳送出去。2. 數(shù)據(jù)分析:AT89C51接收到數(shù)據(jù)后,將數(shù)據(jù)傳送給AT24C04或上位機,AT24C04或上位機對數(shù)據(jù)進行分析,從而判斷數(shù)據(jù)的有效性。3. 模塊之間的通信:AT89C51與ISO/IEC15693/AT24C04之間的通信都是通過模擬I2C總線進行的,I2C總線的高效性、高實用性、高可靠性數(shù)據(jù)傳輸增強了系統(tǒng)的實時性和可靠性。4. 數(shù)據(jù)處理:針對數(shù)據(jù)的采集和分析的結(jié)果做出相應的處理,例如顯示、報警、門控等。四系統(tǒng)的整體描述和實現(xiàn)4.1射頻識別的簡單描述在本設計中,采用的是射頻識別技術(shù)。下面對射頻識別技術(shù)做一下簡要介紹:1. 射頻識別技術(shù)原理通常情況下,RFID的應用系統(tǒng)主要由讀寫器和RFID卡兩部分組成的,見下圖7。其中,讀寫器一般作為計算機終端,用來實現(xiàn)對RFID卡的數(shù)據(jù)讀寫和存儲,它是由控制單元、高頻通訊模塊和天線組成。而RFID卡則是一種無源的應答器,主要是由一塊集成電路(IC)芯片及其外接天線組成,其中RFID卡芯片通常集成有射頻前端、邏輯控制、存儲器等電路,有的甚至將天線一起集成在同一芯片上。RFID應用系統(tǒng)的基本工作原理是RFID卡進入讀寫器的射頻場后,由其天線獲得的感應電流經(jīng)升壓電路作為芯片的電源,同時將帶信息的感應電流通過射頻前端電路檢得數(shù)字信號送入邏輯控制電路進行信息處理,所需回復的信息則從存儲器中獲取經(jīng)由邏輯控制電路送回射頻前端電路,最后通過天線發(fā)回給讀寫器??梢?,RFID卡與讀寫器實現(xiàn)數(shù)據(jù)通訊過程中起關鍵的作用是天線。一方面,無源的RFID卡芯片要啟動電路工作需要通過天線在讀寫器天線產(chǎn)生的電磁場中獲得足夠的能量;另一方面,天線決定了RFID卡與讀寫器之間的通訊信道和通訊方式。圖7射頻識別系統(tǒng)原理圖2. 射頻識別系統(tǒng)典型結(jié)構(gòu)射頻識別系統(tǒng)的典型結(jié)構(gòu)見圖8,主要是由兩部份組成:讀寫器和射頻卡。讀寫器同射頻卡之間通過無線方式通訊,因此它們都有無線收發(fā)模塊及天線(或感應線圈)。射頻卡中有存儲器,內(nèi)存容量為幾個比特到幾十千比特??梢源鎯τ谰眯詳?shù)據(jù)和非永久性數(shù)據(jù)。永久性數(shù)據(jù)可以是射頻卡序列號,它是用來作為射頻卡的唯一身份標識,不能更改;非永久性數(shù)據(jù)寫在E2PROM等可重寫的存儲器內(nèi),用以存儲用戶數(shù)據(jù)。射頻卡可以根據(jù)讀寫器發(fā)出的指令對這些數(shù)據(jù)進行相應的實時讀寫操作。控制模塊完成接收、譯碼及執(zhí)行讀寫器的命令,控制讀寫數(shù)據(jù),負責數(shù)據(jù)安全等功能。射頻卡分無源卡和有源卡兩種,有源卡內(nèi)置天線和電池,而無源卡只有內(nèi)置天線沒有電池,其能量由讀寫器提供,由于無源卡無需電池因此其尺寸較小且使用壽命長,應用越來越廣泛。讀寫器內(nèi)的控制模塊往往具有很強的處理功能,除了完成控制射頻卡工作的任務,還要實現(xiàn)相互認證、數(shù)據(jù)加解密、數(shù)據(jù)糾錯、出錯報警及與計算機通信等功能。計算機的功能是向讀寫器發(fā)送指令,并與讀寫器之間進行數(shù)據(jù)交換。圖8RFID系統(tǒng)典型結(jié)構(gòu)圖8為RFID系統(tǒng)的工作過程,這是一個無源系統(tǒng),即射頻卡內(nèi)不含電池,射頻卡工作的能量是由射頻讀寫模塊發(fā)出的射頻脈沖提供。(1)射頻讀寫模塊在一個區(qū)域內(nèi)發(fā)射能量形成電磁場,區(qū)域大小取決于發(fā)射功率、工作頻率和天線尺寸。(2)射頻卡進入這個區(qū)域時,接收到射頻讀寫模塊的射頻脈沖,經(jīng)過橋式整流后給電容充電。電容電壓經(jīng)過穩(wěn)壓后作為工作電壓。(3)數(shù)據(jù)解調(diào)部分從接收到的射頻脈沖中解調(diào)出命令和數(shù)據(jù)并送到邏輯控制部分。邏輯控制部分接收指令完成存儲、發(fā)送數(shù)據(jù)或其它操作。(4)如果需要發(fā)送數(shù)據(jù),則將數(shù)據(jù)調(diào)制然后從收發(fā)模塊發(fā)送出去。(5)讀寫模塊接收到返回的數(shù)據(jù)后,解碼并進行錯誤校驗來決定數(shù)據(jù)的有效性,然后進行處理,必要時可以通過RS232或RS422或RS485或RJ45或無線接口將數(shù)據(jù)傳送到計算機。讀寫器發(fā)送的射頻信號除提供能量外,通常還提供時鐘信號,使數(shù)據(jù)同步,從而簡化了系統(tǒng)的設計。有源系統(tǒng)的工作原理與此大致相同,不同處只是卡的工作電源由電池提供的。4.2軟件結(jié)構(gòu)的實現(xiàn)4.2.1系統(tǒng)的整體軟件結(jié)構(gòu)系統(tǒng)軟件設計是整個系統(tǒng)設計的重要部分,在硬件電路的基礎上,加上軟件編程才可以實現(xiàn)系統(tǒng)預期的功能。在本系統(tǒng)中,軟件的設計主要包括:數(shù)據(jù)采集模塊、存儲模塊、顯示模塊、門控模塊、報警模塊、鍵盤模塊和上位機軟件的設計幾個方面。本系統(tǒng)的軟件結(jié)構(gòu)框圖如圖9所示。1. 數(shù)據(jù)采集模塊:讀卡器ISO/IEC15693通過天線讀取RFID卡的數(shù)據(jù),然后將數(shù)據(jù)傳送出去。2. 存儲模塊:AT89C51接收到數(shù)據(jù)后,將數(shù)據(jù)傳送給AT24C04進行存儲。3. 顯示模塊:AT89C51接收到數(shù)據(jù)后,將數(shù)據(jù)與AT24C04里存儲的數(shù)據(jù)進行對比,若兩者完全相同,則液晶顯示正確的信息;若不相同,則液晶顯示錯誤的信息。4. 門控模塊:AT89C51接收到數(shù)據(jù)后,將數(shù)據(jù)與AT24C04里存儲的數(shù)據(jù)進行對比,若兩者完全相同,則進行開門操作;若不相同,則不開門。5. 報警模塊:AT89C51接收到數(shù)據(jù)后,將數(shù)據(jù)與AT24C04里存儲的數(shù)據(jù)進行對比,若不相同則報警。6. 鍵盤模塊:通過鍵盤輸入密碼,并根據(jù)輸入密碼的有效性做相應的操作?;赗FID的門禁系統(tǒng)數(shù)據(jù)采集模塊基于RFID的門禁系統(tǒng)數(shù)據(jù)采集模塊存儲模塊顯示模塊門控模塊報警模塊鍵盤模塊顯示模塊結(jié)束報警模塊圖9軟件結(jié)構(gòu)框圖串口發(fā)送/接收部分的調(diào)試:將電路板與計算機連接以后,用一段簡單的程序進行調(diào)試。發(fā)現(xiàn)在調(diào)試的過程中,串口不能正常通信,經(jīng)過查證后發(fā)現(xiàn)是電容正負極接反了,修正以后,便能正常通信了。注:電容的選擇要注意,應選擇0.1μF/1μF/10μF的電容。存儲部分的調(diào)試:將AT24C04與單片機連接好后,編寫一段簡單的存儲程序,將字符存入到24C04里,并取出查看存儲數(shù)據(jù)的正確性。通過調(diào)試后,并未發(fā)現(xiàn)問題。存儲電路調(diào)試成功。讀卡器部分的調(diào)試:將讀卡器接口與單片機相連后,用串口調(diào)試助手檢測讀卡器。在用串口助手向讀卡器發(fā)送讀卡命令時,當有卡(MIFIRES50、S70卡)進入讀卡器讀卡范圍內(nèi)時,會向串口助手返回卡序列號,以此證明讀卡器可用。4.3系統(tǒng)功能的具體實現(xiàn)4.3.1系統(tǒng)軟件調(diào)試在進行軟件調(diào)試之前要先進行人工檢查代碼,要仔細認真的檢查,在程序中要多添加注釋,以便檢查方便。在人工檢查無誤后,才可以進行動態(tài)檢查,也就是上機調(diào)試。通過編譯可以得到語法錯誤的信息,根據(jù)提示信息找出程序中出錯之處并改正。有時提示的出錯信息并不是真正出錯的行,這就要求我們善于分析,找出真正的錯誤,而不要單純從字面意義上找出錯信息,要懂得變通的理解并解決問題。軟件調(diào)試時,也要模塊式進行。調(diào)試時可用單步運行和斷點運行方式,通過檢查系統(tǒng)的CPU現(xiàn)場情況、RAM的內(nèi)容和I/O口的狀態(tài),檢測程序執(zhí)行結(jié)果是否符合設計要求。同時,還可以發(fā)現(xiàn)系統(tǒng)中存在的硬件設計錯誤和軟件算法錯誤。待各個模塊調(diào)好后再進行系統(tǒng)程序聯(lián)調(diào)。這個階段若出現(xiàn)故障,可以檢查算法上是否有沖突、參數(shù)傳遞是否正確等。在使用WAVE軟件時,調(diào)試的方法和技巧最為重要,不同的情況采用不同的調(diào)試方法,有助于程序的實現(xiàn)。在設計過程中顯示運行結(jié)果一般用全速調(diào)試,調(diào)試時主要使用了跟蹤調(diào)試、斷點調(diào)試。1.跟蹤調(diào)試:跟蹤應用程序用戶能夠在運行應用程序時,看到PC指針在應用源代碼程序中的確切位置。跟蹤型:單步執(zhí)行一條語句程序,有利于觀察變量。但是,如果調(diào)用一個函數(shù),則進入函數(shù)中,在函數(shù)中單步執(zhí)行每一條語句。跟蹤使用熱鍵F7。單步型:單步執(zhí)行每條語句程序,如果調(diào)用一個函數(shù),則不進入函數(shù)中。單步使用熱鍵F8。2.斷點調(diào)試如果已知程序中某塊代碼實際運行正常的情況下,仍用跟蹤調(diào)試,將大大浪費時間,而且很枯燥,因此調(diào)試中第二個重要工具是在源代碼中某一處設置斷點,大多數(shù)調(diào)試程序通過使用斷點中止程序執(zhí)行。在程序調(diào)試中用到使用斷點調(diào)試,即在指定行上設置斷點后,全速執(zhí)行程序,看是否能進行到設置斷點所在行。如果用斷點調(diào)試,由比較容易觀察出程序變量的改變及程序運行的結(jié)果。設置斷點熱鍵Ctrl+F8。3.查看變量WAVE軟件可以通Watch窗口進行查看變量。通過添加觀察項菜單可以將用戶希望觀察的變量添加到觀察窗口及數(shù)據(jù)窗口觀察。在設計過程中常用觀察窗口觀察程序中的變量,修改程序中的錯誤。4.3.2系統(tǒng)整體調(diào)試將各個部分的硬件模塊合并成一個整體,把軟件各個部分程序合并到一個主程序中。通過偉福訪真器和偉福調(diào)試軟件WAVE6000開始整體調(diào)試,硬件部分用萬用表來測試硬件每部分的接通性。軟件部分的測試主要方法是通過設置斷點、單步執(zhí)行等方法來測試程序的正確性。在確定軟硬件無問題后,將程序通過燒寫器把程序燒到單片機中。將程序燒寫到控制芯片AT89C52,打開電源,電源指示燈亮,整個系統(tǒng)啟動。運行上位機,向下位機發(fā)送讀卡命令,下位機接收到讀卡命令后,當有RFID卡進入到讀卡器的讀卡范圍內(nèi)時,若RFID卡為有效卡便會在執(zhí)行開門操作的同時在液晶上顯示正確信息;若不是有效卡則在報警的同時在液晶上顯示錯誤信息。當通過鍵盤輸入密碼后,系統(tǒng)會判斷密碼的有效性,若是有效密碼則開門并在液晶上顯示正確信息;若無效則報警并顯示錯誤信息。整個系統(tǒng)完成。本系統(tǒng)能在打開電源并運行上位機后,能自動向下位機發(fā)送讀卡命令,當有RFID卡進入到讀卡器的讀卡范圍內(nèi)時,則會自動讀取卡序列號,并將卡序列號傳送給上位機,上位機判斷卡的有效性。若該卡是有效卡,系統(tǒng)會執(zhí)行開門并在液晶上顯示正確的信息;若該卡是非法卡,則會報警并顯示錯誤的信息。本系統(tǒng)能夠有效、方便、安全地控制重要場所的出入訪問,具有可靠性高、保密性強、方便快捷等特點。整個系統(tǒng)中數(shù)據(jù)傳輸?shù)倪^程:發(fā)送到SDA線上的每個字節(jié)必須為8位。每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制,每個字節(jié)的后面必須跟一個響應位。首先傳輸?shù)氖菙?shù)據(jù)的最高位(MSB)。如果從機要完成一些其他功能后(例如一個內(nèi)部中斷服務程序)才能接收或發(fā)送下一個完整的數(shù)據(jù)字節(jié)。可以使用時鐘線SCL保持低電平迫使主機進入等待狀態(tài)。當從機準備好接收下一個數(shù)據(jù)字節(jié)釋放時鐘線SCL后,數(shù)據(jù)傳輸繼續(xù)。在一些情況下,可以用與I2C總線格式不一樣的格式(例如兼容CBUS的器件)。甚至在傳輸一個字節(jié)時,用這樣的地址起始的報文可以通過產(chǎn)生停止條件來終止,此時不會產(chǎn)生響應。數(shù)據(jù)傳輸必須帶響應,相應的響應時鐘脈沖由主機產(chǎn)生。在響應時鐘脈沖期間,發(fā)送器釋放SDA線(高)。在響應的時鐘脈沖期間,接收器必須將SDA線拉低,使它在這個時鐘脈沖的高電平期間保持穩(wěn)定的低電平。當然,必須考慮建立和保持時間。當從機不能響應從機地址時(例如它這在執(zhí)行一些實時函數(shù)不能接收或發(fā)送),從機必須使數(shù)據(jù)保持高電平。主機然后產(chǎn)生一個停止條件終止傳輸或者產(chǎn)生重復起始條件開始新的傳輸。如果從機—接收器響應了從機地址但是在傳輸了一段時間后不能接收更多數(shù)據(jù)字節(jié),主機必須再一次終止傳輸。這個情況用從機在第一個字節(jié)后沒有產(chǎn)生響應來表示。從機使數(shù)據(jù)線保持高電平,主機產(chǎn)生一個停止或重復起始條件。如果傳輸中有主機接收器,它必須通過在從機產(chǎn)生時鐘的最后一個字節(jié)不產(chǎn)生一個響應,向從機—發(fā)送器通知數(shù)據(jù)結(jié)束。從機—發(fā)送器必須釋放數(shù)據(jù)線,允許主機產(chǎn)生一個停止或重復起始條件。所有的主機在SCL線上產(chǎn)生它們自己的時鐘來傳輸I2C總線上的報文。數(shù)據(jù)只有在時鐘的高電平周期有效。因此,需要一個確定的時鐘進行逐位仲裁。同步時鐘通過線與連接I2C接口到SCL線來執(zhí)行。這就是說:SCL線的高到低切換會使器件開始數(shù)它們的低電平周期,而且一旦器件的時鐘變低電平,它會使SCL線保持這種狀態(tài)直到到達時鐘的高電平。但是,如果另一個時鐘仍處于低電平周期。這個時鐘的低到高切換不會改變SCL線的狀態(tài)。因此,SCL線被有最長低電平周期的器件保持低電平。因此,低電平周期短的器件會進入高電平的等待狀態(tài)。當所有有關的器件數(shù)完了它們的低電平周期后,時鐘線被釋放并變成高電平。之后,器件時鐘和SCL線的狀態(tài)沒有差別。而且所有器件會開始數(shù)它們的高電平周期。首先完成高電平周期的器件會再次將SCL線拉低。這樣,產(chǎn)生的同步SCL時鐘的低電平周期由低電平周期長的器件決定,而高電平周期由高電平周期最短的器件決定。最后整個系統(tǒng)的搭建就基本完成,此時本系統(tǒng)具體實現(xiàn)的功能如下:1. 數(shù)據(jù)采集:讀卡器ISO/IEC15693通過天線讀取RFID卡的數(shù)據(jù),然后將數(shù)據(jù)傳送出去。2. 數(shù)據(jù)分析:AT89C51接收到數(shù)據(jù)后,將數(shù)據(jù)傳送給AT24C04或上位機,AT24C04或上位機對數(shù)據(jù)進行分析,從而判斷數(shù)據(jù)的有效性。3. 模塊之間的通信:AT89C51與ISO/IEC15693/AT24C04之間的通信都是通過模擬I2C總線進行的,I2C總線的高效性、高實用性、高可靠性數(shù)據(jù)傳輸增強了系統(tǒng)的實時性和可靠性。4. 數(shù)據(jù)處理:針對數(shù)據(jù)的采集和分析的結(jié)果做出相應的處理,例如顯示、報警、門控等。五課程設計總結(jié)通過兩周的課程設計,我對RFID的工作原理已經(jīng)有熟悉的認識,掌握的有關RFID應用系統(tǒng)開發(fā)的基本步驟并且有了深刻的認識。RFID原理及應用在21世紀知識經(jīng)濟時代有著重要的地位。在以各種智能化為背景的前提下,RFID正的得到蓬勃的發(fā)展。本次課程設計就是在這個潮流下進行了高頻、低頻及相關應用設備的系統(tǒng)開發(fā)。起初在看到這個課設的時候我?guī)缀鹾翢o頭緒,不過通過前期的關于RFID的的基礎實驗和不斷的在網(wǎng)上和圖書館查閱資料,使我對RFID的基本原理與應用和門禁系統(tǒng)的設計有了一個大體的思路,對其中涉及到的知識也進行了學習和模仿。在一開始,我遇到了一些問題,解決這些問題的辦法就是去圖書館查閱有關資料,或上網(wǎng)查閱有關信息,或請教老師,終于按時完成了本次課程設計。這次課設不僅考察了我們對課堂上所學的專業(yè)知識的理解程度,也鍛煉了我們的動手能力。提高了我獨立思考問題,解決問題的能力。從總體看,我覺得這次課設是我自身的知識豐富了不少,但同時也發(fā)現(xiàn)了自己的不足之處。例如在動手方面和知識的融合方面,不能很好的與實踐相結(jié)合。軟件操作不夠熟練。使我明白了要先學好理論知識才能很好的與實踐相結(jié)合,才能熟練的運用到生活中。六參考文獻1.陳國棟.基于射頻識別技術(shù)的門禁系統(tǒng)研究與設計[D].中南大學,2005.01.012.黃菊生.基于智能IC卡的網(wǎng)絡門禁系統(tǒng)設計與開發(fā)[D].湖南大學,2003.10.103.游戰(zhàn)清,李蘇劍,張益強等.無線射頻識別技術(shù)(RFID)理論與應用[M].北京:電子工業(yè)出版社,20044.安靜宇.基于非接觸式IC卡門禁系統(tǒng)的設計[D].西安科技大學,20065.康行?。炀€原理與設計[M].國防工業(yè)出版社,1998.65-736.韓瑜,焦小澄.高效的LCD模塊顯示程序設計方法.計算機工程與應用.2004,22(1):123-1267.董蘊華,鄭先鋒.基于RFID技術(shù)的無線門禁系統(tǒng)的設計[J].通信技術(shù)2009.8.李剛,曾銳利,林凌.基于射頻識別技術(shù)的智能交通系統(tǒng)[J].信息與控制,2006,35(5):555-5599.賈林.射頻識別技術(shù)(RFID)及其在物流交通領域的應用[J].交通世界,2005(10):50-53.10.查振元,朱華炳.電子門禁系統(tǒng)組成[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2003.11.李朝清.PC機及單片機數(shù)據(jù)通信技術(shù)[M].北京:北京航空航天大學出版社,2000.10-22,33-60附錄:(界面顯示子程序)//CardRead.cpp:實現(xiàn)文件#include"stdafx.h"#include"HFExample.h"#include"CardRead.h"#include"EmployeeAdd.h"#include"Selector.h"#include<mmsystem.h>//CCardRead對話框IMPLEMENT_DYNAMIC(CCardRead,CPropertyPage)CRITICAL_SECTIONm_cs;CCardRead::CCardRead() :CPropertyPage(CCardRead::IDD) ,m_readeraddr(_T("2")) ,m_modsel(0){}CCardRead::~CCardRead(){}voidCCardRead::DoDataExchange(CDataExchange*pDX){ CPropertyPage::DoDataExchange(pDX); DDX_Text(pDX,IDC_EDIT_READERADDR,m_readeraddr); DDX_Control(pDX,IDC_LIST2,m_listtags); DDX_Radio(pDX,IDC_RADIO1,m_modsel);}BEGIN_MESSAGE_MAP(CCardRead,CPropertyPage) ON_BN_CLICKED(IDC_BTN_CONNECTTOREADER,&CCardRead::OnBnClickedBtnConnecttoreader) ON_BN_CLICKED(IDC_BTN_CARDREAD,&CCardRead::OnBnClickedBtnCardread) ON_NOTIFY(NM_RCLICK,IDC_LIST2,&CCardRead::OnNMRclickList2) ON_COMMAND(ID_32771,&CCardRead::On32771) ON_BN_CLICKED(IDC_BTN_LISTEMPTY,&CCardRead::OnBnClickedBtnListempty)END_MESSAGE_MAP()//CCardRead消息處理程序voidCCardRead::OnBnClickedBtnConnecttoreader(){//TODO:在此添加控件通知處理程序代碼 CWaitCursorwc; UpdateData();if(m_readeraddr.IsEmpty()) { AfxMessageBox(TEXT("請輸入讀寫器地址"),MB_ICONINFORMATION,0); return; } LPTSTRp=m_readeraddr.GetBuffer(); charccommno=*p; m_readeraddr.ReleaseBuffer(); CStringt; GetDlgItem(IDC_BTN_CONNECTTOREADER)->GetWindowText(t); if(TEXT("連接")==t) {if(m_modsel!=m_presel) { if(!SetConfigInfo("HFExample",m_modsel)) TRACE("SetHFExampleConfiginfoERR\n"); } DWORDnewcom; newcom=_tcstoul(m_readeraddr,NULL,10); if(newcom!=m_precom) { if(!SetConfigInfo("HFExampleCom",newcom)) TRACE("SetHFExampleComConfiginfoERR\n"); } if(m_modsel==0) //網(wǎng)關模式 { TCHAR_comm[10]={0}; _stprintf_s(_comm,9,TEXT("COM%c"),ccommno); CSelectorseler(_comm); if(!seler.SelHF()) { AfxMessageBox("HF模塊未準備好",MB_ICONSTOP,0); return;} } if(!m_preader->ConnectToReader(m_readeraddr)) { AfxMessageBox("連接失敗",MB_ICONSTOP,0); return; } GetDlgItem(IDC_BTN_CONNECTTOREADER)->SetWindowText(TEXT("斷開")); GetDlgItem(IDC_BTN_CARDREAD)->EnableWindow(TRUE); GetDlgItem(IDC_RADIO1)->EnableWindow(FALSE); GetDlgItem(IDC_RADIO2)->EnableWindow(FALSE);} else { if(m_preader->DisConnectFromReader()) { GetDlgItem(IDC_BTN_CONNECTTOREADER)->SetWindowText(TEXT("連接")); GetDlgItem(IDC_BTN_CARDREAD)->EnableWindow(FALSE); GetDlgItem(IDC_RADIO1)->EnableWindow(); GetDlgItem(IDC_RADIO2)->EnableWindow(); } }}BOOLCCardRead::OnInitDialog(){ CPropertyPage::OnInitDialog();//TODO:在此添加額外的初始化 //TagsList m_listtags.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); m_listtags.InsertColumn(0,TEXT("#")); m_listtags.InsertColumn(1,TEXT("ID")); m_listtags.InsertColumn(2,TEXT("Cnt")); m_listtags.InsertColumn(3,TEXT("姓名")); CRectrect4; m_listtags.GetClientRect(rect4);//獲得當前客戶區(qū)信息 m_listtags.SetColumnWidth(0,rect4.Width()/10);//設置列的寬度。 m_listtags.SetColumnWidth(1,5*rect4.Width()/10); m_listtags.SetColumnWidth(2,rect4.Width()/10); m_listtags.SetColumnWidth(3,3*rect4.Width()/10); m_hsayhelloevent=CreateEvent( NULL,//nosecurityattributes FALSE,//manual-resetevent? FALSE,//initialstateissignaled? NULL);//objectnotnamed if(NULL==m_hsayhelloevent) TRACE("createeventforsayhellofailed\n"); m_hsayhello=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)sayhello,(LPVOID)this,0,NULL); if(NULL==m_hsayhello) TRACE("createthreadforsayhellofailed\n"); GetDlgItem(IDC_EDIT_READERADDR)->SetWindowText(TEXT("COM1")); GetEPCToName(); if(!GetConfigInfo("HFExample",&m_presel)) { TRACE("GetHFExampleiniErr:"); } else { m_modsel=m_presel; } if(!GetConfigInfo("HFExampleCom",&m_precom)) { m_precom=_tcstoul(m_readeraddr,NULL,10); TRACE("GetHFExampleCominiErr:"); } else { m_readeraddr.Format("%d",m_precom); } m_preader=newCHFReader; if(m_preader==NULL) TRACE(TEXT("CreateHFReaderError\n")); UpdateData(FALSE); InitializeCriticalSection(&m_cs); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //異常:OCX屬性頁應返回FALSE}voidCCardRead::OnBnClickedBtnCardread(){//TODO:在此添加控件通知處理程序代碼 CWaitCursorwc; CStringt; GetDlgItem(IDC_BTN_CARDREAD)->GetWindowText(t); if(TEXT("開始讀卡")==t) { m_listtags.DeleteAllItems(); m_epc.clear(); if(!m_preader->BeginInventory(callback1,this)) TRACE("BeginInventoryerror\n"); GetDlgItem(IDC_BTN_CARDREAD)->SetWindowText(TEXT("停止讀卡")); } elseif(TEXT("停止讀卡")==t) { if(!m_preader->CancelInventory()) TRACE("CancelInventoryerror\n"); GetDlgItem(IDC_BTN_CARDREAD)->SetWindowText(TEXT("開始讀卡")); }}BOOLCCardRead::OnSetActive(){//TODO:在此添加專用代碼和/或調(diào)用基類 GetEPCToName(); returnCPropertyPage::OnSetActive();}voidCCardRead::GetEPCToName(){ EmployeeInfoArray_t; theApp.getDB().GetAllEmployee(_t); m_epctoname.clear(); for(inti=0;i<_t.GetCount();i++) { CEmployeeInfo&aEmployee=_t.GetAt(i); m_epctoname[aEmployee.GetCardNo()]=aEmployee.GetName(); }}voidCCardRead::OnNMRclickList2(NMHDR*pNMHDR,LRESULT*pResult){//TODO:在此添加控件通知處理程序代碼 if(m_currentuser->GetPermission()==ADMINISTRATOR) { NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR; m_curNum=pNMListView->iItem;//對應的行 if(-1!=m_curNum&&m_listtags.GetItemText(m_curNum,3)=="") { CMenu menu; menu.LoadMenu(IDR_MENU_CARDNOADD); CPointpoint; GetCursorPos(&point); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); } } *pResult=0;}voidCCardRead::On32771(){//TODO:在此添加命令處理程序代碼 CEmployeeAddemployeeadddlg; CStringt; t=m_listtags.GetItemText(m_curNum,1); employeeadddlg.SetEmployeeCardNo(t); if(IDOK==employeeadddlg.DoModal()) { GetEPCToName(); m_listtags.SetItemText(m_curNum,3,employeeadddlg.m_aEmployeeInfo.GetName()); }}voidCCardRead::SetCurrentUser(CUserInfo*t){ m_currentuser=t;}voidCCardRead::On32772(){//TODO:在此添加命令處理程序代碼}voidCCardRead::OnBnClickedBtnListempty(){//TODO:在此添加控件通知處理程序代碼 m_listtags.DeleteAllItems(); m_epc.clear();}DWORDCCardRead::sayhello(LPVOID_t){CCardRead*cc=(CCardRead*)_t; DWORDret=cc->sayhellofun(); returnret;}DWORDCCardRead::sayhellofun(){ while(1) {if(m_queuename.empty()) {Sleep(100); continue;} EnterCriticalSection(&m_cs); SayThreaParam¶m=m_queuename.front(); CTimetimen=param.ttime; CString_t=param.str; CTimetimea(timen.GetYear(),timen.GetMonth(),timen.GetDay(),8,30,0), timep(timen.GetYear(),timen.GetMonth(),timen.GetDay(),17,30,0); CStringfilepath; if(timen<=timea) filepath="a\\"; elseif(timen>=timep) filepath="p\\"; else filepath="x\\"; CStringfilename=filepath+_t+CString(TEXT(".wav")); LeaveCriticalSection(&m_cs); BOOLbwelldone=PlaySound(filename,NULL,SND_SYNC|SND_FILENAME); EnterCriticalSection(&m_cs); m_queuename.pop(); LeaveCriticalSection(&m_cs);} return0;}voidCCardRead::callback1(std::vector<UINT8>_e1,std::string_e2,void*_t){CCardRead*p=(CCardRead*)_t; p->callbackfun1(_e1,_e2);}DWORDCCardRead::callbackfun1(std::vector<UINT8>_e1,std::stringt){CCardRead*m_test=this; TRACE("id:%s\n",t.c_str()); CTimetimen=CTime::GetCurrentTime(); if(-1==theApp.getDB().AddCardRead(t.c_str())) {TRACE("插入讀卡數(shù)據(jù)失敗\n"); Beep(750,1000);} else {CStringname; std::map<CString,CString>::iterator_iter; _iter=m_epctoname.find(t.c_str()); if(_iter!=m_epctoname.end()) {name=m_epctoname[t.c_str()]; EnterCriticalSection(&m_cs); SayThreaParamparam; param.str=name; param.ttime=timen; m_queuename.push(param); LeaveCriticalSection(&m_cs);} TTagEPCnember; std::map<CString,TTagEPC>::iteratoriter; iter=m_epc.find(t.c_str()); if(iter==m_epc.end()) {inti=m_listtags.GetItemCount(); CStringtt; tt.Format(TEXT("%d"),i); nember.idx=i; nember.epcdata=_e1; m_epc.insert(std::map<CString,TTagEPC>::value_type(t.c_str(),nember)); m_listtags.InsertItem(i,tt); m_listtags.SetItemText(i,1,t.c_str()); m_listtags.SetItemText(i,2,TEXT("1")); std::map<CString,CString>::iterator_iter; _iter=m_epctoname.find(t.c_str()); if(_iter!=m_epctoname.end()) {m_listtags.SetItemText(i,3,m_epctoname[t.c_str()]);}} else { CStringtt; inti; nember=iter->second; m_test->m_listtags.GetColumnWidth(1); tt=m_listtags.GetItemText(nember.idx,2); i=(int)_tcstoul(tt,NULL,10); tt.Format(TEXT("%d"),++i); m_listtags.SetItemText(nember.idx,2,tt); } } return0;}基于C8051F單片機直流電動機反饋控制系統(tǒng)的設計與研究基于單片機的嵌入式Web服務器的研究MOTOROLA單片機MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機溫度控制系統(tǒng)的研制基于MCS-51系列單片機的通用控制模塊的研究基于單片機實現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機控制的二級倒立擺系統(tǒng)的研究基于增強型51系列單片機的TCP/IP協(xié)議棧的實現(xiàn)基于單片機的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機的交流伺服電機運動控制系統(tǒng)研究與開發(fā)基于單片機的泵管內(nèi)壁硬度測試儀的研制基于單片機的自動找平控制系統(tǒng)研究基于C8051F040單片機的嵌入式系統(tǒng)開發(fā)基于單片機的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機實現(xiàn)一種基于單片機的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機的在線間歇式濁度儀的研制基于單片機的噴油泵試驗臺控制器的研制基于單片機的軟起動器的研究和設計基于單片機控制的高速快走絲電火花線切割機床短循環(huán)走絲方式研究基于單片機的機電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機的智能手機充電器基于單片機的實時內(nèi)核設計及其應用研究基于單片機的遠程抄表系統(tǒng)的設計與研究基于單片機的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機系統(tǒng)單片機系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機的液體點滴速度自動檢測儀的研制基于單片機系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機的電能采集終端的設計和應用基于單片機的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機單片機控制系統(tǒng)的研制基于單片機的數(shù)字磁通門傳感器基于單片機的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機的多生理信號檢測儀基于單片機的電機運動控制系統(tǒng)設計Pico專用單片機核的可測性設計研究基于MCS-51單片機的熱量計基于雙單片機的智能遙測微型氣象站MCS-51單片機構(gòu)建機器人的實踐研究基于單片機的輪軌力檢測基于單片機的GPS定位儀的研究與實現(xiàn)基于單片機的電液伺服控制系統(tǒng)用于單片機系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機的時控和計數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機和CPLD的粗光柵位移測量系統(tǒng)研究單片機控制的后備式方波UPS提升高職學生單片機應用能力的探究基于單片機控制的自動低頻減載裝置研究基于單片機控制的水下焊接電源的研究基于單片機的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機的氚表面污染測量儀的研制基于單片機的紅外測油儀的研究96系列單片機仿真器研究與設計基于單片機的單晶金剛石刀具刃磨設備的數(shù)控改造基于單片機的溫度智能控制系統(tǒng)的設計與實現(xiàn)基于MSP430單片機的電梯門機控制器的研制基于單片機的氣體測漏儀的研究基于三菱M16C/6N系列單片機的CAN/USB協(xié)議轉(zhuǎn)換器基于單片機和DSP的變壓器油色譜在線監(jiān)測技術(shù)研究基于單片機的膛壁溫度報警系統(tǒng)設計HYPERLINK

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論