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

正文內容

高校指紋考勤系統(tǒng)的設計與實現-指紋管理與考勤模塊軟件學院畢業(yè)設計畢業(yè)論文-資料下載頁

2025-01-17 05:50本頁面
  

【正文】 13. 0Eh:表示模塊不能接受后續(xù)數據包;14. 0Fh:表示上傳圖像失敗;15. 10h:表示刪除模板失??;16. 11h:表示清空指紋庫失?。?7. 13h:表示口令不正確;18. 15H:表示緩沖區(qū)內沒有有效原始圖而生不成圖像;19. 18H:表示讀寫FLASH出錯;20. 19H:未定義錯誤;21. 1AH:無效寄存器號;22. 1BH:寄存器設定內容錯誤號;23. 1CH:記事本頁碼指定錯誤;24. 1DH:端口操作失??;25.其它:系統(tǒng)保留 指令列表MS02系列指紋模塊因為將識別算法固化在硬件上的原因,提供了一系列模塊功能操作指令給開發(fā)者。 常用指令及其功能說明代碼助記符功能說明代碼助記符功能說明01HGetImage錄指紋圖像0FHReadSysPara讀系統(tǒng)參數02HGenChar圖像轉特征10HEnroll注冊模板03HMatch指紋對比11HIdentify驗證指紋04HSearch搜索指紋12HSetPwd設置口令05HRegModel特征合成模板13HVfyPwd效驗口令06HStoreChar存儲模板14HGetRandomCode采樣隨機數07HLoadChar讀出模板15HSetAdder設置地址08HUpChar上傳特征17HControl端口控制09HDownChr下傳特征18HWriteNotepad寫記事本0AHUpImage上傳圖像19HReadNotepad讀記事本0BHDownImage下載圖像1AHBurnCode燒寫片內FLASH0CHDeletChar刪除模板0DHEmpty清空指紋庫1BHHispeedSearch高速搜索指紋0EHWriteReg設置系統(tǒng)參數1DHTempleteNum讀指紋模板數 指紋模塊控制代碼設計[9]首先,開發(fā)者需要將上一節(jié)所列出的常用的指令依次初始化在其對應的UINT8數據類型的數組中。下面列出從傳感器上讀入圖像指令定義代碼作為示例:UINT8 GetImage [13]={12,0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0,3,0x01,0x00,0x05}。 接著,開發(fā)者需要一個數據容器來存儲下位機傳送來的數據包并進行分析,在這里,作者使用了一個大容量的UINT8數據類型的長數組ReciveData[38460]來進行數據包存儲。 到此,數據定義準備工作已經完成,下面作者對指紋模塊控制流程設計進行分析,開發(fā)者如何高效率且實時的控制指紋模塊進行一系列相關聯(lián)的連續(xù)指令操作,使用多線程技術是一個非常不錯的設計思路,而這其中就需要設計命令數據包接收線程、登記線程和驗證線程三個貫穿整個模塊控制要用到的主要線程。 而在這之前,開發(fā)者必須打開串口用于數據通信,作者設計的串口開啟函數OpenPort原型如下:OpenPort(LPCTSTR Port, int BaudRate, int DataBits, int StopBits, int Parity)其中五個參數需要在線程開啟前初始化,其初始化默認值分別為1:, 115200,8,0,0。函數設計為依次打開串口線程,并進行串口占用檢查,讀取串口的DCB,默認禁止奇偶校驗和流量控制,接著設置串口狀態(tài)參數,其中包括串口事件:接收到一個字符、設置接收與發(fā)送的緩沖區(qū)大小、重新設置串口的DCB,設置完成后進行參數校驗,并接著設置超時參數,其中又包括接收字符間最大時間間隔、讀數據總超時常量、清除收/發(fā)緩沖區(qū)。到此,串口函數編寫完成,可以進行線程設計。下面列出命令數據包接收線程的詳細設計代碼作為登記線程和驗證線程的參考:CommRecvThread(LPVOID lparam){ DWORD dwLength。 CManageDlg *pDlg = (CManageDlg *)lparam。 UINT8 *pReciveData = new UINT8[38460]。 while(1) { /* 等待線程退出事件*/ if (pDlgm_hComm != INVALID_HANDLE_VALUE) { /* 從串口讀取數據*/ memset(pReciveData, 0, 38460)。 BOOL fReadState = ReadFile(pDlgm_hComm, pReciveData, 38460, amp。dwLength, NULL)。 if(!fReadState) return 0。 else { if(dwLength != 0) { if(pReciveData[0] == 0xEF) // 包頭第一字節(jié) { if (pReciveData[1] == 0x01) // 包頭第二字節(jié) { if (pReciveData[9] == 0x00) { memcpy(ReciveData,pReciveData,dwLength)。//讀取返回數據 SetEvent(pDlgm_hCommEvent)。// 確認(0x00表示指令執(zhí)完成)}}}}}}} delete [] pReciveData。 return 0。}接著在打開串口函數中依次創(chuàng)建設計命令數據包接收線程、登記線程和驗證線程,詳細代碼如下: // 創(chuàng)建串口接收線程 m_hRecvThread = CreateThread(0, 0, CommRecvTread, this, 0, amp。hRecvIDThread)。 if (m_hRecvThread == NULL) {MessageBox(_T(創(chuàng)建接收線程失敗!))。 return。} CloseHandle(m_hRecvThread)。 // 創(chuàng)建登記線程 m_hLoginThread = CreateThread(0, 0, LoginTread, this, 0, amp。hLoginIDThread)。 if (m_hLoginThread == NULL) {MessageBox(_T(創(chuàng)建登記線程失敗!))。 return。} CloseHandle(m_hLoginThread)。 // 創(chuàng)建驗證線程 m_hIdentifyThread = CreateThread(0, 0, IdentifyTread, this, 0, amp。hIdentifyIDThread)。 if (m_hIdentifyThread == NULL) {MessageBox(_T(創(chuàng)建驗證線程失敗!))。 return。 }CloseHandle(m_hIdentifyThread)。 再接著,開發(fā)者需要編寫詳細的控制代碼,控制代碼中幾個比較重要控制操作如:指紋登記、指紋比對、指紋驗證等,都涉及到指紋模塊命令發(fā)送與接收函數、讀取記事本信息、獲取指紋圖像和指紋特征、合并特征生成模板、搜索指紋、判斷第ID號指紋是否已經登記等幾個重要函數指令。它們的函數設計功能、名稱和輸入輸出設計如下:l 指紋模塊命令發(fā)送與接收函數:函數名:FingerCommand輸入:*SendData 待發(fā)送的命令輸出:0xFF 接收到的包頭錯誤 0x00 接收成功l 讀記事本信息:功能:讀出記事本中的指紋數目和相應登陸指紋標號函數名:ReadUserInfo輸入:無輸出:0 讀取錯誤 1 指紋庫空 2 指紋庫非空l 獲取指紋圖像和指紋特征:函數名:ImgProcess輸入:BufferID 緩沖區(qū)ID輸出:0 獲取指紋圖像失敗 1 獲取指紋特征成功 2 獲取指紋特征失敗l 合并特征生成模板功能:獲取指紋圖像和指紋特征,合并特征生成模板函數名:Enroll輸入:flag 標志位輸出:0xFF 登記成功 0 登記失敗 其他 指紋IDl 保存ID號指紋函數名:SaveFinger輸入:ID 指紋ID輸出:1 保存成功 0 保存失敗 2 指紋庫滿l 搜索指紋函數名: Search輸入:無輸出:0 未找到指紋 其他 指紋IDl 判斷第ID號指紋是否已經登記函數名:IsEmpty輸入:ID 指紋ID輸出:1 已登記 0 未登記 以指紋模塊命令發(fā)送與接收函數設計代碼為例,其他函數參考該段代碼進行編寫,如下所示:UINT8 FingerCommand(UINT8 *Command){ UINT8 len,GetBinImageFlag = 0。 DWORD dwactlen,DelayNms = 800。 CommandFail = 1。 len = *Command++。 if(*(Command+9) == 0x0A) GetBinImageFlag = 1。//是向上位機傳圖片 WriteFile(m_hComm, Command, len, amp。dwactlen, NULL)。 /* 從串口發(fā)送數據*/ if(GetBinImageFlag) { GetBinImageFlag = 0。 DelayNms = 4000。 } if(WaitForSingleObject(m_hCommEvent,DelayNms) == WAIT_OBJECT_0) return 0。 else return 0xFF。} 最后,開發(fā)者針對模塊的主要四個控制功能:指紋登記(函數名稱: OnLogin)、指紋驗證(函數名稱: OnIdentify)、指紋刪除(函數名稱: OnDelete)、指紋清空(函數名稱: OnEmpty),進行代碼編寫。只需通過對以上編寫的操作控制函數進行合理的調度和使用即可。在此僅列出指紋驗證(函數名稱: OnIdentify)代碼作為參考:void CFingerDemoDlg::OnIdentify() { UINT8 ucBuf, ucTryNum = 0。 UINT16 ucTemp。 static BOOL bIdenStart = FALSE。 UpdateData(TRUE)。 ucBuf = ReadUserInfo()。 if(ucBuf != 2) { /* 讀記事本出錯返回 */ MessageBox(_T(記事本讀取失敗))。 return。}loop_cmp: ucTemp = Search()。 if (ucTemp == 0) { /* 比對不通過 */ ucTryNum++。 if (ucTryNum 2) { goto loop_cmp。} MessageBox(_T(該指紋尚未登記,退出指紋驗證程序))。 return。} GetDlgItem(IDC_STATICDISP)SetWindowText(_T(退出指紋驗證程序))。 MessageBox(_T(該指紋已登記))。} 到此,指紋模塊控制具體代碼設計基本全部完成,客戶端的開發(fā)中直接調用這些函數就可對指紋設備進行控制操作,例如指紋登記時調用指紋登記(函數名稱: OnLogin)。 指紋登記工作流程圖 指紋管理與考勤客戶端設計 客戶端模塊類函數設計[10] 整個客戶端設計有CDataWrap、CManager_Server、Manager_Client、Client、CDataWrapList五個主要類,整個客戶端模塊也通過這五個主要類中的各個函數進行功能的實現。 客戶端主要類函數圖 指紋管理客戶端功能設計[11]指紋管理客戶端相對來說是一個獨立的模塊只與指紋考勤客戶端共享一個存儲學生指紋信息的數據庫與服務器模塊沒有直接聯(lián)系,故只用將上一小節(jié)的指紋登記、指紋刪除、指紋清空等模塊控制函數結合數據庫存儲進行代碼編寫即可。該客戶端主要包括管理員登錄、登記新指紋入庫、查詢已錄入指紋信息、修改已錄入指紋信息、刪除已錄入指紋信息、清空指紋庫等一系列指紋管理功能,接下來作者將通過登記新指紋入庫功能作為范例介紹指紋管理客戶端的詳細代碼設計。首先,在創(chuàng)建的主對話框上添加所需的按鈕及控件。創(chuàng)建一個用于輸入學號的Edit Control控件,屬性中的ID命名為IDC_EDIT_ID。 VS2005添加成員變示例接著,添加一個登記按鈕控件,屬性中的ID設置為IDC_BTN_LOGIN。雙擊建立好的按鈕控件進入其消息響應函數代碼的編寫,函數原型如下:void CManageDlg::OnBnClickedBtnLogin()該部分代碼工作流程:獲取新建立的IDC_EDIT_ID控件內所輸入的學號,將其存儲至數據庫(內含重復登記檢測);響應指紋模塊登記指紋,并將生成的指紋號存儲至相應學號的數據庫中(內含重復登記及容量檢測);添加代碼如下:首先刷新數據,獲取新輸入的學號也就是編輯控件IDC_EDI
點擊復制文檔內容
醫(yī)療健康相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1