if(set3) { set3=0; closeLock(); } if(set4) { set4=0; clearFinger();//删除所有指纹 } if(set5) { set5= 0; chkBat(); openLock();//直接开锁 } IRopenLock(); } } /////////按钮扫描//////////// void btnScan() { count++; if(count==10) { count=0; if(btnOut==0)Delay(50); //消抖 while(btnOut==0&&B_IR_Press==0) //是外部按键 并且不是红外按键 { btnPressSum++; Delay(10); if(btnPressSum>200) { break; } } if(btnPressSum>200) { set3=1; } elseif(btnPressSum>10) { set1=1; } btnPressSum=0; if(btnIn==0)Delay(50); while(btnIn==0) { btnPressSum++; Delay(10); if(btnPressSum>200) { break; } } if(btnPressSum>200) { set3=1; } elseif(btnPressSum>10) { set5=1; } btnPressSum=0; if(btnSet==0)Delay(50); while(btnSet==0) { btnPressSum++; Delay(10); if(btnPressSum>200) { break; } } if(btnPressSum>200) { set4=1; } elseif(btnPressSum>50) { set2=1; } btnPressSum=0; } } void openLock() { buzz(123);t=0; open= 1;close=0 ; LedG = 1; Delay(500); //避开启动电流 do { if(t>48000)break; //如果6秒还未检测到电机堵转 停电机 current= FliterADC(CurrPin); // putbyte(current); ADC 电机电流 }while (current<MAX); open= 0; LedG = 0; locked = 0; buzz(123); Delay(2000); close= 1; Delay(300);//回锁舌 close= 0; } void fingerOpenLock() { //current=0; LedR=1; t=0; if(指纹验证通过()==1) // { openLock(); } else { buzz(4); } LedR=0; } void closeLock() { t=0; if(!locked) { locked=1; close=1;open=0;LedG=1; buzz(321); Delay(500); do { if(t>48000)break; current= FliterADC(CurrPin); // putbyte(current); //ADC 电机电流 }while (current<MAX); close=0;LedG=0; } buzz(321); } void getFinger() //录入指纹 { LedR=1; j=0;t=0; //耗时长的操作,定时器清零,避免1分钟后休眠 if(Num==0) //如果指纹库为空,直接录入指纹 { master=1; } else { chkMaster(); } if(master) //管理员 { LedG=1; master=0; j=0; while(j<5) { if(写入指纹==1) { j++; Num++; buzz(3); } } if(写入指纹==1); { buzz(321); } } LedG=0;LedR=0; } void clearFinger() //清除所有指纹 { LedR=1;j=0; buzz(1);buzz(1);buzz(1);buzz(1);buzz(1);buzz(1); //清指纹提醒 chkMaster(); if(master) { LedG=1; master=0; if((清空指纹)) // 清空指纹 { buzz(3); } else { buzz(1); } } LedG=0;LedR=0; } void chkMaster() //验证管理员 { while(!master) { if(j==5) { //LedG=1;LedR=1; buzz(4); break; } if(管理员验证成功) //管理员验证成功 { master=1; buzz(123); } else { buzz(4); } j++; } } void chkBat() //检查电池电压 { P1ASF= 0x00; // //带隙电压 5V 为0x40(64) 3.3V 为0x 5F 3.0v为0x68 mcuV=FliterADC(0); // putbyte(mcuV); if( mcuV>0x5f ) //mcu工作电压=5*64/带隙电压测量值 { buzz(4);buzz(4);buzz(4);buzz(4);buzz(4);buzz(4); } else { buzz(1); } P1ASF= 0x18; //电池电压经20K 10K分压 ,测量点电压为电池电压1/3 2s锂电放电下限为6.6v ,分压后为2.2v //电池电压通道ADC的结果与mcu工作电压的关系 电池电压= mcu电压*adc测量值/256 //2.2v 时 adc/mcuv应>1.76 batV= FliterADC(batVPin); batV=batV*100/mcuV; // putbyte(batV); if(batV<BatLow) { (责任编辑:admin) |