国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
51單片機AS608指紋密碼鎖C程序源碼+原理圖+PCB文件
[打印本頁]
作者:
eng
時間:
2021-6-13 02:54
標題:
51單片機AS608指紋密碼鎖C程序源碼+原理圖+PCB文件
這是一個基于AS608+STC89C52單片機的指紋識別和鍵盤密碼鎖。本文尾部有完成c語言程序,原理圖,pcb文件附件。
3.png
(234.4 KB)
下載附件
2021-6-13 02:39 上傳
原理圖截圖:
2.png
(81.47 KB)
下載附件
2021-6-13 02:40 上傳
pcb文件截圖:
1.png
(123.99 KB)
下載附件
2021-6-13 02:40 上傳
部分源碼:
/*********************************************************
函數名稱:bit Command(uchar *p,uchar MaxTime)
函數作用:命令解析,給模塊發送一個命令
參數說明:*p指令,MaxTime延時時長
*********************************************************/
bit Command(u8 *p,u8 MaxTime)
{
u8 count=0,tmpdat=0,temp=0,i=0,package=0,flag=0,checksum=0;
bit result=0, start=0,stop=0;
UART_send_char(0xef);//數據包包頭識別碼
UART_send_char(0x01);//數據包包頭識別碼
i=p[0];//數組的第“0”個元素、里面存放了本數組的長度,把這個長度給變量i,方便進行操作
for(count=2; count<i;count++)//發送數據包
UART_send_char(p[count]); //將數據發送出去
result=TURE; //發送完成,結果為真 (真為1)
FifoNumber=0;//清除接收的數據個數
for(count=0;count<=MAX_NUMBER;count++)//清空所有FIFO[]數組里面的內容,寫入0X00
FIFO[count]=0x00;
if(result)
{
result=FALSE;
start =FALSE;
stop =FALSE;
count=0;
clk0=0; //清零CL0計數
do /////////////////////////////do的內容////////////////////////////////
{
restart0:
if (RI==1)//如果接收到數據
{
tmpdat=SBUF;//先把接收到的數據放到tmpdat中
RI=0; //軟件清除接收標志
if((tmpdat==0xef)&&(start==FALSE))//這個數據為第一個傳回來的數據,也就是“指令應答”的第一個字節
{
count=0;
FIFO[0]=tmpdat;//讀入第一個應答字節(0XEF),存在第“0”個元素中
flag=1;
goto
restart0;//可以用中斷方式進行
}
if(flag==1)//第一個字節已經回來,所以flag==1成立
{
if(tmpdat!=0x01)//接收數據錯誤,將重新從緩沖區接收數據
{
flag=0;//接收應答失敗
result=FALSE;
start =FALSE;
stop=FALSE;
count=0;
goto
restart0;
}
//如果成功接收到0xef01,可以開始接收數據
flag=2;//flag=2;表示應答成功,可以開始接收數據了
count++;//現在count=1;
FIFO[count]=tmpdat;//讀入第二個應答字節(0X01),存在第“1”個元素中
start=TURE; //應答成功可以開始接收數據
goto
restart0;
}
if((flag==2)&&(start==TURE))//flag=2;表示應答成功,可以開始接收數據了
{
count++;//數據元素下標++
FIFO[count]=tmpdat;//存入數據
if(count>=6)
{
checksum=FIFO[count]+checksum;//計算校驗和
}
if(count==8)
{
package=FIFO[7]*0X100+FIFO[8];//計算包長度
stop= TURE;
}
if(stop)
{
if(count==package+8)
{
checksum=checksum-FIFO[count-1] - FIFO[count];
if(checksum != (FIFO[count]&0xff))
result=FALSE; //校驗失敗,置結果標志為0
else
result=TURE;
flag=0;
break;
}
}
}
}
}
while((clk0<=MaxTime)&&(count<=MAX_NUMBER));//由定時器以及最大接收數據來控制,保證不會在此一直循環
FifoNumber=count;//保存接收到的數據個數
}
return (result);//返回操作是否成功
}
/*********************************************************
函數名稱:uchar ImgProcess(uchar BUFID)
函數作用:發獲取圖像并生成特征文件,存入BUFID中
參數說明:BUFID為緩沖區號
*********************************************************/
u8 ImgProcess(u8 BUFID)
{
if(Command(GIMG,89) && (FifoNumber==11) && (FIFO[9]==0x00))//操作成功
{
if(BUFID==1) //生成指紋特征1
{
if(Command(GENT1,60) && (FifoNumber==11) && (FIFO[9]==0x00))//操作成功
return 1;
else
return 0;
}
else if(BUFID==2)//生成指紋特征2
{
if(Command(GENT2,60) && (FifoNumber==11) && (FIFO[9]==0x00))//操作成功
return 1;
else
return 0;
}
}
else
return 0;
return 0;
}
/*********************************************************
函數名稱:uchar search()
函數作用:搜索指紋
參數說明:返回指紋序號
*********************************************************/
u8 search()
{
u8 SearchBuf=0;
if (ImgProcess(1)==1)//首先讀入一次指紋
{
if(Command(SEAT,60) && (FifoNumber==15) && (FIFO[9]==0x00))//進行指紋比對,如果搜索到,返回搜索到的指紋序號
return FIFO[10]*0x100+FIFO[11];
else
return 255;
}
return 0;
}
/*********************************************************
函數名稱:bit savefingure(uchar ID)
函數作用:保存指紋
參數說明:指定保存的序號
*********************************************************/
bit savefingure(u8 ID)
{
u8 i;
//現在開始進行存儲指紋模板的操作
for (i=0;i<16;i++) //獲取保存指紋信息指令
{
FIFO[i]=STOR[i];
}
FIFO[12]=ID; //把指紋模板存放的PAGE_ID也就是FLASH的位置
FIFO[14]=FIFO[14]+ID; //重新計算校驗和
if (Command(FIFO,70)==1)//成功返回1 //此處進行存放指紋模板的命令
{return(1);}
else
{return(0);} //不成功返回0
}
/*********************************************************
函數名稱:bit dellfingure(uchar ID)
函數作用:刪除指紋
參數說明:指定序號刪除
*********************************************************/
bit dellfingure(u8 ID)
{
u8 i;
//現在開始進行存儲指紋模板的操作
for (i=0;i<16;i++) //獲取刪除指紋信息指令
{
FIFO[i]=DELE_one[i];
}
FIFO[11]=ID; //把指紋模板存放的PAGE_ID也就是FLASH的位置
FIFO[15]=FIFO[15]+ID; //重新計算校驗和
if (Command(FIFO,70)==1)//成功返回1//此處進行存放指紋模板的命
{return(1);}
else
{return(0);} //不成功返回0
}
/*********************************************************
函數名稱:bit Clear_All()
函數作用:清空指紋庫
參數說明:返回1成功,返回0失敗
*********************************************************/
bit Clear_All()
{
if(Command(DELE_all,50)==1)
return(1);
else
return(0);
}
/*********************************************************
函數名稱:uchar enroll()
函數作用:采集兩次指紋,生成1個指紋模板
參數說明:
*********************************************************/
u8 enroll()
{
u8 temp=0,count=0;
while(1)
{
temp=ImgProcess(1);//生成特征1
if (temp==1) //生成特征文件成功
{
break;
}
else
{
if (temp==0)//采集指紋沒有成功
{
count++;
if (count>=40)//如果采集了40次,還不成功,直接采集失敗,直接退出enroll函數----返回0
return(0);
}
}
}
//采集第一個特征成功
count=0;
delay1ms(500);//延時0.5S開始采集下一個特征
//開始采集第二個特征
while(1)
{
temp=ImgProcess(2);//生成特征2
if (temp==1) //生成特征文件2成功
{
if((Command(MERG,40)&& (FifoNumber==11) && (FIFO[9]==0x00))==0) //合并不成功返回0,成功返回1
{
return 0;
}
else//特征文件合并生成模板,結果存于ModelBuffer
{
return 1;
}
}
else
{
if (temp==1)//采集指紋沒有成功
{
count++;
if (count>=25)
return(0);
}
}
}
}
復制代碼
pcb和原理圖工程文件.zip
(1.09 MB, 售價: 3 E幣)
2021-6-13 02:51 上傳
點擊文件名下載附件
售價: 3 E幣
[記錄]
[
購買
]
指紋密碼鎖完整C源碼.zip
(113.33 KB, 售價: 5 E幣)
2021-6-13 02:53 上傳
點擊文件名下載附件
售價: 5 E幣
[記錄]
[
購買
]
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0