指纹密码锁主程序.docx
- 文档编号:27379858
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:49
- 大小:24.11KB
指纹密码锁主程序.docx
《指纹密码锁主程序.docx》由会员分享,可在线阅读,更多相关《指纹密码锁主程序.docx(49页珍藏版)》请在冰豆网上搜索。
指纹密码锁主程序
#include〈reg52.h〉
#include h> #include"24C0x。 h” #include”LCD12864。 h" #defineucharunsignedchar #defineuintunsignedint #definebuffer1ID0x01 #definebuffer2ID0x02 #definequeren0x88 #definetuichu0x84 #defineshanchu0x82 #defineUser2 voidfan(); sbitB0=B^0; sbitB7=B^7; sbitk2=P3^7; sbitjidianqi=P3^6; //sbitBuzzer=P0^0; externunsignedchartimes[]; ucharMember,sec,z=0;//=1 ucharcodebuffer[User][6]= { {”000000”} }; uchardz[4]; uchartime[4]; ucharmima[6]; ucharmimag[6]; //ucharmimaID[6]={1,2,3,4,5,6}; ucharmimaID[6]; uchardataK; uchardataKey; uintPageID; uchardataquerenma=11; ucharsum[2]; intsummaf,summas; ucharxdataUserPassword[6]={0};//密码 ucharxdataDSY_BUFFER[16]={0};//缓存 voidRed_Init(void); //检测脉冲宽度 unsignedcharcheck(void); unsignedcharredchange(unsignedcharrednum); voiddelayms(unsignedintz) { unsignedintx,y; for(x=z;x〉0;x-—) for(y=110;y>0;y-—); } /******************************************************************** *名称: Chack(ucharUser_Number) *功能: 单一用户密码检测 *输入: User_Number *输出: 密码正确与错误,错误返回0,正确返回1 ********************************************************************/ ucharChack(ucharUser_Number) { ucharflag,i,temp[6],Address; Address=User_Number*10; for(i=0;i〈6;i++) { temp[i]=x24c02_read(Address); delayms(10); Address++; } for(i=0;i<6;i++) { if(temp[i]==UserPassword[i]) flag=1; else flag=0; } returnflag; } /******************************************************************** *名称: PassWord_Chack() *功能: 所有用户密码检测 *输入: 无 *输出: 密码正确与错误,错误返回0,正确返回1 ********************************************************************/ ucharPassWord_Chack() { uchari=0; while(i { if(Chack(i)==1) { Member=i+1; return1; } i++; } return0; } voiddelay(uinttt) {uchari; while(tt-—) { for(i=0;i〈125;i++); } } /******************************************************************** *名称: UART_Init() *功能: 单片机串口初始化 *单片机: 晶振11.0592MHz波特率为9600bps *指纹模块: 波特率为9600bps, ********************************************************************/ voidUART_Init() { SCON=0x50;//串口方式1//REN=1;允许接收 PCON=0x00;//SMOD=0 TMOD=0x21;//定时器1定时方式2 TH1=0xFD;//11。 0592MHz模块默认波特率为9600bps TL1=0xFD; TR1=1;//启动定时器 EA=1; } unsignedcharKeycan(void)//按键扫描程序P1.0-—P1。 3为行线P1.4-—P1。 7为列线 { unsignedcharrcode,ccode; P1=0xF0;//发全0行扫描码,列线输入 if((P1&0xF0)! =0xF0)//若有键按下 { delay (1);//延时去抖动 if((P1&0xF0)! =0xF0) {rcode=0xFE;//逐行扫描初值 while((rcode&0x10)! =0) { P1=rcode;//输出行扫描码 if((P1&0xF0)! =0xF0)//本行有键按下 { ccode=(P1&0xF0)|0x0F; //do{;} while((P1&0xF0)! =0xF0);//等待键释放 return((~rcode)+(~ccode));//返回键编码 } else rcode=(rcode<<1)|0x01;//行扫描码左移一位 } } } return0;//无键按下,返回值为0 } voidKeyDeal(unsignedcharKey) {//unsignedcharn; if(Key! =0) { switch(Key) { case0x11: K=1;break; case0x21: K=2;break; case0x41: K=3;break; case0x81: break; case0x12: K=4;break; case0x22: K=5;break; case0x42: K=6;break; case0x82: K=34;break; case0x14: K=7;break; case0x24: K=8;break; case0x44: K=9;break; case0x84: break; case0x18: break; case0x28: K=0;break; case0x48: K=11;break; case0x88: break; default: break; } } } //***************************************// voidSFG_getimage()//录入指纹图像 { uchari; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X03; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; summaf=0x05; SBUF=summaf; while(TI==0); TI=0; for(i=0;i〈9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]〈〈8)+sum[0]; } voidSFG_genchar(ucharbufferID)//生成特征并存于charbuffer1/2调用后单片机波特率变化@@@ { uchari; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X04; while(TI==0); TI=0; SBUF=0X02; while(TI==0); TI=0; SBUF=bufferID; while(TI==0); TI=0; summaf=0x07+bufferID; sum[0]=summaf; sum[1]=summaf>>8; SBUF=sum[1]; while(TI==0) TI=0; SBUF=sum[0]; while(TI==0) TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<<8)+sum[0]; } voidSFG_fastsearch(ucharbufferID)//搜索指纹返回指纹ID号sum、pagenum>255都会使程序卡@@@ { uchari,ID1,ID2; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X08; while(TI==0); TI=0; SBUF=0X1b; while(TI==0); TI=0; SBUF=bufferID; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=180; while(TI==0); TI=0; summaf=9+0x1b+bufferID+180; sum[0]=summaf; sum[1]=summaf〉>8; SBUF=sum[1]; while(TI==0); TI=0; SBUF=sum[0]; while(TI==0); TI=0; for(i=0;i〈9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; ID1=SBUF; while(RI==0); RI=0; ID2=SBUF;//接收到的ID号 while(RI==0); RI=0; while(RI==0); RI=0; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<〈8)+sum[0]; //PageID=ID1; PageID=(ID1<<8)+ID2; } voidSFG_enroll()//自动注册模板返回存储ID=录图像+合并生成模板+储存模板 { uchari,ID1,ID2; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X03; while(TI==0); TI=0; SBUF=0X10; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; summaf=0x14; SBUF=summaf;//校验和 while(TI==0); TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; ID1=SBUF; while(RI==0); RI=0; ID2=SBUF; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]〈<8)+sum[0]; //PageID=ID1; PageID=(ID1<〈8)+ID2; } voidSFG_deletchar(uintpageID)//删除指纹校验和在2字节的页码处应分高低字节相加 { uchari,ID1,ID2; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X07; while(TI==0); TI=0; SBUF=0X0c; while(TI==0); TI=0; ID1=pageID;ID2=pageID〉>8; SBUF=ID2; while(TI==0); TI=0; SBUF=ID1; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=1; while(TI==0); TI=0; summaf=0x15+ID1+ID2; sum[0]=summaf; sum[1]=summaf>〉8; SBUF=sum[1]; while(TI==0); TI=0; SBUF=sum[0]; while(TI==0); TI=0; for(i=0;i〈9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<<8)+sum[0]; } voidSFG_identify()//自动验证指纹录图像+生成特征+搜索 { uchari,ID1,ID2; SBUF=0xef; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0XFF; while(TI==0); TI=0; SBUF=0X01; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; SBUF=0X03; while(TI==0); TI=0; SBUF=0X11; while(TI==0); TI=0; SBUF=0X00; while(TI==0); TI=0; summaf=0x15; SBUF=summaf;//校验和 while(TI==0); TI=0; for(i=0;i<9;i++) { while(RI==0); RI=0;} while(RI==0); RI=0; querenma=SBUF; while(RI==0); RI=0; ID1=SBUF; while(RI==0); RI=0; ID2=SBUF; while(RI==0); RI=0; while(RI==0); RI=0;//得分 while(RI==0); RI=0; sum[1]=SBUF; while(RI==0); RI=0; sum[0]=SBUF; summas=(sum[1]<〈8)+sum[0]; //PageID=ID1; PageID=(ID1<〈8)+ID2; } voidshuazhiwen() { ucharIDs1,IDs2,IDs3; LcmClearTXT(); PutStr(1,2,”请按指纹"); SFG_identify(); while(querenma==2) SFG_identify(); if(querenma==0) { LcmClearTXT(); PutStr(1,2,”门已打开"); IDs1=PageID/100; IDs2=PageID/10%10; IDs3=PageID%10; PutStr(2,1,"编号为: "); WriteCommand(0x8D);//指定第三行显示位置 WriteData(0x30+IDs1); WriteData(0x30+IDs2); WriteData(0x30+IDs3); jidianqi=0; delay(2500); jidianqi=1; } elseif(querenma==9) { LcmClearTXT(); PutStr(1,1,”没搜索到指纹”); PutStr(2,1,”请重新刷指纹"); } else { LcmClearTXT(); PutStr(1,1,”接收包出错”); } delay(2000); //while(Keycan()==0); } voidaddfinger() { ucharIDa1,IDa2,IDa3; LcmClearTXT(); PutStr(1,2,”请按指纹”); SFG_getimage(); while(querenma! =0) SFG_get
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指纹 密码锁 主程序