摘要:本文在充分理解考勤系統原則和目標的基礎上,采用單片機對考勤進行硬件設計并采用面向對象的思想進行上位機管理系統的設計。該芯片共內置個中文漢字,個字符的碼字符庫及點陣顯示。單片機指紋考勤系統參數設定流程如圖所示。
Hi,大家好,這里是丹成學長,今天向大家介紹一個 單片機項目
基于單片機的指紋識別考勤系統
大家可用于 課程設計 或 畢業設計
技術解答、畢設幫助、開題指導print("Q 746876041")
指紋識別是成熟的生物識別技術,生物識別技術是全球科研機構和企業的研究熱點,得以應用與推廣的許多技術都已經成熟,多種生物識別技術例如發音識別也是一項關鍵的技術,面部識別和指紋識別也得到了全面的發展。人的身份特征可以根據這些生物特征辨識得到,是因為每個人的這些特征都有很大的不同之處。人的指紋和掌紋都具有特征的唯一性,這樣的例子在人體內還有視網膜、虹膜、發音和面孔,在人類的特征中,骨架也具有唯一的特征 [4]。在系統安全面臨全方位現實挑戰的現在,科學技術把目光轉向了具有唯一性的生物識別技術,這些不可復制的人體身體特征,為科學實踐的進步增加了關鍵技術核心競爭力。因此,采用人體特征技術對企業人員進行合理的管理,能使企業人力資源的利用率得到很好的提高。
為最大程度上滿足當前企業的需要,本文有效的結合了當前最先進的生物特征識別技術和互聯網關鍵技術,構建了實現考勤報表管理、個人考勤信息查詢、員工終端考勤管理和總部考勤管理等功能的考勤系統。本文在充分理解考勤系統原則和目標的基礎上,采用單片機對考勤進行硬件設計并采用面向對象的思想進行上位機管理系統的設計。
系統結構設計實現過程中,是要以系統的功能性需求和非功能性需求為基礎的。
學長設計的單片機指紋考勤系統,不僅要實現硬件設計和完成上位機管理軟件的設計,還要保證系統在完成后使用穩定,便于維護并且容易擴展,在滿足系統的功能性需求基礎上滿足系統的非功能性需求。
系統的硬件設計包括人機交互功能的顯示和鍵盤模塊、通信模塊、指紋識別模塊、時鐘模塊和存儲模塊等,其硬件設計結構如圖所示。
ATMEL 公司生產的單片機 AT89C51RC2,是單片機指紋考勤機必要的硬件設備,其 CPU 具有高性能 CMOS 8 位微處理器和低電壓功能。
這里學長采用中文圖形控制芯片 ST7920 來實現用戶信息交互,它是一種內置128×64-12 漢字圖形點陣的液晶顯示控制模塊,用于顯示漢字及圖形。該芯片共內置 8192 個中文漢字,128 個字符的 ASCLL 碼字符庫及 64×256 點陣顯示RAM。
ST7920 與 單片機接口
勤時必備的要素除了指紋就是時間日期,因此,實時時鐘在本系統中是重要的部件,它必須具備準確可靠和斷電時正常工作的性能。因此需要選擇帶有雙電源的時鐘芯片,本系統采用的是時鐘芯片 DS1302。DS1302 與單片機的接口電路如圖所示。
指紋識別模塊包括指紋采集器和指紋處理單元,它起著關鍵性的作用。因此,好的指紋識別模塊能保證本系統在使用過程中的穩定性,具有 32 位處理器的VFDA02 指紋識別模塊就是本系統選擇的關鍵模塊,指紋識別模塊如圖所示。
單片機指紋考勤系統的下位機軟件功能圖如圖所示,整個設計由 7 部分組成,指紋考勤模塊將采集到的指紋信息反饋到單片機進行數據分析和處理,主程序將信息反饋到顯示屏同時進行數據的存儲和傳輸,時間由時鐘提供。各個模塊相對獨立又互相聯系,可以分別設計,便于軟件的調試。
單片機指紋考勤系統控制軟件主流程如圖 4.8 所示。主控制程序包含系統循環和初始化程序,初始化參數設置,其中主要有各個 I/O 口,串口和顯示屏的初始化,設置無線通信模塊為發射模式,啟動看門狗電路,時鐘,配置擴展芯片通道。初始化完成后,用戶按下手指或鍵盤,中斷程序完成指紋識別和鍵盤檢測,再反饋給單片機主程序。
管理人員通過系統管理模塊設定參數和管理指紋信息,單片機指紋考勤系統管理功能如圖
不同部門的系統參數設定不同,管理人員可以通過指紋管理模塊設定系統時間、考勤機號、波特率、管理員人數等各種參數。系統參數設定通過 LCD 屏幕與管理人員進行信息交互。參數修改首先要用系統管理員的身份進入,按下
MENU 鍵后,管理員驗證指紋,比對成功即可進入系統管理菜單,如果要修改系統時間設定,可通過鍵盤中的數字鍵和方向鍵將光標移至相應的位置進行修改,最后按 OK 鍵完成修改,退出管理菜單。其他參數的修改方式與此相同。單片機指紋考勤系統參數設定流程如圖 所示。
// 作者:丹成學長 Q746876041#include "sys.h"#include "delay.h"#include "usart.h" #include "led.h" #include "lcd.h" #include "key.h" #include "key1.h"#include "beep.h" #include "malloc.h"#include "sdio_sdcard.h" #include "w25qxx.h" #include "ff.h" #include "exfuns.h" #include "usart3.h"#include "common.h" #include "rtc.h" #include "sql.h"#include "usart2.h"#include "AS608.h"#include "timer.h"#include "touch.h"#include "ezio.h"#include "text.h"#include "admin.h"#include "fontupd.h"#include "usmart.h"#include "fattester.h"#include "stmflash.h"#include "mqtt.h"#define usart2_baund 9600//串口2波特率,根據指紋模塊波特率更改#define usart3_baund 11500FIL fill;UINT bw_2;u8 cun[10]={" "," ","0","0"," "," "," "," "," "," "};u8 cun_1[10]={" "," ","0","0"," "," "," "," "," "," "};#define FLASH_SAVE_ADDR 0X08070000#define SIZE sizeof(number_3)u8 number_1[30];u8 number_2[30];u8 number_3[120];u8 number_4[30];int member_num;u8** kbd_tbl;const u8* kbd_menu[15]={"delete"," : ","input","1","2","3","4","5","6","7","8","9"," ","0"," "};//按鍵表SysPara AS608Para;//指紋模塊AS608參數u16 ValidN;//模塊內有效指紋個數 u8 s_1=0;u8 IDnum;u8 shu_flag;u8 shu_flag_1;u8 flag_1=0;u8 flag_2=1;u8 flag3;u8 flag4=0;u8 flag5;u8 e=1;u8 f=1;u8 min_five=0;u8 count;u8 depart_flag;u8 data_flag;u8 z_1=1; //簽到人數void Add_FR(void); //錄指紋void Del_FR(void); //刪除指紋void press_FR(void);//刷指紋void ShowErrMessage(u8 ensure);//顯示確認碼錯誤信息void keyboard(u16 x,u16 y,u8 **kbtbl);void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode);void Show_Str_Mid(u16 x,u16 y,u8*str,u8 size,u8 len);void AS608_key_staset(u16 x,u16 y,u8 keyx,u8 sta);u8 jiemian(void );void IDentity(){ SearchResult seach; u8 key; u8 ensure_1; u8 z_2=0; flag_1=1; TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE ); LCD_Clear(WHITE);//清屏 Show_Str(20,40,200,16,"請識別指紋:",16,1); Show_Str(20,300,200,16,"密碼",16,1); Show_Str(200,300,200,16,"返回",16,1); while(flag_1) { ensure_1=PS_GetImage(); if(ensure_1==0x00)//獲取圖像成功 { BEEP=1;//打開蜂鳴器 ensure_1=PS_GenChar(CharBuffer1); if(ensure_1==0x00) //生成特征成功 { BEEP=0;//關閉蜂鳴器 ensure_1=PS_HighSpeedSearch(CharBuffer1,0,AS608Para.PS_max,&seach); if(ensure_1==0x00)//搜索成功 { LCD_Fill(0,100,lcddev.width,160,WHITE); Show_Str_Mid(0,100,"刷指紋成功",16,240); if(flag_1==1) { if(seach.pageID==99) z_2=1; else z_2=0; } min_five=0; } else ShowErrMessage(ensure_1); } else ShowErrMessage(ensure_1); BEEP=0;//關閉蜂鳴器 delay_ms(600); LCD_Fill(0,100,lcddev.width,160,WHITE); } if(z_2==1) { LCD_Clear (WHITE ); jiemian(); flag_1=0; } key=KEY_Scan(0); if(key==KEY0_PRES) flag_1=0; if(key==KEY2_PRES) { if(password_input()==1) //輸密碼 { LCD_Clear (WHITE ); jiemian(); flag_1=0; } else flag_1=0; } } return_time_flag=1; LCD_Clear (WHITE ); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );}int main(void){ u8 ensure; char *str; u8 key; u8 fontok=0; //用于字庫校準 u8 i; u8 b=0; u8 j=0; count=1; delay_init(); //延時函數初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級 usmart_dev.init(72); //初始化USMART uart_init(115200); //串口初始化為115200 usart2_init(usart2_baund);//初始化串口2 usart3_init(usart3_baund); //初始化串口3 LED_Init(); //初始化與LED連接的硬件接口 KEY_Init(); //初始化按鍵 LCD_Init(); //初始化LCD TP_Init(); //觸摸屏初始化,注意這里用到了24C02來存儲校準數據,因此需要24C02的驅動支持,移植的時候注意 W25QXX_Init(); //初始化W25Q128 PS_StaGPIO_Init(); //初始化FR讀狀態引腳 BEEP_Init(); //初始化蜂鳴器 Key_init1(); TIM3_Int_Init(1999,7199); RTC_Init(); // RTC_Set(2020,4,12,19,07,50); //設置時間 STMFLASH_Read(FLASH_SAVE_ADDR,(u16 *)number_3,SIZE);/*SD卡檢測及文件系統掛載*/ while(SD_Init())//檢測不到SD卡 { LCD_ShowString(30,150,200,16,16,"SD Card Error!"); delay_ms(500); LCD_ShowString(30,150,200,16,16,"Please Check! "); delay_ms(500); LED0=!LED0;//DS0閃爍 } exfuns_init(); //為fatfs相關變量申請內存 f_mount(fs[0],"0:",1); //掛載SD卡 f_mount(fs[1],"1:",1); //掛載FLASH. while(PS_HandShake(&AS608Addr))//與AS608模塊握手 { delay_ms(300); LCD_Fill(0,40,240,80,WHITE);// Show_Str_Mid(0,40,"未檢測到模塊!!!",16,240); delay_ms(700); LCD_Fill(0,40,240,80,WHITE);// Show_Str_Mid(0,40,"嘗試連接模塊...",16,240); } /*字庫校準*/ fontok=font_init(); //檢查字庫是否OK if(fontok||key==KEY1_PRES) //需要更新字庫 { LCD_Clear(WHITE); //清屏 POINT_COLOR=RED; //設置字體為紅色 key=update_font(20,110,16,"0:");//從SD卡更新 while(key)//更新失敗 { LCD_ShowString(60,110,200,16,16,"Font Update Failed!"); delay_ms(200); LCD_Fill(20,110,200+20,110+16,WHITE); delay_ms(200); } LCD_ShowString(60,110,200,16,16,"Font Update Success!"); LCD_Clear(WHITE);//清屏 } /*指紋模塊操作*/ ensure=PS_ValidTempleteNum(&ValidN);//讀庫指紋個數 if(ensure!=0x00) ShowErrMessage(ensure);//顯示確認碼錯誤信息 ensure=PS_ReadSysPara(&AS608Para); //讀參數 myfree(SRAMIN,str); POINT_COLOR=BLUE; LCD_Clear(WHITE);//清屏 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); zhuanhua(0); if(number_3[0]!=0) z_1=number_3[0]; while(1) { key=KEY_Scan(0); flag_1=0; flag_2=1; if(key==KEY2_PRES) { count=1; j=0; b=0; TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE ); LCD_Clear(WHITE);// mqtt_sendmassage(); while(count) { LCD_LED=1; Show_Str(10,10,240,320,"已簽到人員:",16,1); //a=5 LCD_ShowNum(130,10,(number_3[0]-1)/3,2,16); STMFLASH_Read(FLASH_SAVE_ADDR,(u16 *)number_3,SIZE); if(count==1) { for(i=1;i<120;i++) { if(number_3[i]!=0) { if(i%30==1&&i!=1) { j=0; b=0; LCD_Fill (10,30,220,300,WHITE); } LCD_ShowNum(40+50*j,60+20*b,number_3[i],2,16); if(i%3==1) LCD_ShowString(60,60+20*b,240,320,16," : "); } j++; if(i%3==0) { b++; j=0; } } count=2; } key=KEY_Scan(0); if(key==KEY0_PRES||key==KEY1_PRES||key==KEY2_PRES) { count=0; LCD_LED=1; LCD_Clear(WHITE); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); return_time_flag=1; } } } if(flag4==1) { number_3 [0]=0; for(i=1;i<120;i++) { number_3 [i]=0; } flag4=0; z_1=1; STMFLASH_Write(FLASH_SAVE_ADDR,(u16 *)number_3,SIZE ); } if(key==KEY0_PRES) { TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE ); jiemian(); LCD_LED=1; //點亮背光 } press_FR(
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124730.html
摘要:門禁系統可有效管理門的開啟關閉對出入人員進行監控管理。基于的門禁系統通過對射頻卡的識別,保證那些持有相應證件的人員能自由進出,阻止外來人員或無法提供證件的人員進入。 ...
摘要:信息的安全性可控性已成為錄音系統的重要研究內容。系統設計系統架構通過單片機與語音功能集成芯片,以及液晶芯片進行設計,由單片機控制來實現語音的錄制存儲以及播放清除等功能。 ...
摘要:基于單片機的智能小車控制就是其中的一個體現。本設計實現了一種基于單片機的自動避障智能模型車系統,通過紅外傳感器采集路況信息,通過對檢測信息的分析,自動控制轉向電機轉向,改變行駛路徑,繞過障礙物,從而實現車穩定避障。 ...
摘要:老年智能手環主要致力于深入到整個救治老年人環節中,促進幾個關鍵人群的及時反應智能互聯信息互通。是一款突出個性與人性的智能化產物。 文章目錄 1 簡介1 項目背景意...
摘要:設計簡介本設計是基于單片機的藍牙控制窗簾電路系統,主要實現以下功能可通過顯示溫濕度光照強度窗簾狀態和模式可通過按鍵調整光照強度最小值可通過藍牙連接手機進行遠程控制可通過獲取溫濕度可通過光敏電阻獲取光照強度。 設計簡介: 本設計是基于單片機的藍牙控制窗簾電路系統,主要實現以下功能: 可通過LC...
閱讀 2473·2021-11-24 09:39
閱讀 3405·2021-11-15 11:37
閱讀 2250·2021-10-08 10:04
閱讀 3965·2021-09-09 11:54
閱讀 1882·2021-08-18 10:24
閱讀 1032·2019-08-30 11:02
閱讀 1792·2019-08-29 18:45
閱讀 1651·2019-08-29 16:33