|
自己做的一個(gè)指紋鎖,各路大神歡迎指導(dǎo)
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
指紋鎖PCB.png (28.29 KB, 下載次數(shù): 112)
下載附件
2019-7-10 14:37 上傳
0.png (65.92 KB, 下載次數(shù): 93)
下載附件
2019-7-11 16:06 上傳
0.png (3.53 KB, 下載次數(shù): 96)
下載附件
2019-7-11 16:06 上傳
單片機(jī)源程序如下:
- #include"reg52.h"
- #include"12864.h"
- //#include"eeprom.h"
- #include"matrixkey.h"
- #include"AT24CXX.h"
- #include"finger.h"
- uchar code table4[]=" 請按手指開鎖 ";
- uchar code table5[]="請輸入密碼開鎖: ";
- uchar code table6[]="按鍵1: 增加指紋";
- uchar code table7[]="按鍵2: 刪去指紋";
- uchar code table8[]="按鍵3: 手動開鎖";
- uchar code table9[]="按鍵4: 修改密碼";
- uchar code table10[]="請輸入密碼: ";
- uchar code table11[]=" 門已打開 ";
- uchar code table12[]="請按任意按鍵繼續(xù)";
- uchar code table13[]=" 編號為: ";
- uchar code table14[]=" 請按手指 ";
- uchar code table15[]=" 請?jiān)侔匆淮?nbsp; ";
- uchar code table16[]=" 采集指紋成功 ";
- uchar code table17[]="輸入刪去的指紋號";
- uchar code table18[]="刪去指紋號成功 ";
- uchar code table19[]="刪去指紋號失敗 ";
- uchar code table20[]=" 請輸入新密碼 ";
- uchar code table21[]="請?jiān)俅屋斎胄旅艽a";
- uchar code table22[]=" 密碼修改成功 ";
- uchar code table23[]=" 兩次密碼不一樣";
- uchar code table24[]=" 輸入密碼錯(cuò)誤 ";
- uchar code table25[]=" 還有 機(jī)會 ";
- uchar code table26[]=" 該指紋已存儲 ";
- uchar code table27[]=" 采集指紋失敗 ";
- 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};//當(dāng)前存儲器中存儲的密碼
- 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 err_user=3;//用戶三次輸入錯(cuò)誤密碼
- uchar err_admin=3;//管理員三次輸入錯(cuò)誤密碼
- uchar num;//存儲矩陣鍵盤轉(zhuǎn)換的對應(yīng)按鍵值
- uchar number=0;//輸入密碼的個(gè)數(shù)默認(rèn)0
- uchar key_flag=0;//進(jìn)入手動密碼標(biāo)志
- uchar i;
- uchar code_flag=0;//密碼修改標(biāo)志第一次輸入密碼時(shí)候是等于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 key(void)
- {
- num=keynum();
- if((num==11)&&(key_flag==0))//如果按下C按鍵進(jìn)入
- {
- key_flag=1;
- //只顯示“請輸入密碼開鎖:“
- LcmClearTXT();//清屏
- PutStr(1,0,table5);
- }
- if((num==3)&&(key_flag==0))//如果按下A按鍵管理員模式
- {
- key_flag=2;//進(jìn)入輸入管理員密碼界面
- //只顯示“請輸入密碼:“
- LcmClearTXT();//清屏
- PutStr(1,0,table10);
- }
- if((key_flag==1)&&(num!=0xff))//非管理員模式下輸入密碼
- {
- num=coding(num);//轉(zhuǎn)換成可以識別的
- if((number<6)&&(num<10))
- {
- user[number]=num;//用戶輸入的密碼進(jìn)行記憶
- WriteCommand(0x88+number); //指定第三行顯示位置
- WriteData('*');
- //WriteData(num+0x30);//明碼顯示
- number++;
- }
- if((num=='B')&&(number>0))//密碼刪除按鍵
- { number--;
- WriteCommand(0x88+number); //指定第三行顯示位置
- WriteData(' ');
- }
- if((num=='D')&&(number==6))//按下D鍵確定按鍵并且輸入六位密碼之后
- {
- LcmClearTXT();//清屏
- number=0;
- key_flag=0;
- //如果管理員密碼正確,進(jìn)入添加指紋,刪除指紋,收到開鎖,修改密碼界面
- if((user[0]==now_code[0])&&(user[1]==now_code[1])&&(user[2]==now_code[2])&&(user[3]==now_code[3])&&(user[4]==now_code[4])&&(user[5]==now_code[5]))
- { //只顯示“門已打開“
- PutStr(1,0,table11);
- relay=0;
- Delay(8000000);
- relay=1;
- Delay(3000000);
- err_user=3;
- }
- else//密碼錯(cuò)誤
- { err_user--;
- PutStr(1,0,table24);//顯示輸入密碼錯(cuò)誤
- PutStr(2,0,table25);//顯示輸入密碼錯(cuò)誤
- WriteCommand(0x88+3); //指定第三行顯示位置
- WriteData(' ');
- WriteData(err_user+0x30);
- }
- PutStr(3,0,table12);
- while((keynum()>=16)&&(err_user!=0));
- init_dispay();//初始化界面
- }
-
- }
- if((key_flag==2)&&(num!=0xff))//管理員模式下輸入數(shù)字按鍵
- {
- num=coding(num);//轉(zhuǎn)換成可以識別的
- if((number<6)&&(num<10))
- {
- user[number]=num;//用戶輸入的密碼進(jìn)行記憶
- WriteCommand(0x88+number); //指定第三行顯示位置
- WriteData('*');
- // WriteData(num+0x30); //明碼顯示
- number++;
- }
- if((num=='D')&&(number==6))//按下D鍵確定按鍵并且輸入六位密碼之后
- { //如果管理員密碼正確,進(jìn)入添加指紋,刪除指紋,收到開鎖,修改密碼界面
- if((user[0]==admin[0])&&(user[1]==admin[1])&&(user[2]==admin[2])&&(user[3]==admin[3])&&(user[4]==admin[4])&&(user[5]==admin[5]))
- {
- key_flag=3;
- admin_dispay();//管理員設(shè)置界面
- err_admin=3;
-
- }
- else//管理員密碼錯(cuò)誤
- {
- err_admin--;
- PutStr(1,0,table24);//顯示輸入密碼錯(cuò)誤
- PutStr(2,0,table25);//顯示還 機(jī)會
- WriteCommand(0x88+3); //指定第三行顯示位置
- WriteData(' ');
- WriteData(err_admin+0x30);
- PutStr(3,0,table12);
- while((keynum()>=16)&&(err_admin!=0));
- init_dispay();//初始化界面
- number=0;
- key_flag=0;
- }
- }
- if((num=='B')&&(number>0))
- {
- number--;
- WriteCommand(0x88+number); //指定第三行顯示位置
- WriteData(' ');
- }
-
-
- }
- if((key_flag==3)&&(num!=0xff))
- {
- num=coding(num);//轉(zhuǎn)換成可以識別的
- if(num=='C')//返回初始界面
- {
- number=0;
- key_flag=0;
- init_dispay();//返回初始界面
- }
- if(num==1)//增加指紋
- {
- //只顯示“門已打開“
- LcmClearTXT();//清屏
- PutStr(1,0,table14); //顯示請按指紋
- if(regist(0)==1)//如果第一次按手指成功
- {
- PutStr(1,0,table15); //顯示請?jiān)侔匆淮?br />
- Delay(10);//延時(shí)一會
- if(regist(1)==1)//兩次采集手指成功
- {
- PutStr(1,0,table16); //采集指紋成功
- PutStr(2,0,table13); //指紋編號:
- WriteCommand(0x88+5);//指定第三行顯示位置
- WriteData(' ');
- WriteData(id/100+0x30);
- WriteData(id%100/10+0x30);
- WriteData(id%10+0x30);
-
- }
- else PutStr(1,0,table27); //采集指紋失敗
- }
- else if(regist(0)==2)//已經(jīng)注冊過指紋
- {
- PutStr(1,0,table26); //指紋已經(jīng)存儲
- }
-
- PutStr(3,0,table12); //請按任意鍵退出
- while(keynum()>=16);
- admin_dispay();//管理員設(shè)置界面
- key_flag=3;
- num=0xff;
- }
- if(num==2)//刪除指紋
- {
- //只顯示“門已打開“
- LcmClearTXT();//清屏
- PutStr(1,0,table17);//輸入刪去的指紋號
- number=0;
- key_flag=32;
- num=0xff;//防止后面key_flag=32誤動作
-
- }
- if(num==3)//按下按鍵3直接打開鎖
- {
- //只顯示“門已打開“
- LcmClearTXT();//清屏
- PutStr(1,0,table11);
- relay=0;
- Delay(40);
- relay=1;
- Delay(20);
- PutStr(3,0,table12);
- while(keynum()>=16);
- admin_dispay();//管理員設(shè)置界面
- }
- if(num==4)//修改密碼
- {
- //只顯示“門已打開“
- LcmClearTXT();//清屏
- PutStr(0,0,table20);//顯示請輸入新密碼
- number=0;
- key_flag=34;
- num=0xff;//防止后面key_flag=32誤動作
- code_flag=0;//密碼修改標(biāo)志第一次輸入密碼時(shí)候是等于0再次輸入是等于1
- }
- }
- if((key_flag==32)&&(num!=0xff))//進(jìn)入刪除指紋操作
- {
- num=coding(num);//轉(zhuǎn)換成可以識別的
- if((number<3)&&(num<10))
- {
- user[number]=num;//用戶輸入的密碼進(jìn)行記憶
- WriteCommand(0x88+number); //指定第三行顯示位置
- WriteData(num+0x30);
- number++;
- }
- if((num=='D')&&(number==3))//按下D鍵確定按鍵并且并且輸入了3位數(shù)號碼
- {
- if(cancel((user[0]*100+user[1]*10+user[2]))==1)
- {
- PutStr(0,0,table18);//輸入刪去的指紋號成功
- }
- else
- {
- PutStr(0,0,table19);//輸入刪去的指紋號失敗
- }
-
- PutStr(3,0,table12);
- while(keynum()>=16);
- admin_dispay();//管理員設(shè)置界面
- number=0;
- key_flag=3;
- }
- }
- if((key_flag==34)&&(num!=0xff))//進(jìn)入刪除指紋操作
- {
- num=coding(num);//轉(zhuǎn)換成可以識別的
- if((number<6)&&(num<10))
- {
- if(code_flag==0)
- user[number]=num;//用戶輸入第一次的密碼進(jìn)行記憶
- else user2[number]=num;//用戶輸入第二次的密碼進(jìn)行記憶
- WriteCommand(0x88+number); //指定第三行顯示位置
- WriteData(num+0x30);
- number++;
- }
- if((num=='D')&&(number==6))//按下D鍵確定按鍵并且并且輸入了6位數(shù)密碼
- {
- LcmClearTXT();//清屏
- if(code_flag==0)
- {
- PutStr(0,0,table21);//顯示請?jiān)俅屋斎胄旅艽a
- number=0;
- num=0xff;//防止后面key_flag=32誤動作
- code_flag=1;//密碼修改標(biāo)志第一次輸入密碼時(shí)候是等于0再次輸入是等于1
- }
- else
- {
- if((user[0]==user2[0])&&(user[1]==user2[1])&&(user[2]==user2[2])&&(user[3]==user2[3])&&(user[4]==user2[4])&&(user[5]==user2[5]))//如果兩次密碼一樣密碼修改成功
- {
- PutStr(0,0,table22);//修改密碼成功
- for(i=0;i<6;i++) //復(fù)制新密碼
- now_code[i]=user[i];
- write_data(20,user,6);//進(jìn)行數(shù)據(jù)保存
- }
- else
- {
- PutStr(0,0,table23);//兩次修改密碼不一樣
- }
- PutStr(3,0,table12);
- while(keynum()>=16);
- admin_dispay();//管理員設(shè)置界面
- number=0;
- key_flag=3;
- }
- }
- }
- }
- void main()
- {
- for(i=0;i<6;i++)//讀取存儲器中的密碼
- {
- now_code[i]=read_add(20+i);
- Delay(5);
- }
- for(i=0;i<6;i++)
- {
- if(now_code[i]>9)
- {
- i=10;
- break;
- }
- }
- if(i>9)//設(shè)置初始化密碼
-
- {
- for(i=0;i<6;i++)
- {
- now_code[i]=init_code[i];
- Delay(5);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
指紋鎖原理圖.zip
(1.75 MB, 下載次數(shù): 381)
2019-7-10 14:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
程序.zip
(91.78 KB, 下載次數(shù): 315)
2019-7-10 14:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|