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

正文內(nèi)容

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

2025-01-17 05:50本頁面
  

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