基于RFID技术的考勤系统设计
生活随笔
收集整理的這篇文章主要介紹了
基于RFID技术的考勤系统设计
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
基于RFID技術(shù)的考勤系統(tǒng)設(shè)計
目錄
- 基于RFID技術(shù)的考勤系統(tǒng)設(shè)計
- 前言
- 一、設(shè)計方案
- 1.1 總設(shè)計框圖
- 1.2功能簡述
- 1.3硬件仿真圖
- 二、基于RFID考勤管理系統(tǒng)設(shè)計
- 2.1單片機(jī)STC89C52芯片功能簡述
- 2.2射頻識別RC522芯片功能簡述
- 2.3 LCD顯示屏
- 2.4 CRC碼計算
- 2.5 上位機(jī)設(shè)計
- 2.6 數(shù)據(jù)庫設(shè)計
- 2.7 Altium Designer簡介
- 2.8 防碰撞原理分析
- 2.9 邏輯加密卡的認(rèn)證分析
- 三、設(shè)計結(jié)果驗證
- 總結(jié)
- 參考文獻(xiàn)
- 部分單片機(jī)代碼
前言
隨著科技技術(shù)的快速發(fā)展,單片機(jī)的應(yīng)用越來越廣泛,在醫(yī)療、工廠、機(jī)械之類方面起著重要的作用,單片機(jī)的編程非常靈活,在生活的應(yīng)用中起著重要的作用。更多的尤其是企業(yè)和教育機(jī)構(gòu),人們更多的使用射頻識別設(shè)備進(jìn)行打卡,實現(xiàn)員工上班和下班的考勤工作記錄,不僅方便了工作人員的考勤操作,也為企業(yè)或教育機(jī)構(gòu)的管理提供了便利的工具,從而真正的實現(xiàn)工作人員上班打卡記錄和下班打卡記錄的操作,一改傳統(tǒng)的人員手工記錄操作,使數(shù)據(jù)信息更加的真實性,準(zhǔn)確性和易于操作性。提示:以下是本篇文章正文內(nèi)容,下面案例僅供參考
一、設(shè)計方案
1.1 總設(shè)計框圖
以STC89C52單片機(jī)即8051單片機(jī)的增強(qiáng)版為核心,起著控制作用。系統(tǒng)包括LCD液晶顯示屏電路、復(fù)位電路、晶振電路、蜂鳴器警報電路、RC522射頻識別電路。設(shè)計思路分為四個模塊:STC89C52RC、LCD顯示電路、蜂鳴器警報電路、射頻識別電路。1.2功能簡述
基于RFID的考勤管理系統(tǒng),主要用于員工的打卡登記。當(dāng)IC卡接觸射頻識別模塊RC522時,液晶顯示屏顯示員工姓名和卡號顯示上班打卡成功,同一張IC卡再一次接觸射頻模塊時,液晶顯示屏顯示員工姓名和卡號顯示下班打卡成功。每次刷卡成功時,蜂鳴器響。上位機(jī)里面可以查看到刷卡的記錄信息。1.3硬件仿真圖
二、基于RFID考勤管理系統(tǒng)設(shè)計
2.1單片機(jī)STC89C52芯片功能簡述
STC89C52是一種帶8K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓、高性能COMOS8的微處理器。STC89C52內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,引腳RXD和TXD分別是放大器的輸入端和輸出端。時鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。在RXD和TXD引腳上外接定時元件,內(nèi)部振蕩器就產(chǎn)生自激振蕩。定時元件通常采用石英晶體和電容組成并聯(lián)諧振電路。STC89C52系列單片機(jī)具有一下功能:兼容MCS51指令系統(tǒng)32個雙向I/O口3個16位可編程定時/計數(shù)器中斷2個串行中斷2個外部中斷源2個讀寫中斷口線 VCC:電源輸入,接+5V電源 GND:接地線 XTAL1:片內(nèi)振蕩電路的輸入端 XTAL2:片內(nèi)振蕩電路的輸出端 PSEN:外部存儲器讀選通信號 EA/VPP:程序存儲器的內(nèi)外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內(nèi)部程序存儲器讀指令。 RST/VPD:復(fù)位引腳,引腳上出現(xiàn)2個機(jī)器周期的高電平將使單片機(jī)復(fù)位。 ALE/PROG:地址鎖存允許信號,當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。 P0口:P0口是一組8 位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8個TTL邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。 P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口。做輸入端時,被外部拉低的P3口將用上拉電阻輸出電流。P3口除了作為一般的I/O口線外,還有重要的第二功能。表1-1 P3組主要功能描述
| P3.0 | RXD(串行輸入口) |
| P3.1 | TXD(串行輸出口) |
| P3.2 | INT0*(外中斷0) |
| P3.3 | INT1*(外中斷1) |
| P3.4 | T0(定時/計數(shù)器0外部輸入) |
| P3.5 | T1(定時/計數(shù)器1外部輸入) |
| P3.6 | WR*(外部數(shù)據(jù)存儲器寫選通) |
| P3.7 | RD*(外部數(shù)據(jù)存儲器讀選通) |
2.2射頻識別RC522芯片功能簡述
MFRC522是高度集成的非接觸式讀寫卡芯片,發(fā)送模塊利用調(diào)制和解調(diào)的原理,將他們完全集成到各種非接觸式通信方法和協(xié)議中。可以用來處理兼容ISO 14443A卡和應(yīng)答機(jī)的信號,數(shù)字電路部分處理完整的ISO 14443A幀和錯誤檢測。MFRC522支持更高速的非接觸式通信,雙向數(shù)據(jù)傳輸速率高達(dá)424kbit/s。TVDD:發(fā)送器電源,給TX1和TX2的輸出級供電。TX1:發(fā)送器1,傳遞調(diào)制的13.56MHz的能量載波信號。TX2:發(fā)送器2,傳遞調(diào)制的13.56MHz的能量載波信號。TVSS:發(fā)送器地,TX1和TX2的輸出級的地。DVSS:數(shù)字地SDA:串行數(shù)據(jù)線IRQ:中斷請求,輸出用來指示的一個中斷事件。OSCIN:晶振輸入,振蕩器的反相放大器的輸入,外部產(chǎn)生的時鐘的輸入。OSCOUT:晶振輸出,振蕩器的反相放大器輸出。RX:接收器輸入,接收RF信號的管腳表2-1 中斷標(biāo)志及情況
| TimerIRq | 定時器 | 定時器計數(shù)從1到0 |
| TxIRaq | 發(fā)送器 | 一次數(shù)據(jù)流發(fā)送結(jié)束 |
| CRCIRq | CRC協(xié)處理器 | 已處理完FIFO緩沖區(qū)的所有數(shù)據(jù) |
| RxIRq | 接收器 | 一次數(shù)據(jù)流接收結(jié)束 |
| IdleIRq | 命令寄存器 | 執(zhí)行完一個命令 |
| HiAlertIRq | FIFO緩沖區(qū) | FIFO緩沖區(qū)已滿 |
| LoAlertIRq | FIFO緩沖區(qū) | FIFO緩沖區(qū)為空 |
| ErrIRq | 非接觸式UART | 檢測到一個錯誤 |
2.3 LCD顯示屏
LCD液晶顯示屏具有4位/8位并行,2線或3線串行多種接口,可顯示16*16點漢字,16*8點ASCII字符集,低電壓低功耗。V0:屏幕亮度調(diào)整RS:當(dāng)RS=’H’ DB7-DB0顯示數(shù)據(jù),當(dāng)RS=’L’ DB7-DB0顯示指令數(shù)據(jù)。R/W:當(dāng)R/W=’H’,E=’H’,數(shù)據(jù)被讀到DB7-DB0。E(SCLK):使能信號PSB: H:8位或4位并口方式,L:串口方式。2.4 CRC碼計算
(1)若信息字段代碼為1011001,對應(yīng)〖m(x)=x〗^6+x^4+x^3+1;假設(shè)生成多項式為g(x)=x^4+x^3+1,對應(yīng)g(x)代碼為11001,x^4 〖m(x)=x〗^10+x^8+x^7+x^4,對應(yīng)代碼為10110010000(2)采用多項式除法x^4 m(x)/g(x),得到余數(shù)1010,校驗字段1010(3)發(fā)送方發(fā)送的傳輸字段為10110011010,前7位信息字段,后4位校驗字段(4)接收方使用相同的生成碼進(jìn)行校驗,接收到的多項式如果能除盡,則正確。2.5 上位機(jī)設(shè)計
登錄界面
登錄界面VB程序示例:
信息顯示界面
信息顯示界面VB程序示例:
信息管理界面
2.6 數(shù)據(jù)庫設(shè)計
2.7 Altium Designer簡介
Altium Designer主要進(jìn)行原理圖設(shè)計、電路仿真、PCB繪制編輯、拓?fù)溥壿嬜詣硬季€、信號完整性分析 和設(shè)計輸 出等設(shè)計。在PCB部分,多通道復(fù)制、實時的、阻抗控制布線功能;SitusTM自動布線器等新功能以外,還著重在:差分對布線,FPGA器件差分對管腳的動態(tài)分配, PCB和FPGA之間的全面集成,從而實現(xiàn)了自動引腳優(yōu)化和非凡的布線效果。還有PCB文件切片,PCB多個器件集體操作,復(fù)雜BGA器件的多層自動扇出,提供 了對高密度封裝(如 BGA)的交互布線功能, 總線布線功能,器件精確移動,快速鋪銅等功能交互式編輯、出錯查詢、布線和可視化功能,從而能更快地實現(xiàn)電路板布局,支持高速電路設(shè)計,具有成熟的布線后信號完整性分析工具.對差分信號提供系統(tǒng)范圍內(nèi)的支持,可對高速內(nèi)連的差分信號對進(jìn)行充分定義、管理和交互式布線。支持包括對在FPGA項目內(nèi)部定義的LVDS信號的物理設(shè)計 進(jìn)行自動映射。在原理圖部分,可以將一些不同的對象拷貝到原理圖當(dāng)中,原理圖文件切片,多個器件集體操作,文本筐的直接編輯,箭頭的添加,器件精確移動,總線走線,自動網(wǎng)標(biāo)選擇等!在信號仿真部分,提供完善的混合信號仿真,在對 XSPICE 標(biāo)準(zhǔn)的支持之外,還支持對Pspice模型和電路的仿真。對FPGA設(shè)計提供了豐富的IP內(nèi)核,包括各種處理器、存儲器、外設(shè)、接口、以及虛擬儀器。嵌入式設(shè)計部分,增強(qiáng)了JTAG器件的實時顯示功能,增強(qiáng)型基于FPGA的邏輯分析儀,可以支持32位或64位的信號輸入。除了現(xiàn)有的多種處理器內(nèi)核外,還增強(qiáng)了對更多的32位微處理器的支持,可以使嵌入式軟件設(shè)計在軟處理器,FPGA內(nèi)部嵌入的硬處理器,分立處理器之間無縫的遷移。使用了Wishbone開放總線連接器允許在FPGA上實現(xiàn)的邏輯模塊可以透明的連接到各種處理器上。2.8 防碰撞原理分析
發(fā)生碰撞的原因:
(1)當(dāng)多個標(biāo)簽同時接受命令,又同時發(fā)出信息,給閱讀器造成信息的交叉干擾,以致分不清對象,造成沖突。 (2)多個讀寫器讀同一張標(biāo)簽,同樣也會發(fā)送信息的碰撞,造成沖突。防碰撞分析:
(1)PCD為選擇的防沖突類型和串聯(lián)級別分配了帶有編碼的SEL。 (2)PCD分配了帶有值為‘20’的NVB。 (3)PCD發(fā)送SEL和NVB。 (4)工作場內(nèi)的所有PICC應(yīng)使用它們的完整的UID CLn響應(yīng)。 (5)假設(shè)場內(nèi)的PICC擁有唯一序列號,那么,如果一個以上的PICC響應(yīng),則沖突發(fā)生。 (6)PCD應(yīng)識別出第一個沖突的位置。 (7)PCD分配了帶有值的NVB,該值規(guī)定了UID CLn有效比特數(shù)。這些有效位應(yīng)是PCD所決定的沖突發(fā)生之前被接收到的UID CLn的一部分再加上(0)b或(1)b。典型的實現(xiàn)是增加(1)b。 (8)PCD發(fā)送SEL和NVB,后隨有效位本身。 (9)只有PICC的UID CLn中的一部分等于PCD所發(fā)送的有效位時,PICC才應(yīng)發(fā)送其UID CLn的其余部分。 (10)如果出現(xiàn)進(jìn)一步的沖突,則重復(fù)步驟6~9。最大的環(huán)數(shù)目是32。 (11)如果不出現(xiàn)進(jìn)一步的沖突,則PCD分配帶有值為‘70’的NVB。 (12)PCD發(fā)送SEL和NVB,后隨UID CLn的所有40個位,后面又緊跟CRC_A校驗和。 (13)它的UID CLn與40個比特匹配,則該PICC以其SAK表示響應(yīng)。 (14)如果UID完整,則PICC應(yīng)發(fā)送帶有清空的串聯(lián)級別位的SAK,并從READY狀態(tài)轉(zhuǎn)換到ACTIVE狀態(tài)。 (15)PCD應(yīng)檢驗SAK(選擇確認(rèn))的串聯(lián)比特是否被設(shè)置,以決定帶有遞增串聯(lián)級別的進(jìn)一步防沖突環(huán)是否應(yīng)繼續(xù)進(jìn)行。如果PICC的UID是已知的,則PCD可以跳過步驟2~10來選擇該PICC,而無需執(zhí)行防沖突環(huán)。防碰撞分析流程圖:
2.9 邏輯加密卡的認(rèn)證分析
(1)應(yīng)用程序通過RFID讀寫器向電子標(biāo)簽發(fā)送認(rèn)證請求。 (2)電子標(biāo)簽收到請求后向讀寫器發(fā)送一個隨機(jī)數(shù)B。 (3)讀寫器收到隨機(jī)數(shù)B后,向電子標(biāo)簽發(fā)送要驗證的密鑰加密B的數(shù)據(jù)包,其中包含了讀寫器生成的另一個隨機(jī)數(shù)A。 (4)電子標(biāo)簽收到數(shù)據(jù)包后,使用芯片內(nèi)部存儲的密鑰進(jìn)行解密,解出隨機(jī)數(shù)B并校驗與之發(fā)出的隨機(jī)數(shù)B是否一致。 (5)如果一致,則RFID使用芯片內(nèi)部存儲的密鑰對A進(jìn)行加密并發(fā)送給讀寫器。 (6)讀寫器收到數(shù)據(jù)包后,進(jìn)行解密,解出A并與之前的A比較是否一致。 (7)如果每一個環(huán)節(jié)都成功,則驗證成功,否則驗證失敗。邏輯加密卡三次認(rèn)證:
三、設(shè)計結(jié)果驗證
刷卡上班測試
刷卡下班測試
上位機(jī)上班結(jié)果顯示
上位機(jī)下班結(jié)果顯示
多功能按鍵界面
注冊界面
注銷界面
總結(jié)
設(shè)計最大的亮點就是模塊化設(shè)計,將執(zhí)行功能的各個部分封裝成一個個模塊,即子函數(shù)。在主函數(shù)中編寫需要調(diào)用功能的子函數(shù)名即可執(zhí)行相應(yīng)的功能,目的是便于修改,減小了對程序大規(guī)模的修改,降低了程序編寫過程中的出錯率。設(shè)計的硬件圖考慮到實際應(yīng)用的需求和視覺審美,盡最大程度的減少電路設(shè)計過程中線路的繁雜和無條理性,所以選擇標(biāo)號的方式,既能使電路處于連通的狀態(tài)又能使電路整體整潔美觀。防碰撞原理的分析是本次設(shè)計的最大難點,RC522射頻識別采用防碰撞算法去解決讀寫器同時讀多個標(biāo)簽時的沖突問題,采用了流程圖的方法,盡可能直觀形象的分析防碰撞的原理以及操作過程。邏輯加密卡三次認(rèn)證的原理通過采用示意圖將讀寫器對標(biāo)簽讀寫操作前的認(rèn)證得到了較好的分析和操作。參考文獻(xiàn)
[1]黃廣林.我國單片機(jī)技術(shù)的應(yīng)用及發(fā)展趨勢[J]. 電子技術(shù)與軟件工程,2017(19):254 [2]周曉光,王曉華.射頻識別(RFID)技術(shù)原理與應(yīng)用實例[M].人民郵電出版社,2006.5:35-37. [3] 李淑琴,范蟠果.射頻識別非接觸式IC卡讀卡器的設(shè)計[J].計算機(jī)測量與控制,2007,29(3): 378-380. [4] 嚴(yán)光文,張其善.射頻識別卡讀寫模塊的設(shè)計[J].北京航空航天大學(xué)學(xué)報,2003,41(2):74-76. [5] 安劍,孫秀梅,鞏建華.Visual Basic項目開發(fā)全程實錄.清華大學(xué)出版社,2011 [6] 嚴(yán)光文,張其善.射頻識別卡讀寫模塊的設(shè)計[J].北京航空航天大學(xué)學(xué)報,2003,41(2):74-76. [7] 郭天祥.新概念52單片機(jī)C語言教程——入門、提高、開發(fā)、拓展全攻略[M].北京:電子工業(yè)出版社,2008部分單片機(jī)代碼
/** *函數(shù)將我們的尋卡命令PICC_REQIDL裝填到要發(fā)送的數(shù)組,通過 *PcdComMF522函數(shù)發(fā)送出去,如果此時在PCD有效范圍內(nèi)沒有尋找到卡,則函數(shù)返回MI_ERR *若函數(shù)返回MI_OK,并且ulen為0x10為兩個字節(jié)則說明尋卡成功,返回的兩個字節(jié)被裝填入CardRevBuf數(shù)組。 */ char PcdRequest(unsigned char req_code,unsigned char *pTagType) {char status; unsigned int unLen;unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08);//寄存器包含接收器和發(fā)送器和數(shù)據(jù)模式檢測器的狀態(tài)標(biāo)志WriteRawRC(BitFramingReg,0x07);//不啟動數(shù)據(jù)發(fā)送SetBitMask(TxControlReg,0x03);//TX1,TX2輸出信號將傳遞經(jīng)發(fā)送數(shù)據(jù)調(diào)制的13.56MHz的能量載波信號。ucComMF522Buf[0] = req_code;status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1, ucComMF522Buf,&unLen);//通過522發(fā)送req_code命令,并接收返回數(shù)據(jù),存到ucComMF522Buf中。if ((status == MI_OK) && (unLen == 0x10))//因為2個字節(jié)是16bit{ *pTagType = ucComMF522Buf[0];*(pTagType+1) = ucComMF522Buf[1];}else{ status = MI_ERR; }return status; } /** *防沖突操作就是將防沖突命令通過PcdComMF522函數(shù)與PICC卡進(jìn)行交互。防沖突命令是兩個字節(jié), *其中第一個字節(jié)為Mifare_One卡的防沖突命令字PICC_ANTICOLL1(0X93), *第二個字節(jié)為0x20 *選擇代碼SEL(1個字節(jié)),SEL規(guī)定了串聯(lián)級別CLn。 *有效位的數(shù)目NVB(1個字節(jié)),NVB規(guī)定了PCD所發(fā)送的CLn的有效位的數(shù)目。 */ char PcdAnticoll(unsigned char *pSnr) {char status;unsigned char i,snr_check=0;unsigned int unLen;unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08);//寄存器包含接收器和發(fā)送器和數(shù)據(jù)模式檢測器的狀態(tài)標(biāo)志WriteRawRC(BitFramingReg,0x00);//不啟動數(shù)據(jù)發(fā)送,接收的LSB為存放在位0.接受到的第二位防在位1,定義發(fā)送的最后一個字節(jié)的位數(shù)為8ClearBitMask(CollReg,0x80);//所有接收的位在沖突后將被清除。ucComMF522Buf[0] = PICC_ANTICOLL1;ucComMF522Buf[1] = 0x20;status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2, ucComMF522Buf,&unLen);if (status == MI_OK){for (i=0; i<4; i++){ *(pSnr+i) = ucComMF522Buf[i];snr_check ^= ucComMF522Buf[i];}if (snr_check != ucComMF522Buf[i])//返回四個字節(jié),最后一個字節(jié)為校驗位{ status = MI_ERR; }}SetBitMask(CollReg,0x80);return status; } //選定卡片 char PcdSelect(unsigned char *pSnr) {char status;unsigned char i;unsigned int unLen;unsigned char ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0] = PICC_ANTICOLL1;ucComMF522Buf[1] = 0x70;ucComMF522Buf[6] = 0;for (i=0; i<4; i++){ucComMF522Buf[i+2] = *(pSnr+i);ucComMF522Buf[6] ^= *(pSnr+i);}CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);//計算CRC裝填至ucComMF522Buf[7]ClearBitMask(Status2Reg,0x08);//寄存器包含接收器和發(fā)送器和數(shù)據(jù)模式檢測器的狀態(tài)標(biāo)志。status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9, ucComMF522Buf,&unLen);if ((status == MI_OK) && (unLen == 0x18))//成功返回SAK,包括1字節(jié)的SAK和2字節(jié)的CRC_A。{ status = MI_OK; }else{ status = MI_ERR; }return status; }void main( ) { InitializeSystem1( );OperationCard = 0;tt=4;OperationCard = READCARD; STC_send_bluetooth('J');InitializeSystem( );Init_ST7920(); //初始化ClrScreen();STC_send_bluetooth('J');while (1){ if (CmdValid){CmdValid = FALSE;UartProcess();}KeyScan();//鍵盤掃描 if(tt==1) { LCD_PutString(0,1," ");LCD_PutString(0,2," 注冊界面 ");LCD_PutString(0,3," ");LCD_PutString(0,4," ");CtrlProcess();//控制處理}}if(tt==4) { LCD_PutString(0,1," ");LCD_PutString(0,2," 歡迎使用員工 ");LCD_PutString(0,3," 考勤管理系統(tǒng) ");LCD_PutString(0,4," ");CtrlProcess();//控制處理}}if(tt==5) { LCD_PutString(0,1," ");LCD_PutString(0,2," 注銷界面 ");LCD_PutString(0,3," ");LCD_PutString(0,4," ");CtrlProcess();//控制處理} } LED=1; BEEP=1; iii=0; } } #include <reg52.h> #include <intrins.h> #include "delay.h" sbit RS = P1^7; //控制端口 sbit RW = P1^6; sbit E = P1^5; sbit PSB = P3^2; sbit PAUSE = P0^3; sbit RES = P0^2; #define DataPort P2 //單片機(jī) P2<------> 液晶DB0-DB7 void Check_Busy() { RS=0;RW=1;E=1;DataPort=0xff;while((DataPort&0x80)==0x80);//忙則等待E=0; } void Write_Cmd(unsigned char Cmd) {Check_Busy();RS=0;RW=0;E=1;DataPort=Cmd;DelayUs2x(5);E=0;DelayUs2x(5); } void Write_Data(unsigned char Data) {Check_Busy();RS=1;RW=0;E=1;DataPort=Data;DelayUs2x(5);E=0;DelayUs2x(5); } void Init_ST7920() { DelayMs(40); //大于40MS的延時程序PSB=1; //設(shè)置為8BIT并口工作模式DelayMs(1); //延時RES=0; //復(fù)位DelayMs(1); //延時RES=1; //復(fù)位置高DelayMs(10);Write_Cmd(0x30); //選擇基本指令集DelayUs2x(50); //延時大于100usWrite_Cmd(0x30); //選擇8bit數(shù)據(jù)流DelayUs2x(20); //延時大于37usWrite_Cmd(0x0c); //開顯示(無游標(biāo)、不反白)DelayUs2x(50); //延時大于100usWrite_Cmd(0x01); //清除顯示,并且設(shè)定地址指針為00HDelayMs(15); //延時大于10msWrite_Cmd(0x06); //指定在資料的讀取及寫入時,設(shè)定游標(biāo)的移動方向及指定顯示的移位,光標(biāo)從右向左加1位移動DelayUs2x(50); //延時大于100us } void LCD_PutString(unsigned char x,unsigned char y,unsigned char *s) { switch(y){case 1: Write_Cmd(0x80+x);break;case 2: Write_Cmd(0x90+x);break;case 3: Write_Cmd(0x88+x);break;case 4: Write_Cmd(0x98+x);break;default:break;}while(*s>0){ Write_Data(*s);s++;DelayUs2x(50);} } void ClrScreen() { Write_Cmd(0x01);DelayMs(15); }資源文件下載鏈接:
?
基于RFID考勤系統(tǒng)單片機(jī)程序
基于RFID考勤系統(tǒng)流程圖、原理圖
基于RFID考勤系統(tǒng)上位機(jī)
總結(jié)
以上是生活随笔為你收集整理的基于RFID技术的考勤系统设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019年全国电子设计竞赛H题电磁炮之定
- 下一篇: 信息搜集