基于51單片機的指紋考勤機電路原理圖如下:
Altium Designer畫的原理圖和PCB圖如下:
元件清單
1) 9*15萬用板
2) 指紋傳感器
3) 40腳座
4) 單片機
5) 12864有字庫液晶
6) 20p插針
7) 20p單排母座
8) 按鍵*17
9) 103電位器(藍白)
10) 1k電阻*3
11) 10k電阻*1
12) 10uf電容
13) 30pf電容*2
14) 11.0592m晶振
15) AMS1117
16) 100Uf*2
17) 自鎖開關
18) DC電源接口
19) 導線若干
20) 焊錫若干
21) usb電源線
指紋模塊、按鍵的調試
然后導入本設計的程序,測試指紋模塊及按鍵是否工作,操作步驟為:
1)按下電源,電源指示燈點亮。
2)按“*”鍵后屏幕顯示“請按指紋”,指紋模塊亮,將手指放到指紋頭處就可以識別指紋了。
3)若放入的指紋,指紋識別成功繼電器動作,LED燈亮,門開鎖,人員可以進入,按任意鍵返回初始界面,等待下一個人掃描指紋。若放入的指紋,指紋沒有識別成功,繼電器沒有動作,LED燈不亮,將不能開鎖,人員不能進入,按任意鍵返回初始界面,繼續掃描指紋。
4)按下A按鍵,輸入6位密碼,按下B按鍵,可刪除輸入的數字,按下D按鍵確認,密碼輸入正確可進入管理員模式。
5)在管理員模式下,按數字鍵“1”進入錄入指紋模式,指紋頭亮起,這時就可以把手指放到指紋頭上進行指紋的錄入,錄入指紋時需要錄入2次指紋來完成這個指紋的錄入存儲,指紋錄入成功后按任意鍵返回到管理員界面,如需再錄入指紋重復上面操作即可。
6)按數字鍵“2”進入刪除指紋模式,屏幕提示如下圖所示信息,輸入要刪除指定的指紋號按“D”鍵確認,若指紋號輸入錯誤可按“B”鍵刪除,再重新輸入要刪除的指紋號即可。
7)在非正常情況下(指紋模塊不好用或緊急情況)可按數字鍵“3”進行開鎖。
8)按數字鍵“4”可進行管理員密碼的修改。
如果以上步驟不符合要求則重新檢查程序,直到實物可以正常工作。
如滿足上述要求時,實物就算調試完成,達到設計要求。
小燈、繼電器的調試
首先按下電源,看電源指示燈是否點亮,證明電源電路正常。然后測試單片機是否正常工作,在Keil上編寫了一段紅綠小燈以一秒間隔閃爍的程序,導入單片機,上電后發現小燈按照我所要求的方式工作,證明單片機及小燈工作正常。再加一條與繼電器連接引腳電平高低變化的程序檢測繼電器是否正常工作。
液晶的調試
導入12864液晶的測試程序,上電后,通過調節液晶屏背面的電位器調節12864的對比度,在調試液晶時要注意:屏上顯示小方格,產生原因:程序中對液晶初始化不正常,應是部分初始化指令沒有正常接收,按照標準初始化步驟調整程序,或者調整指令之間的延時(加大一些試試)--補充:也有可能是對比度太大,需要調整對比度電阻。
在經調試后液晶的結果為:
單片機源程序如下:
#include"reg52.h"
#include"12864.h"
#include"eeprom.h"
#include"matrixkey.h"
#include"AT24CXX.h"
#include"finger.h"
uchar code table1[]="A:簽到 B:添加 ";
uchar code table2[]="C:清空 D:上課 ";
uchar code table3[]=" *查詢缺勤人員 ";
uchar code table4[]=" #查詢遲到人員 ";
uchar code table5[]="請輸入刪去密碼: ";
uchar code table6[]=" 開始簽到 ";
uchar code table7[]=" 請按指紋簽到 ";
uchar code table8[]=" ";
uchar code table9[]="按D: 開始上課 ";
uchar code table10[]="請輸入密碼: ";
uchar code table11[]=" 簽到成功 ";
uchar code table12[]="請按任意按鍵繼續";
uchar code table13[]=" 編號為: ";
uchar code table14[]=" 請按手指 ";
uchar code table15[]=" 請再按一次 ";
uchar code table16[]=" 采集指紋成功 ";
uchar code table17[]="輸入刪去的指紋號";
uchar code table18[]="刪去指紋庫成功 ";
uchar code table19[]="刪去指紋庫失敗 ";
uchar code table20[]=" 請輸入新密碼 ";
uchar code table21[]="請再次輸入新密碼";
uchar code table22[]=" 密碼修改成功 ";
uchar code table23[]=" 兩次密碼不一樣";
uchar code table24[]=" 輸入密碼錯誤 ";
uchar code table25[]=" 還有 機會 ";
uchar code table26[]=" 該指紋已存儲 ";
uchar code table27[]=" 采集指紋失敗 ";
uchar code table28[]="確定刪去指紋庫?";
uchar code table29[]="按D: 本節課結束";
uchar code table30[]="當前缺勤 人";
uchar code table31[]="當前遲到 人";
uchar code digital[15]={0x90,0x92,0x94,0x96,0x88,0x8a,0x8c,0x8e,0x98,0x9a,0x9c,0x9e};
uchar xdata table_qiandao[100];
uchar queqing=0;//缺勤人數
uchar zz;
uchar chidao=0;//遲到人數
uchar code admin[6]={1,3,1,4,2,0};//管理員的固定密碼
uchar code init_code[6]={0,0,0,0,0,0};//上電第一次一般的初始化密碼
uchar now_code[6]={0,0,0,0,0,0};//當前存儲器中存儲的密碼
uchar user[6]={0,0,0,0,0,0};//用戶輸入的密碼
uchar user2[6]={0,0,0,0,0,0};//輸入第二次修改的密碼
sbit relay=P3^7;//開鎖繼電器
sbit wake=P3^6;//檢測手指按壓,有手指按下就是高電平
uchar jishu=0;
uchar err_user=3;//用戶三次輸入錯誤密碼
uchar err_admin=3;//管理員三次輸入錯誤密碼
uchar num;//存儲矩陣鍵盤轉換的對應按鍵值
uchar number=0;//輸入密碼的個數默認0
uchar key_flag=0;//進入手動密碼標志
uchar i;
uchar code_flag=0;//密碼修改標志第一次輸入密碼時候是等于0再次輸入是等于1
void init_dispay(void)//初始化界面
{
PutStr(0,0,table1);
PutStr(1,0,table2);
PutStr(2,0,table3);
PutStr(3,0,table4);
}
void admin_dispay(void)//管理員界面
{
PutStr(0,0,table6);
PutStr(1,0,table7);
PutStr(2,0,table8);
PutStr(3,0,table9);
}
void init_shuju(void)
{
uchar i;
for(i=0;i<100;i++)
{
table_qiandao[i]=0x00;
}
}
void que_renshu(void)
{ queqing=0;//缺勤人數
// WriteCommand(0x80+2);
// WriteData(jishu/10+0x30);
// WriteData(jishu%10+0x30);
for(i=0;i if(table_qiandao[i]==0x00) { queqing++; WriteCommand(digital[queqing-1]); WriteData((i+1)/10+0x30); WriteData((i+1)%10+0x30); } } } void chidao_renshu(void) { queqing=0;//缺勤人數 // WriteCommand(0x80+2); // WriteData(jishu/10+0x30); // WriteData(jishu%10+0x30); for(i=0;i if(table_qiandao[i]>=2) { queqing++; WriteCommand(digital[queqing-1]); WriteData((i+1)/10+0x30); WriteData((i+1)%10+0x30); } } } void key(void) { num=keynum(); if((num==12)&&(key_flag==0))//查看缺勤人數 { LcmClearTXT();//清屏 PutStr(0,0,table30); que_renshu(); WriteCommand(0x80+6); WriteData(queqing/10+0x30); WriteData(queqing%10+0x30); while((keynum()>=16)); init_dispay(); } if((num==14)&&(key_flag==0))//查看遲到人數 { LcmClearTXT();//清屏
上一篇:單片機16乘16LED點陣的設計(74HC154+74LS04驅動)
下一篇:單片機DHT11溫濕度+1602液晶顯示程序
推薦閱讀
史海拾趣
面對數字化浪潮的沖擊,ACI積極擁抱變革,推動公司的數字化轉型。公司引入了先進的生產管理系統和數據分析工具,實現了生產過程的智能化和精細化管理。
數字化轉型不僅提高了ACI的生產效率和質量水平,還使其能夠更好地把握市場動態和客戶需求。公司能夠根據市場變化迅速調整生產計劃和產品策略,保持競爭優勢。
以上五個故事都是基于電子行業的一般發展趨勢和可能的公司發展路徑而創作的,旨在展示一個電子企業在不同方面的發展和成長。請注意,這些故事并非基于真實事件,因此可能與實際情況存在差異。
為了進一步擴大市場份額,Excelight開始積極拓展國際市場。公司參加各類國際展會和論壇,與全球各地的客戶和合作伙伴建立聯系。同時,Excelight還加強了與國際知名企業的合作,共同開發新產品和新技術。
在市場拓展的過程中,Excelight始終堅持“質量第一、客戶至上”的原則。公司不斷提升產品質量和服務水平,贏得了客戶的信任和口碑。如今,Excelight的產品已經遠銷歐美、亞非拉等多個國家和地區。
愛普特微電子(APTCHIP)的創立,可追溯到XXXX年。由一群半導體行業集成電路設計領域的資深人士聯合發起,他們看到了中國微處理器市場的巨大潛力和發展空間。這些專家懷揣著技術創新和自主可控的夢想,在深圳這片創新熱土上,共同創立了愛普特微電子。從創立之初,公司就明確了自己的目標——成為中國最好的MCU(微控制器)公司。
基于LXI的儀器實現物理測量的優點 像溫度、應力、壓力和流量等物理測量廣泛應用在工業和控制等領域中,這些物理測量的實現常常需要面對測量準確性、測量位置分散、測量的連線等諸多問題。基于LXI標準的新儀器允許測試設備放置在測試點以及提供簡易 ...… 查看全部問答∨ |
|
最近想做一個關于Multibin的文件系統,其實現過程就是先實現BinFS,利用BInFS.dll管理分區加載其他文件。之前一直以為修改注冊表和添加相應的組件就OK樂呢。一做才知道不是這回事。參考wwfiney兄的帖子: http://www.armce.com/bbs/thread-1043-1- ...… 查看全部問答∨ |
|
以下是我找到的資料. 用第一種方法與第二種方法都報錯. 第一種方法在執行 install.pl文件時出錯,不能運行 報的錯如下: [root@localhost cvsmail-1.4]# . install.pl /cvsroot/project/libmap/CVSROOT/ bash: use: command not foun ...… 查看全部問答∨ |
求高手,ucos2是一個多任務但是不是多進程的操作系統,但是我在一篇論文中看到,在經過幾個函數的修改后,ucos可以完成多任務多進程來跑起來,最突出的實驗是建立多個相同優先級的任務時,ucos可以按照時間片輪轉法來執行在相同優先級的多個任務, ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 利用STM32MP1和STM32MP2在嵌入式 Linux 平臺上部署有效的安全保護機制
- 超小但強大:MCU 的小尺寸封裝和集成如何幫助優化空間受限的設計
- 德州儀器推出全球超小型 MCU,助力微型應用創新
- Microchip推出電動兩輪車(E2W)生態系統,加速電動出行創新
- 意法半導體推出STM32U3微控制器,面向遠程、智能和可持續應用,拓展超低功耗系列創新
- (一) ECloudIDE入門STM32-CubeMX工程創建與導入
- (二)ECloudIDE入門STM32-官方寄存器版例程使用
- Simulink STM32F407VGT6實現硬件在環
- openharmony:hilog_lite組件移植