• 大小: 113KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: 其他
  • 标签: 51单片机  

资源简介

基于51单片机的电子密码锁+仿真,欢迎大家下载参考,本人亲自调试的

资源截图

代码片段和文件信息

#include
#include 
sbit drive=P3^7;
unsigned char count=0pw[6]={101010101010}cipher[6]={654321}INT[6]={101010101010};
unsigned ssuper[7]= {1314520};
unsigned char code tab[]=\
{0xc00xf90xa40xb00x990x920x820xf80x800x90~0x400XFF~0x71~0x77~0x39~0x79~0x3E~0x30~0x78};
unsigned char  Flag=0have; 
unsigned int t=0;  
unsigned char keypress();
void delay(unsigned int j);
void display(unsigned char *sx);
void button();

int main()
{
while(1)
button();
return 0;
}
void button()
{
unsigned char keyNumi=0k=0;
display(&pwcount);
if(!count)
   {
if(++t==1000)t=0; 
if((pw[5]==10 )&& (t<500))
pw[0]=11;
else if((pw[5]==10) && (t>500))
pw[0]=10;
}
keyNum=keypress(); if(keyNum==‘n‘)return;
if ((count<=5) && (keyNum!=10 && keyNum!=11  ))
{
have=pw[1];
pw[1]=pw[0];
pw[0]=keyNum;
INT[count++]=keyNum;
}   
else
{
if (keyNum==10 && count)
{
 if(count==1 || count==2)
 { pw[0]=pw[1];pw[1]=10;INT[--count]=10; }
 else if(count>=3)
 { pw[0]=pw[1];pw[1]=INT[count-3];INT[--count]=10;  }
}
else if (keyNum==11 && count==6)
{
if(INT[0]==cipher[0] && INT[1]==cipher[1] && INT[2]==cipher[2] \
 &&INT[3]==cipher[3] && INT[4]==cipher[4] && INT[5]==cipher[5]) //face  对
  {
    y:drive=0; 
pw[0]=12;pw[1]=13;pw[2]=14;pw[3]=15;
count=4;Flag=0;
}
else   //fault   错
{
drive=1;
pw[0]=12;pw[1]=13; pw[2]=16;pw[3]=17; pw[4]=18;
count=5; Flag++;

}
while(keyNum!=10||Flag==3){ 
display(&pwcount);keyNum=keypress();
i=keyNum==‘n‘?0:keyNum==10?0:keyNum==11?0:1;
if(i && (Flag==3))
{
if(ssuper[k]==keyNum )
{ k++;if(k==6)goto y;
}
else k=0;
}
  }
for(i=0;i<=5;i++)
INT[i]=pw[i]=10;count=0;drive=1;k=0;
}


void display(unsigned char *sx) //数码显示子函数
{
unsigned char wk=0x01;
  if(x>=1)x-=1;
for (;s<=&pw+x;s++)
{
P0=tab[*s];
P2=wk;
delay(10); //30个机器周期
P2=0X00;
delay(5); //15个机器周期
wk=_crol_(wk1);
}
}
unsigned char keypress() //按键处理子函数
{
unsigned char abcnum=‘n‘;
P1=0xf0;
if (P1!=0xf0)  //判断是否有按键按下
{
delay(50); //延时去抖 //300个机器周期
if (P1!=0xf0) //再次判断是否有按键按下
{
a=P1;
P1=0x0f; //列作输出,行作输入
b=P1; //读取行值并和列值合并
c=a|b; //num=c==0xee?1:c==0xde?2:c==0xbe?3:c==0xed?4:c==0xdd?5:c==0xeb?7:c==0xdb?8:c==0xbb?9:c==0xe7?0:c==0xd7?10:c==0xb7?11:‘n‘;
switch (c)
{
case 0xee:num=1; break;
case 0xde:num=2; break;
case 0xbe:num=3; break;
case 0xed:num=4; break;
case 0xdd:num=5; break;
case 0xbd:num=6; break;
case 0xeb:num=7; break;
case 0xdb:num=8; break;
case 0xbb:num=9; break;
case 0xe7:num=0; break;
case 0xd7:num=10; break;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-06-07 12:36  电子密码锁888\
     文件      140720  2017-06-05 09:08  电子密码锁888\012.DSN
     文件        1052  2017-06-05 09:08  电子密码锁888\012.PWI
     文件       22235  2017-06-07 12:36  电子密码锁888\012.pdsprj
     文件         872  2017-06-07 12:36  电子密码锁888\012.pdsprj.jyh.yh.workspace
     文件        7121  2017-06-07 12:35  电子密码锁888\0526
     文件        9296  2017-06-07 12:35  电子密码锁888\0526.LST
     文件        9398  2017-06-07 12:35  电子密码锁888\0526.M51
     文件        8743  2017-06-07 12:35  电子密码锁888\0526.OBJ
     文件        3260  2017-06-07 12:35  电子密码锁888\0526.c
     文件        2888  2017-06-07 12:35  电子密码锁888\0526.hex
     文件          25  2017-06-07 12:35  电子密码锁888\0526.lnp
     文件       18390  2017-06-07 12:37  电子密码锁888\0526.plg
     文件       60596  2017-06-07 12:36  电子密码锁888\0526.uvopt
     文件       13224  2017-05-27 07:50  电子密码锁888\0526.uvproj
     文件       60596  2017-06-07 12:35  电子密码锁888\0526_uvopt.bak
     文件           0  2017-05-26 17:04  电子密码锁888\0526_uvproj.bak
     文件       22239  2017-06-07 12:36  电子密码锁888\Backup Of 012.pdsbak
     文件      126664  2017-06-02 11:50  电子密码锁888\Last Loaded 012.DBK

评论

共有 条评论