标题:
接上次密码锁 两次密码不正确 自动锁 单片机源程序
[打印本页]
作者:
朝朝1
时间:
2021-1-14 11:32
标题:
接上次密码锁 两次密码不正确 自动锁 单片机源程序
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P2^5;
sbit key=P3^4;
unsigned char KeyPro();
unsigned char num1;
unsigned char code mi[]={1,2,3,4};
bit Flag;
//?????,??????
void delayms(unsigned int xms)
{
unsigned i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void Read_Busy()
{
uchar busy;
P0 = 0xff;
RS = 0;
RW = 1;
do
{
EN = 1;
busy = P0;
EN = 0;
}while(busy & 0x80);
}
//?LCD1602??????
void Write_Cmd(uchar cmd)
{
Read_Busy();//???
RS = 0;
RW = 0;
P0 = cmd;
EN = 1;
EN = 0;
}
//???????
void Write_Dat(uchar dat)
{
Read_Busy();
RS = 1;
RW = 0;
P0 = dat;
EN = 1;
EN = 0;
}
void charter(unsigned char x,unsigned char y,unsigned char dat)
{
if(y==0)
{
Write_Cmd(0x80+x);
}
else
{
Write_Cmd(0xc0+x);
}
Write_Dat( dat);
}
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
Write_Cmd(0x80 + x);
}
else
{
Write_Cmd(0xC0 + x);
}
while (*s)
{
Write_Dat( *s);
s ++;
}
}
void lcdinit()
{
Write_Cmd(0x38);
Write_Cmd(0x08); /*????*/
Write_Cmd(0x01); /*????*/
Write_Cmd(0x06); /*????????*/
Write_Cmd(0x0C); /*????????*/
}
void main()
{
unsigned char a[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
unsigned char i,num,j,b;
unsigned char temp[4];
lcdinit();
LCD_Write_String(0,0,"secret code:1234");
LCD_Write_String(0,1,"input password");
while(1)
{
num=KeyPro();
if(num!=0xff)
{
if(i==0)
{
LCD_Write_String(0,1," ");
}
if(i<4)
{
temp[i]=num;
charter(0+i,1,'0'+num); [/i][i] //charter(0+i,1,'0'+num); 这里可用‘*’ 代替[/i][i]
}
i++;
if(i==5)
{
i=0;
Flag=1;
for(j=0;j<4;j++)
{
Flag=Flag&&(temp[j]==mi[j]);
if(Flag)
{
LCD_Write_String(0,1,"right open");
}
else
{
LCD_Write_String(0 ,0,"wrong retry ");
LCD_Write_String(0,1," ");
if(b<4)
{
temp[b]=num;
if(b==0)
{
LCD_Write_String(0,1," ");
charter(0+b,1,'0'+num); [/b][/i]
[i] //charter(0+i,1,'0'+num); 这里可用‘*’ 代替[/i][i][b]
}
}
b++;
if(b==5)
{
b=0;
Flag=1;
for(j=0;j<4;j++)
{
Flag=Flag&&(temp[j]==mi[j]);
if(Flag)
{
LCD_Write_String(0,1,"right open");
}
else
{
LCD_Write_String(0 ,0,"no chance");
LCD_Write_String(0 ,1,"wait police");
while(1)
{
P1=0x0f;
}
}
}
}
}
}
}
}
}
}
unsigned char KeyScan(void) //??????,?????????
{
unsigned char temp,num;//???????
P3=0x0f; //??????0
temp=P3&0x0f; //?????
if(temp!=0x0f) //?????????
{
delayms(10); //??
if((P3&0x0f)!=0x0f)
{
temp=P3&0x0f; //?????
P3=temp|0xf0; //???????
num=P3&0xf0; //?????
while((P3&0xf0)!=0xf0);//???????
return(temp+num);//????????
}
} //????
}
/*
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:num1=0;break;//0 ??????????????
case 0x7d:num1=1;break;//1
case 0x7b:num1=2;break;//2
case 0x77:num1=3;break;//3
case 0xbe:num1=4;break;//4
case 0xbd:num1=5;break;//5
case 0xbb:num1=6;break;//6
case 0xb7:num1=7;break;//7
case 0xde:num1=8;break;//8
case 0xdd:num1=9;break;//9
case 0xdb:num1=10;break;//a
case 0xd7:num1=11;break;//b
case 0xee:num1=12;break;//c
case 0xed:num1=13;break;//d
case 0xeb:num1=14;break;//e
case 0xe7:num1=15;break;//f
default:return 0xff;break;
}
}
*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 0;break;//0 ??????????????
case 0x7d:return 1;break;//1
case 0x7b:return 2;break;//2
case 0x77:return 3;break;//3
case 0xbe:return 4;break;//4
case 0xbd:return 5;break;//5
case 0xbb:return 6;break;//6
case 0xb7:return 7;break;//7
case 0xde:return 8;break;//8
case 0xdd:return 9;break;//9
case 0xdb:return 10;break;//a
case 0xd7:return 11;break;//b
case 0xee:return 12;break;//c
case 0xed:return 13;break;//d
case 0xeb:return 14;break;//e
case 0xe7:return 15;break;//f
default:return 0xff;break;
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1