/*---------------------------------------------------- 程序设计:胥学辰--------绝对原创! 设计时间:2011-10-10----2011-10-11! 写程序用时一天,调程序用时一天,累死我了!不过也算很有收获啊! 程序功能: 1:输入密码对比,正确则解锁,错误则开始60秒倒计时。 2:用户必须在60秒内重新输入正确的密码,否则锁定键盘。 3:如果用户在60秒内没有输入正确密码,则键盘锁定。 4:如果用户在60秒内输入错误密码超过3次,即使没有记时完成也会锁定键盘。 5:在键盘锁定的同时,报警器会发出警报声。 6:以上操作过程中会有文字提示输入密码正确还是错误。 7:在键盘锁定的情况下,只有在24小时后键盘解锁,才再有上述的输入机会。 8:用户在使用过程中如果希望修改密码,可以进入密码修改界面,先输入原始密码。 9:如果输入与原始密码相同,则跳出新密码设置界面,用户可设置新密码。 10:在设置过程中的输入功能与前面的密码输入功能相同。 11:同样修改密码的输入错误次数有限,否则键盘锁死。 12:密码输入正确可以返回欢迎界面,重新开始。 13:初始密码见说明书,用户应该立即重新设置密码。 本程序的完整版本下载地址:http://www.51hei.com/f/12686412.rar 键盘功能说明: 1:输入密码:15键。 2:修改密码:14键。 3:确定输入:13键。 4:重新输入:12键。 5:返回欢迎界面:11键。 注:返回按键只有在密码输入正确的情况下使用。 ------------------------------------------------------*/ #include<reg52.h> #define uchar unsigned char #define uint unsigned int uint i3; uchar t=15,time,s,g,num,temp,key1=1,Js,Js1,Js2,Js3; uchar flag=1,flag1=1,flag2,flag3,j,j1,j2,Mi,Mi1,Mi2,m,m1=19891111,m2,m3; uchar time1,time2,time3,time4,time5,flag4,flag5=2,flag6,flag7; uchar xdata Sm,Sm1,Sm2,Sm3; sbit rs=P2^6; sbit rw=P2^5; sbit en=P2^7; sbit psb=P2^2; uchar xdata dat_Sz_Ma[8]={0,0,0,0,0,0,0,0}; uchar xdata dat_Sz_Mi[8]={0,0,0,0,0,0,0,0}; uchar xdata dat_YS[8]={0,0,0,0,0,0,0,0}; uchar xdata dat_SR[8]={0,0,0,0,0,0,0,0}; uchar xdata table_Ts[]="15:输入密码!14:重置密码!13:确定输入!12:重新输入!密:码:密码输入错误!密码输入无误!剩余输入几次:键盘恢复:密码重置成功!输入新密码!"; void delay(uint z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar key() { P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:num=0;Mi=1; break; case 0xde:num=1;Mi=1; break; case 0xbe:num=2;Mi=1; break; case 0x7e:num=3;Mi=1; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; // k=0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xed:num=4;Mi=1; break; case 0xdd:num=5;Mi=1; break; case 0xbd:num=6;Mi=1; break; case 0x7d:num=7;Mi=1; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb:num=8;Mi=1; break; case 0xdb:num=9;Mi=1; break; case 0xbb:num=10;Mi=0; break; case 0x7b:num=11;Mi2=0; break; } // k=1; while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xf7; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7:num=12;Mi=0; break; case 0xd7:num=13;Mi=0; break; case 0xb7:num=14;Mi1=0; break; case 0x77:num=15;Mi1=0; break; } // k=1; while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } return num; } void write_com(uchar com) { rs=0; rw=0; P0=com; delay(5); en=1; delay(5); en=0; } void write_data(uchar dat) { rs=1; rw=0; P0=dat; delay(5); en=1; delay(5); en=0; } void write_gw_sw(uchar add,uchar gs) { uchar gw,sw; gw=gs%10; sw=gs/10; write_com(0x80+add); write_data(0x30+sw); write_data(0x30+gw); } void write_fz_mz(uchar add,uchar fm) { uchar xdata gw,sw,bw,qw,ww,ws; gw=fm%10; sw=fm/10%10; bw=fm/100%10; qw=fm/1000%10; ww=fm/10000%10; ws=fm/100000%10; write_com(0x80+add); write_data(0x30+ws); write_data(0x30+ww); write_data(0x3a); write_data(0x30+qw); write_data(0x30+bw); write_data(0x3a); write_data(0x30+sw); write_data(0x30+gw); //write_data(0x3a); } void write_SR(uchar add) { uchar i; write_com(0x80+add); for(i=0;i<j;i++) { write_data(0x2a); } } void write_SZ_Ma(uchar add) { uchar i; write_com(0x80+add); for(i=0;i<j1;i++) { write_data(0x2a); } } void write_SZ_Mi(uchar add) { uchar i; write_com(0x88+add); for(i=0;i<j2;i++) { write_data(0x2a); } } void Tishi_password(uchar add,uchar i1,uchar i2) { uchar i; write_com(add); for(i=i1;i<i2;i++) { write_data(table_Ts[i]); } } void Remain_JS(uchar add) { write_com(add); write_data(0x30+4-Js); } void Remain_JS2(uchar add) { write_com(add); write_data(0x30+4-Js2); } void Yt() { if(flag4==1) { write_com(0x01); TR1=0; TR0=0; flag4=0; flag=1; flag1=1; flag2=0; flag3=0; flag5=2; flag6=0; t=15; m=0; m2=0; m3=0;; j=0; j1=0; j2=0; Js=0; Js1=0; Js2=0; time1=0; time2=0; time3=0; time4=0; P1=0x0f; } } void enter_shuru_Ma() { //key1=key(); if(key1<10&&Mi==1) { dat_SR[j]=key1; j++; Mi=0; m=m*10+dat_SR[j-1]; if(flag3==1) { j=0; m=0; Mi=1; flag3=0; time1=0; time2=0; time3=0; time4=0; write_com(0x01); write_com(0x82); } }write_SR(0x02); } void enter_shezhi_Ma() { //key1=key(); if(key1<10&&Mi==1) { dat_Sz_Ma[j1]=key1; j1++; Mi=0; m2=m2*10+dat_Sz_Ma[j1-1]; if(flag3==1) { j1=0; m2=0; Mi=1; flag3=0; write_com(0x01); write_com(0x82); } }write_SZ_Ma(0x02); } void enter_shezhi_Mi() { //key1=key(); if(key1<10&&Mi==1) { dat_Sz_Mi[j2]=key1; j2++; Mi=0; m3=m3*10+dat_Sz_Mi[j2-1]; if(flag3==1) { j2=0; m3=0; Mi=1; flag3=0; write_com(0x01); write_com(0x8A); } } write_SZ_Mi(0x02); } void anjian() { if(key1==15&&Mi1==0) { flag1=0; flag5=0; Mi1=1; } if(key1==14&&Mi1==0) { flag1=0; flag5=1; Mi1=1; } if(flag1==0) { if(key1==13&&Mi==0) { flag2=1; Mi=1; } if(key1==12) { flag3=1; } if(key1==11&&Mi2==0&&flag7==1) { flag4=1; Mi2=1; flag7=0; } } } void init() { TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; ET1=1; ET0=1; EA=1; psb=1; write_com(0x30); write_com(0x0e); write_com(0x01); write_com(0x80); } void main() { init(); P1=0x0f; while(1) { Yt(); if(Js1==1||Js>=4||Js2>=4) { TR0=0; TR1=1; Tishi_password(0x90,99,107); write_fz_mz(0x07+13,time5); } if(t!=0&&Js<4&&Js2<4&&Js3!=1) { key1=key(); anjian(); } if(flag==1&&flag1==1) { Tishi_password(0x80,0,13); Tishi_password(0x90,13,26); Tishi_password(0x88,26,39); Tishi_password(0x98,39,52); } if(flag5==1) { if(flag==1&&flag1==0) { write_com(0x01); flag=0; } if(flag==0&&flag1==0) { write_gw_sw(0x07,t); if(flag6==0) { enter_shezhi_Ma(); Tishi_password(0x80,52,56); } if(flag6==1) { write_SZ_Ma(0x02); Tishi_password(0x80,52,56); enter_shezhi_Mi(); Tishi_password(0x88,56,60); Tishi_password(0x90,121,132); if(flag2==1) { flag2=0; m1=m3; Tishi_password(0x98,108,121); for(i3=0;i3<500;i3++) delay(20000); flag4=1; } } } if(flag2==1||Js1==1) { Js1=0; flag2=0; if(m1==m2) { t=15; TR0=0; Js2=0; flag6=1; } else { Js2++; TR0=1; Tishi_password(0x88,60,73); Tishi_password(0x98,86,99); Remain_JS2(0x9f); } } } if(flag5==0) { if(flag==1&&flag1==0) { write_com(0x01); flag=0; } if(flag==0&&flag1==0) { enter_shuru_Ma(); Tishi_password(0x80,52,56); write_gw_sw(0x07,t); } if(flag2==1||Js1==1) { flag2=0; Js1=0; if(m==m1) { Js=0; flag7=1; t=15; TR0=0; P1=0xf0; Tishi_password(0x88,73,86); Tishi_password(0x98,86,99); Remain_JS(0x9f); } else { Js++; TR0=1; flag7=0; P1=0x00+Js; Tishi_password(0x88,60,73); Tishi_password(0x98,86,99); Remain_JS(0x9f); } } } } } void timer0() interrupt 1 using 0 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time++; if(time==20) { t--; time=0; } if(t==0) { Js1=1; t=0; TR0=0; Js=3; Js2=3; } } void timer1() interrupt 3 using 0 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time1++; if(time1==10) { time2++; time1=0; } if(time2==30) { time3++; time2=0; flag4=1; //Js3=1; //TR1=0; } /*if(time3==60) { time4++; time3=0; //flag4=1; } if(time4==24) { flag4=1; time4=0; }*/ time5=time2;//+time3*100;//+time4*10000; }