📄 电子密码锁.c
字号:
#include <reg51.h>
#include <string.h>
#include <intrins.h>
#include <VIIC_C51.h>
#define uchar unsigned char
#define uint unsigned int
#define KEY P1
#define DISP P0
#define null1 '\0'
//**********************************
sbit LED=P2^0; //密码正确点亮
sbit LED1=P2^1; //密码错误点亮
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
uchar key;
uchar shuzi;
uchar statet;
uchar input_mima[9];
uchar mima[9]={0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F};
uchar k;
uchar kk;
uchar tab[13]={0x00,0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x5e};
//***********************************
void delay(uint i);
void delay_right(void);
void delay_wrong(void);
void init_main(void);
void main(void);
void get_key(void);
void change_mima(void);
void calc_disp(uchar array[9],uchar n);
void clear_arry(uchar *p,uchar n); //
void sendbyte(void);
void readbyte(void);
//***********************************
void delay(uint i) //
{
while(--i);
}
//void delay1(double i) //
//{
// while(kk=0)
// {i--; if(kk=1) continue; }
//}
//***********************************
void init_main(void) // 初始化子程序
{
DISP=0;
LED=0;
LED1=0;
// key_value=0;
k=0;
clear_arry(input_mima,9);
// clear_arry(mima,9);
}
//***********************************
void sendbyte(void)
{
if((ISendStr(0x00,0x00,input_mima,8))!=1) statet=3;
}
//***********************************
void readbyte(void)
{
if((IRcvStr(0x01,0x00,mima,8))!=1) statet=3;
}
//***********************************
void main(void)
{uchar lock=0;
init_main();
statet=0;
//readbyte();
while(1)
{
get_key();
//delay1(1200000);
while(kk==1)
{
kk=0;
if (statet==0)
{
if(key!=0x00 && key!=0x39 && key!=0x5e)
{
input_mima[k]=key;
if(k<8) k++;
else
k=0;
}
if(key==0x5e)
{
if(strcmp(input_mima,mima)==0)
{statet=1;
delay_right();
init_main();
}
else
{delay_wrong();
lock++;
if(lock<3)
statet=0;
else statet=2;
init_main();
}
}continue;
}
if(statet==1)
{
if(key==0x39)
{
delay_right();
change_mima();
}continue;
}
}calc_disp(input_mima,8);
}
}
//***********************************
void change_mima(void)
{ //uchar xin_mima[9];
uchar new_mima[9];
uchar confirm_mima[9];
uchar xianshi[9];
uint state1=0, state2=0, state3=0;
uint l=0,m=0,n=0,i;
for(i=0;i<=8;i++) xianshi[i]=null1;
while(statet)
{
get_key();
while(kk==1)
{kk=0;
if (state1==0 && state2==0 && state3==0)
{ if(key!=0x00 && key!=0x39 && key!=0x5e)
{ input_mima[l]=key;
xianshi[l]=key;
if(l<8) l++;
}
if(key==0x5e)
{delay_right();state1=1;for(i=0;i<=8;i++) xianshi[i]=null1;
}continue;
}
if (state1==1 && state2==0 && state3==0)
{
if(key!=0x00 && key!=0x39 && key!=0x5e)
{ new_mima[m]=key;
xianshi[m]=key;
if(m<8) m++;
}
if(key==0x5e)
{ delay_right();state1=1; state2=1; for(i=0;i<=8;i++) xianshi[i]=null1;
}continue;
}
if (state1==1 && state2==1 && state3==0)
{
if(key!=0x00 && key!=0x39 && key!=0x5e)
{ confirm_mima[n]=key;
xianshi[n]=key;
if(n<8) n++;
}
if(key==0x5e)
{ state1=1;state2=1;state3=1; }continue;
}
}
while(state1==1 && state2==1 && state3==1)
{
if(strcmp(input_mima,mima)==0 && strcmp(new_mima,confirm_mima)==0)
{for(i=0;i<8;i++)
input_mima[i]=new_mima[i];
// sendbyte();
// done1();
state1=1;state2=0;state3=1;statet=0;
delay_right();
}
else { state1=1;state2=0;state3=1;statet=0;for(i=0;i<=9;i++) input_mima[i]=null1;delay_wrong();}
continue;
}//continue;
calc_disp(xianshi,8);
}
}
//***********************************
void delay_right(void)
{ uchar m;
for(m=10;m>0;m--)
{
LED=1;
delay(2000);
delay(2000);
LED=0;
delay(2000);
delay(2000);
}
}
//***********************************
void delay_wrong(void)
{ uchar m;
for(m=10;m>0;m--)
{
LED1=1;
delay(2000);
delay(2000);
LED1=0;
delay(2000);
delay(2000);
}
}
//***********************************
void get_key(void)
{
KEY=0xfe; // p1=1111 1110
if(!P14)
{
delay(200);
if(!P14)
{
while(!P14);
key=tab[8];
// key_value=7;
kk=1;
}
}
if(!P15)
{
delay(200);
if(!P15)
{
while(!P15);
key=tab[9];
// key_value=8;
kk=1;
}
}
if(!P16)
{
delay(200);
if(!P16)
{
while(!P16);
key=tab[10];
// key_value=9;
kk=1;
}
} KEY=0xfd; //p1 1111 1101
if(!P14)
{
delay(200);
if(!P14)
{
while(!P14);
key=tab[5];
// key_value=4;
kk=1;
}
}
if(!P15)
{
delay(200);
if(!P15)
{
while(!P15);
key=tab[6];
// key_value=5;
kk=1;
}
}
if(!P16)
{
delay(200);
if(!P16)
{
while(!P16);
key=tab[7];
// key_value=6;
kk=1;
}
}
KEY=0xfb; //p1 1111 1011
if(!P14)
{
delay(200);
if(!P14)
{
while(!P14);
key=tab[2];
// key_value=1;
kk=1;
}
}
if(!P15)
{
delay(200);
if(!P15)
{
while(!P15);
key=tab[3];
// key_value=2;
kk=1;
}
}
if(!P16)
{
delay(200);
if(!P16)
{
while(!P16);
key=tab[4];
// key_value=3;
kk=1;
}
}/* if(!P17)
{
delay(200);
if(!P17)
{
while(!P17);
init_main();
}
}
*/
KEY=0xf7;
if(!P14)
{
delay(200);
if(!P14)
{
while(!P14);
//statet=0;
init_main();
// kk=1;
}
}
if(!P15)
{
delay(200);
if(!P15)
{
while(!P15);
key=tab[1];
// key_value=0;
kk=1;
}
}
if(!P16)
{
delay(200);
if(!P16)
{
while(!P16);
key=tab[12];
kk=1;
}
}
if(!P17)
{
delay(200);
if(!P17)
{
while(!P17);
key=tab[11];
kk=1;
}
}
}
//***********************************
void clear_arry(uchar *p,uchar n)
{ uchar j;
for(j=0;j<=n;j++,p++)
*p=null1;
}
//***********************************
void calc_disp(uchar array[9],uchar n)
{
uchar leddisp[9];
uchar i;
for(i=0;i<n;i++)
leddisp[i]=array[i];
i=0;
for(i=0;i<8;i++)
{switch(i)
{case 0:{P22=0;P23=0;P24=0;}break;
case 1:{P22=1;P23=0;P24=0;}break;
case 2:{P22=0;P23=1;P24=0;}break;
case 3:{P22=1;P23=1;P24=0;}break;
case 4:{P22=0;P23=0;P24=1;}break;
case 5:{P22=1;P23=0;P24=1;}break;
case 6:{P22=0;P23=1;P24=1;}break;
case 7:{P22=1;P23=1;P24=1;}break;
default : break;
}
P0=leddisp[i];
delay(50);
}
}
//***********************************
//***********************************
//***********************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -