1.尝试使命 按照设定好的暗码,回收二个按键实现暗码的输入成果,当暗码输入正确之后,锁就打开,假如输入的三次的暗码不正确,就锁定按键3秒钟,同时发明报警声,直到没有按键按下3种后,才打开按键锁定成果;不然在3秒钟内仍有按键按下,就从头锁定按键3秒时刻并报警。 2.电路道理图
![diy电子密码锁设计](/uploads/allimg/130113/1S22M511_0.jpg)
3.体系板上硬件连线 (1).把“单片机体系”地区中的P0.0/AD0用导线毗连到“音频放大模块”地区中的SPK IN端子上; (2).把“音频放大模块”地区中的SPK OUT端子接喇叭和; (3).把“单片机体系”地区中的P2.0/A8-P2.7/A15用8芯排线毗连到“四路静态数码表现”地区中的任一个ABCDEFGH端子上; (4). 把“单片机体系“地区中的P1.0用导线毗连到“八路发光二极管模块”地区中的L1端子上; (5). 把“单片机体系”地区中的P3.6/WR、P3.7/RD用导线毗连到“独立式键盘”地区中的SP1和SP2端子上; 4.措施计划内容 (1). 暗码的设定,在此措施中暗码是牢靠在措施存储器ROM中,假设预设的暗码为“12345”共5位暗码。 (2). 暗码的输入题目: 因为回收两个按键来完成暗码的输入,那么个中一个按键为成果键,另一个按键为数字键。在输入进程中,起首输入暗码的长度,接着按照暗码的长度输入暗码的位数,直到全部长度的暗码都已经输入完毕;可能输入确认成果键之后,才气完成暗码的输入进程。进入暗码的判定较量处理赏罚状态并给出响应的处理赏罚进程。 (3).按键榨取成果:初始化时,是应承按键输入暗码,当有按键按下并开始进入按键辨认状态时,按键榨取成果被激活,但启动的状态在3次暗码输入不正确的环境下产生的。 5.C说话源措施 #include unsigned char code ps[]={1,2,3,4,5}; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; unsigned char pslen=9; unsigned char templen; unsigned char digit; unsigned char funcount; unsigned char digitcount; unsigned char psbuf[9]; bit cmpflag; bit hibitflag; bit errorflag; bit rightflag; unsigned int second3; unsigned int aa; unsigned int bb; bit alarmflag; bit exchangeflag; unsigned int cc; unsigned int dd; bit okflag; unsigned char oka; unsigned char okb; void main(void) { unsigned char i,j; P2=dispcode[digitcount]; TMOD=0x01; TH0=(65536-500)/256; TL0=(65536-500)%6; TR0=1; ET0=1; EA=1; while(1) { if(cmpflag==0) { if(P3_6==0) //function key { for(i=10;i>0;i--) for(j=248;j>0;j--); if(P3_6==0) { if(hibitflag==0) { funcount++; if(funcount==pslen+2) { funcount=0; cmpflag=1; } P1=dispcode[funcount]; } else { second3=0; } while(P3_6==0); } } if(P3_7==0) //digit key { for(i=10;i>0;i--) for(j=248;j>0;j--); if(P3_7==0) { if(hibitflag==0) { digitcount++; if(digitcount==10) { digitcount=0; } P2=dispcode[digitcount]; if(funcount==1) { pslen=digitcount; templen=pslen; } else if(funcount>1) { psbuf[funcount-2]=digitcount; } } else { second3=0; } while(P3_7==0); } } } else { cmpflag=0; for(i=0;i { if(ps[i]!=psbuf[i]) { hibitflag=1; i=pslen; errorflag=1; rightflag=0; cmpflag=0; second3=0; goto a; } } cc=0; errorflag=0; rightflag=1; hibitflag=0; a: cmpflag=0; }
} } void t0(void) interrupt 1 using 0 { TH0=(65536-500)/256; TL0=(65536-500)%6; if((errorflag==1) && (rightflag==0)) { bb++; if(bb==800) { bb=0; alarmflag=~alarmflag; } if(alarmflag==1) { P0_0=~P0_0; } aa++; if(aa==800) { aa=0; P0_1=~P0_1; } second3++; if(second3==6400) { second3=0; hibitflag=0; errorflag=0; rightflag=0; cmpflag=0; P0_1=1; alarmflag=0; bb=0; aa=0; } } if((errorflag==0) && (rightflag==1)) { P0_1=0; cc++; if(cc<1000) { okflag=1; } else if(cc<2000) { okflag=0; } else { errorflag=0; rightflag=0; hibitflag=0; cmpflag=0; P0_1=1; cc=0; oka=0; okb=0; okflag=0; P0_0=1; } if(okflag==1) { oka++; if(oka==2) { oka=0; P0_0=~P0_0; } } else { okb++; if(okb==3) { okb=0; P0_0=~P0_0; } } } }
(责任编辑:admin) |