buzz(4);buzz(1); buzz(4); buzz(1);buzz(4); buzz(1); } else { buzz(1); } } voidIRopenLock() //红外密码验证 { if(B_IR_Press) //有IR键按下 { LedR=1;Delay(10);LedR=0;buzz(1); B_IR_Press= 0; if(B_IrUserErr==0) { if(IR_code==ClocsKey) //如果是锁门按键 锁门 { set3=1; } else { buf[k++]=IR_code; } } if(k==passLen) { for(k=0;k<passLen;k++) { if(buf[k]!=passChar[password[k]]) break; } if(k==passLen) { set5=1; // putbytes("OK "); } else { buzz(4);buzz(4); } k=0; } } } //////////////////////////////////// /*蜂鸣器函数 */ //////////////////////////////////// void fengming(uint x,uint y) //x时长,y音调 { uinti; for(i=0;i<x;i++) { buzzer=~buzzer; Delayus(y); } } void buzz(uint No) { uinti=0; uintshengdiao[]={478,0451,0426,0402,0372}; //中1DO 523Hz0956us 中2RE 578 0842 中3M 659 0759 //高1DO 10460478 #DO# 1109 0451 高2RE 1175 0426 #2RE#1245 0402 高3M 1318 0372 switch(No) { case1: for(i=0;i<3;i++) { fengming(62,478); } break; case2: for(i=0;i<3;i++) { fengming(70,426); } break; case3: for(i=0;i<3;i++) //高5SO 15680319 { fengming(94,319); } break; case4: for(i=0;i<3;i++) { fengming(31,956);//低音do 错误用 Delayus(1000); } break; case123: for(i=0;i<5;i++) { fengming(30000/shengdiao,shengdiao); Delayus(500); } break; case321:for(i=5;i>0;i--) { fengming(30000/shengdiao,shengdiao); Delayus(500); } } buzzer=0; //关蜂鸣器,省电 } void Timer0() interrupt 1 using 1 //调用定时器0,自动重装载模式 { IR_RX_HT6121(); //红外接收函数//125um t++; if(t>480000) //一分钟休眠 脚位清零 灭灯 关供电模块 { t=0;power=1;LedR=0;LedG=0;open=0;close=0 ; buzzer =0; PCON|= 0x02; } // TL0= 0x00; //设置定时初值 // TH0= 0x28; //设置定时初值 } void int0(void) interrupt 0 { PCON&= 0xEF; power=0; //供电模块上电 } void int1(void) interrupt 2 { PCON &= 0xEF; //按钮2唤醒 power=0; //指纹模块上电 } /* 这个函数无效果 void soft_reset(void) { ((void (code *) (void)) 0x0000) (); } */, ***************************************/ 由于版权问题,不公开指纹模块驱动,和调用函数,如果购买模块厂家会提供。 如果要降低造价,可以不使用指纹模块,只使用红外密码开锁。 下面是红外接收子程序,STC官网提供,稍做修改,即可使用 随便找个遥控器,先通过以下程序读取设备码各按键码,然后挑两个放入password数组,就可以用这个遥控器开锁了。 (责任编辑:admin) |