51单⽚机实现密码锁(有掉电保护功能)
简介:
所⽤单⽚机型号为"STC89C52",⽤到的模块有AT24C02、LCD1602、矩阵键盘和独⽴键盘、led灯和蜂鸣器。
主要实现的功能:
可以模拟⽇常⽣活中的密码锁,密码长度为8位,烧录成功后没有初始密码,需要先设置⼀个初始密码。初始密码设置成功后,通过再次输⼊设置的密码即可开锁。在掉电后重新上电,设置的密码不变。开锁成功后可进⾏密码的修改和对led灯的控制。
云南虫谷剧情具体的现象:
烧录成功后,按下初始密码设置键,显⽰屏会出现"Set Password"的字样,在输⼊初始密码时,led灯会逐个亮起,表⽰输⼊密码的位数。输⼊完成后按下储存键,字样消失,led灯全灭,表⽰设置成功。在开锁时,密码的输⼊现象和上边⼀样,如果输⼊正确,蜂鸣器长鸣3s,并有"Password Right"字样;如果输⼊错误,蜂鸣器短鸣三次,显⽰"Password Wrong"字样,可重新进⾏密码的输⼊。开锁成功后,可控制三个不同的流⽔灯展⽰和密码的修改。修改密码时,如果修改成功,会出现"Password Resetted"字样。劝学篇
密码锁按键⽰意图:
0——1——2——3
4——5——6——7
8——9——CO——CP
IN——IM——IM——IM
T1——T2——T3——RE
(CO=储存键,CP=检验密码是否正确键,IN=初始密码设置键,IM=空闲键,T1,T2,T3=流⽔灯控制键,RE=修改密码键)
操作时的按键顺序:
设置初始密码:
苹果13粉版多被男性购买先按下IN键,然后进⾏8次数字键的输⼊,最后按下CO键,完成。
输⼊密码开锁:
先进⾏8次数字键的输⼊,然后按下CO键,最后按下CP键,完成。(若开锁成功,则进⾏下边操作,如果不成功,则重复此步骤。)
流⽔灯控制:
直接按T1,T2,T3键实现流⽔灯的效果(每个流⽔灯按⼀次演⽰⼀次,不循环。)
修改密码:
先进⾏8位数字键的输⼊,然后按下CO键,最后按下RE键,完成。
源代码展⽰:
#include<reg52.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit Beep=P2^3;
sbit SDA=P2^0;
sbit SCL=P2^1;
sbit RS=P3^5;//命令端
sbit RW=P3^6;//读写端
sbit EN=P3^4;//使能端
uchar a[8]={0};//临时数组
uchar b[8]={0};//储存输⼊密码的数组
uchar c[8]={0};//储存设置密码的数组
uchar t=0;
uchar wei=0;//临时数组标志位
uchar flbg=0;//密码正确标志位
uchar flag=0;//输⼊密码标志位
uchar fldg=0;//密码输⼊完成标志位
uchar flcg=0;//修改密码标志位
uchar fleg=1;//设置初始密码标志位
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
void display2()
{
uchar i,temp;
P1=0XFE;
for(i=0;i<7;i++)
{
temp=P1;
P1=_crol_(temp,1); delay(200);
}//8
P1=0XFE&0X7F;
temp=0xfe;
for(i=0;i<6;i++)
{
temp=_crol_(temp,1); P1=temp&0x7f; delay(200);
}//7
P1=0xfe&0x3F;
temp=0xfe;
for(i=0;i<5;i++)
{
temp=_crol_(temp,1); P1=temp&0x3f; delay(200);
}//6
P1=0XFE&0X1f;
temp=0xfe;
for(i=0;i<4;i++)
{
temp=_crol_(temp,1); P1=temp&0x1f; delay(200);
}//5
P1=0XFE&0X07;
temp=0xfe;
for(i=0;i<3;i++)
{
temp=_crol_(temp,1); P1=temp&0x07; delay(200);
暑假实践报告3000字}//4
P1=0XFE&0X03;
temp=0xfe;
for(i=0;i<2;i++)
{
temp=_crol_(temp,1); P1=temp&0x03; delay(200);
}//3
P1=0XFE&0X01;
temp=0xfe;
for(i=0;i<1;i++)
{
temp=_crol_(temp,1); P1=temp&0x01; delay(200);
}//2
P1=0x00;
delay(200);
}
uchar temp,i;
P1=0x7e;//1 8
temp=0xfe;
for(i=0;i<7;i++)
{
P1=0x7e;
P1=P1&temp;
delay(200);
temp=_crol_(temp,1); }
for(i=0;i<7;i++)
{
最近怎么突然让储备物资P1=0x7e;
P1=P1&temp;
delay(180);
temp=_cror_(temp,1); }
//1
P1=0xbd;
temp=0xfd;
for(i=0;i<5;i++)
{
P1=0xbd;
P1=P1&temp;
delay(200);
temp=_crol_(temp,1); }
for(i=0;i<5;i++)
{
P1=0xbd;
P1=P1&temp;
delay(180);
temp=_cror_(temp,1); }
//2
P1=0XDB;
temp=0xfb;
for(i=0;i<3;i++)
{
P1=0XDB;
P1=P1&temp;
delay(200);
temp=_crol_(temp,1); }
for(i=0;i<3;i++)
{
P1=0XDB;
P1=P1&temp;
delay(180);
temp=_cror_(temp,1); }
P1=0XE7;
}
void display3()
{
P1=0XFE;
delay(300);
P1=(~P1)|0X7E; delay(300);
P1=0XFC;
delay(300);
P1=(~P1)|0X3C;
P1=0XF8;
delay(300);
P1=(~P1)|0X18;
delay(300);
P1=0xf0;
delay(300);
P1=~P1;
实习简历模板delay(300);
P1=0xf0;
delay(300);
P1=~P1;
delay(300);
P1=0XF1;
delay(300);
P1=(~P1)|0X81;
delay(300);
P1=0XF3;
delay(300);
P1=(~P1)|0XC3;
delay(300);
P1=0XF7;
delay(300);
P1=(~P1)|0XE7;
delay(300);
}
/********LCD1602********/
void Read_Busy()//读状态
{
uchar busy;
P0=0XFF;
RS=0;
RW=1;
do
{
EN=1;
busy=P0;
EN=0;
}while(busy&0x80);
}
void Write_cmd(uchar cmd)//写指令{
Read_Busy();
RS=0;
RW=0;
P0=cmd;
EN=1;
EN=0;//触发信号
RS=1;//进⾏复位从⽽不影响矩阵键盘 RW=1;
EN=1;
}
void Write_dat(uchar dat)//写数据
{
Read_Busy();
RS=1;
RW=0;
P0=dat;
EN=1;
EN=0;//触发信号
RS=1;//进⾏复位从⽽不影响矩阵键盘 RW=1;
EN=1;
void LCD1602Init()
{
Write_cmd(0x38);//设置显⽰模式Write_cmd(0x0c);//单纯开显⽰
Write_cmd(0x01);//数据指针清零
}
void LCDdata1()
{
Write_cmd(0x80|0x02);//Set Password Write_dat(0x53);
Write_cmd(0x80|0x03);
Write_dat(0x65);
Write_cmd(0x80|0x04);
Write_dat(0x74);
Write_cmd(0x80|0x05);
Write_dat(0x20);
Write_cmd(0x80|0x06);
Write_dat(0x50);
Write_cmd(0x80|0x07);
Write_dat(0x61);
Write_cmd(0x80|0x08);
Write_dat(0x73);
Write_cmd(0x80|0x09);
Write_dat(0x73);
Write_cmd(0x80|0x0a);
Write_dat(0x77);
Write_cmd(0x80|0x0b);
Write_dat(0x6f);
Write_cmd(0x80|0x0c);
Write_dat(0x72);
Write_cmd(0x80|0x0d);
Write_dat(0x64);
}
void LCDdata2()//"Password Right"
{
Write_cmd(0x80|0x01);
Write_dat(0x50);
Write_cmd(0x80|0x02);
Write_dat(0x61);
Write_cmd(0x80|0x03);
Write_dat(0x73);
Write_cmd(0x80|0x04);
Write_dat(0x73);
Write_cmd(0x80|0x05);
Write_dat(0x77);
Write_cmd(0x80|0x06);
Write_dat(0x6f);
Write_cmd(0x80|0x07);
Write_dat(0x72);
Write_cmd(0x80|0x08);
Write_dat(0x64);
Write_cmd(0x80|0x09);
Write_dat(0x20);
Write_cmd(0x80|0x0a);
Write_dat(0x52);
Write_cmd(0x80|0x0b);
Write_dat(0x69);
Write_cmd(0x80|0x0c);
Write_dat(0x67);
Write_cmd(0x80|0x0d);
Write_dat(0x68);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论