1.实验任务
根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,直到没有按键按下3种后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。
2.系统板上硬件连线
(1).把“单片机系统”区域中的p0.0/ad0用导线连接到“音频放大模块”区域中的spk in端子上;
(2).把“音频放大模块”区域中的spk out端子接喇叭和;
(3).把“单片机系统”区域中的p2.0/a8-p2.7/a15用8芯排线连接到“四路静态数码显示”区域中的任一个abcdefgh端子上;
(4). 把“单片机系统“区域中的p1.0用导线连接到“八路发光二极管模块”区域中的l1端子上;
(5). 把“单片机系统”区域中的p3.6/wr、p3.7/rd用导线连接到“独立式键盘”区域中的sp1和sp2端子上;
3.程序设计内容
(1). 密码的设定,在此程序中密码是固定在程序存储器rom中,假设预设的密码为“12345”共5位密码。
(2). 密码的输入问题:
由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。
(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。
5.c语言源程序
#i nclude
unsigned char code ps[]={1,2,3,4,5};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char pslen=9;
unsigned char templen;
unsigned char digit;
unsigned char funcount;
unsigned char digitcount;
unsigned char psbuf[9];
bit cmpflag;
bit hibitflag;
bit errorflag;
bit rightflag;
unsigned int second3;
unsigned int aa;
unsigned int bb;
bit alarmflag;
bit exchangeflag;
unsigned int cc;
unsigned int dd;
bit okflag;
unsigned char oka;
unsigned char okb;
void main(void)
{
unsigned char i,j;
p2=dispcode[digitcount];
tmod=0x01;
th0=(65536-500)/256;
tl0=(65536-500)%6;
tr0=1;
et0=1;
ea=1;
while(1)
{
if(cmpflag==0)
{
if(p3_6==0) //function key
{
for(i=10;i》0;i--)
for(j=248;j》0;j--);
if(p3_6==0)
{
if(hibitflag==0)
{
funcount++;
if(funcount==pslen+2)
{
funcount=0;
cmpflag=1;
}
p1=dispcode[funcount];
}
else
{
second3=0;
}
while(p3_6==0);
}
}
if(p3_7==0) //digit key
{
for(i=10;i》0;i--)
for(j=248;j》0;j--);
if(p3_7==0)
{
if(hibitflag==0)
{
digitcount++;
if(digitcount==10)
{
digitcount=0;
}
p2=dispcode[digitcount];
if(funcount==1)
{
pslen=digitcount;
templen=pslen;
}
else if(funcount》1)
{
psbuf[funcount-2]=digitcount;
}
}
else
{
second3=0;
}
while(p3_7==0);
}
}
}
else
{
cmpflag=0;
for(i=0;i
{
if(ps[i]!=psbuf[i])
{
hibitflag=1;
i=pslen;
errorflag=1;
rightflag=0;
cmpflag=0;
second3=0;
goto a;
}
}
cc=0;
errorflag=0;
rightflag=1;
hibitflag=0;
a: cmpflag=0;
}
}
}
void t0(void) interrupt 1 using 0
{
th0=(65536-500)/256;
tl0=(65536-500)%6;
if((errorflag==1) && (rightflag==0))
{
bb++;
if(bb==800)
{
bb=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
p0_0=~p0_0;
}
aa++;
if(aa==800)
{
aa=0;
p0_1=~p0_1;
}
second3++;
if(second3==6400)
{
second3=0;
hibitflag=0;
errorflag=0;
rightflag=0;
cmpflag=0;
p0_1=1;
alarmflag=0;
bb=0;
aa=0;
}
}
if((errorflag==0) && (rightflag==1))
{
p0_1=0;
cc++;
if(cc《1000)
{
okflag=1;
}
else if(cc《2000)
{
okflag=0;
}
else
{
errorflag=0;
rightflag=0;
hibitflag=0;
cmpflag=0;
p0_1=1;
cc=0;
oka=0;
okb=0;
okflag=0;
p0_0=1;
}
if(okflag==1)
{
oka++;
if(oka==2)
{
oka=0;
p0_0=~p0_0;
}
}
else
{
okb++;
if(okb==3)
{
okb=0;
p0_0=~p0_0;
}
}
}
}
1.实验任务
用4×4组成0-9数字键及确认键。
用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用led发光二极管亮一秒钟做为提示,同时发出“叮咚”声;若密码不正确,禁止按键输入3秒,同时发出“嘀、嘀”报警声;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。
2.电子密码锁电路原理图
图4.33.1
3.系统板上硬件连线
(1)。把“单片机系统”区域中的p0.0-p0.7用8芯排线连接到“动态数码显示”区域中的abcdefgh端子上。
(2)。把“单片机系统“区域中的p2.0-p2.7用8芯排线连接到“动态数码显示”区域中的s1s2s3s4s5s6s7s8端子上。
(3)。把“单片机系统”区域中的p3.0-p3.7用8芯排线连接到“4×4行列式键盘”区域中的r1r2r3r4c1c2c3c4端子上。
(4)。把“单片机系统”区域中的p1.0用导线连接到“八路发光二极管模块”区域中的l2端子上。
(5)。把“单片机系统”区域中的p1.7用导线连接到“音频放大模块”区域中的spk in端子上。
(6)。把“音频放大模块”区域中的spk out接到喇叭上。
4.程序设计内容
(1).4×4行列式键盘识别技术:有关这方面内容前面已经讨论过,这里不再重复。
(2).8位数码显示,初始化时,显示“p ”,接着输入最大6位数的密码,当密码输入完后,按下确认键,进行密码比较,然后给出相应的信息。在输入密码过程中,显示器只显示“8.”。当数字输入超过6个时,给出报警信息。在密码输入过程中,若输入错误,可以利用“del”键删除刚才输入的错误的数字。
(3).4×4行列式键盘的按键功能分布图如图4.33.2所示:
图4.33.2
5.电子密码锁c语言源程序
#i nclude
unsigned char ps[]={1,2,3,4,5};
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,
0x00,0x40,0x73,0xff};
unsigned char dispbuf[8]={18,16,16,16,16,16,16,16};
unsigned char dispcount;
unsigned char flashcount;
unsigned char temp;
unsigned char key;
unsigned char keycount;
unsigned char pslen=5;
unsigned char getps[6];
bit keyoverflag;
bit errorflag;
bit rightflag;
unsigned int second3;
unsigned int aa,bb;
unsigned int cc;
bit okflag;
bit alarmflag;
bit hibitflag;
unsigned char oka,okb;
void main(void)
{
unsigned char i,j;
tmod=0x01;
th0=(65536-500)/256;
tl0=(65536-500)%6;
tr0=1;
et0=1;
ea=1;
while(1)
{
p3=0xff;
p3_4=0;
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=10;i》0;i--)
for(j=248;j》0;j--);
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=p3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=7;
break;
case 0x0d:
key=8;
break;
case 0x0b:
key=9;
break;
case 0x07:
key=10;
break;
}
temp=p3;
p1_1=~p1_1;
if((key》=0) && (key《10))
{
if(keycount《6)
{
getps[keycount]=key;
dispbuf[keycount+2]=19;
}
keycount++;
if(keycount==6)
{
keycount=6;
}
else if(keycount》6)
{
keycount=6;
keyoverflag=1;//key overflow
}
}
else if(key==12)//delete key
{
if(keycount》0)
{
keycount--;
getps[keycount]=0;
dispbuf[keycount+2]=16;
}
else
{
keyoverflag=1;
}
}
else if(key==15)//enter key
{
if(keycount!=pslen)
{
errorflag=1;
rightflag=0;
second3=0;
}
else
{
for(i=0;i
{
if(getps[i]!=ps[i])
{
i=keycount;
errorflag=1;
rightflag=0;
second3=0;
goto a;
}
}
errorflag=0;
rightflag=1;
a: i=keycount;
}
}
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=p3;
temp=temp & 0x0f;
}
keyoverflag=0;//?????????
}
}
p3=0xff;
p3_5=0;
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=10;i》0;i--)
for(j=248;j》0;j--);
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=p3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=4;
break;
case 0x0d:
key=5;
break;
case 0x0b:
key=6;
break;
case 0x07:
key=11;
break;
}
temp=p3;
p1_1=~p1_1;
if((key》=0) && (key《10))
{
if(keycount《6)
{
getps[keycount]=key;
dispbuf[keycount+2]=19;
}
keycount++;
if(keycount==6)
{
keycount=6;
}
else if(keycount》6)
{
keycount=6;
keyoverflag=1;//key overflow
}
}
else if(key==12)//delete key
{
if(keycount》0)
{
keycount--;
getps[keycount]=0;
dispbuf[keycount+2]=16;
}
else
{
keyoverflag=1;
}
}
else if(key==15)//enter key
{
if(keycount!=pslen)
{
errorflag=1;
rightflag=0;
second3=0;
}
else
{
for(i=0;i
{
if(getps[i]!=ps[i])
{
i=keycount;
errorflag=1;
rightflag=0;
second3=0;
goto a4;
}
}
errorflag=0;
rightflag=1;
a4: i=keycount;
}
}
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=p3;
temp=temp & 0x0f;
}
keyoverflag=0;//?????????
}
}
p3=0xff;
p3_6=0;
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=10;i》0;i--)
for(j=248;j》0;j--);
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=p3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=1;
break;
case 0x0d:
key=2;
break;
case 0x0b:
key=3;
break;
case 0x07:
key=12;
break;
}
temp=p3;
p1_1=~p1_1;
if((key》=0) && (key《10))
{
if(keycount《6)
{
getps[keycount]=key;
dispbuf[keycount+2]=19;
}
keycount++;
if(keycount==6)
{
keycount=6;
}
else if(keycount》6)
{
keycount=6;
keyoverflag=1;//key overflow
}
}
else if(key==12)//delete key
{
if(keycount》0)
{
keycount--;
getps[keycount]=0;
dispbuf[keycount+2]=16;
}
else
{
keyoverflag=1;
}
}
else if(key==15)//enter key
{
if(keycount!=pslen)
{
errorflag=1;
rightflag=0;
second3=0;
}
else
{
for(i=0;i
{
if(getps[i]!=ps[i])
{
i=keycount;
errorflag=1;
rightflag=0;
second3=0;
goto a3;
}
}
errorflag=0;
rightflag=1;
a3: i=keycount;
}
}
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=p3;
temp=temp & 0x0f;
}
keyoverflag=0;//?????????
}
}
p3=0xff;
p3_7=0;
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=10;i》0;i--)
for(j=248;j》0;j--);
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=p3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=0;
break;
case 0x0d:
key=13;
break;
case 0x0b:
key=14;
break;
case 0x07:
key=15;
break;
}
temp=p3;
p1_1=~p1_1;
if((key》=0) && (key《10))
{
if(keycount《6)
{
getps[keycount]=key;
dispbuf[keycount+2]=19;
}
keycount++;
if(keycount==6)
{
keycount=6;
}
else if(keycount》6)
{
keycount=6;
keyoverflag=1;//key overflow
}
}
else if(key==12)//delete key
{
if(keycount》0)
{
keycount--;
getps[keycount]=0;
dispbuf[keycount+2]=16;
}
else
{
keyoverflag=1;
}
}
else if(key==15)//enter key
{
if(keycount!=pslen)
{
errorflag=1;
rightflag=0;
second3=0;
}
else
{
for(i=0;i
{
移动机器人视觉定位方法的研究
非隔离型降压式电源设计分析
机器学习特征选择常用算法
浅析重锤式料位计常见故障及产生的原因
机器人伴侣正在降临人间,2045年人类将有可能与机器人结婚?
如何实现电子密码锁的设计
RFID超高频在服装行业的信息化管理
探究新阶段我国锂电行业对机器人的需求状况
语音模块能给智能家居风扇带来什么?
智能锁领域超低功耗WT2003H B005超声波ToF测距语音模块
新区企业拥抱“智造”引入物联网请来机器人
iPhone8手机将携手这款iPad登陆,满屏占比OLED屏
顺造双速冲击钻上架小米有品 售价249元
新海马S5到底如何?真的逆袭了吗?
激光+焦点监控技术在AR/VR眼镜焊接中的应用
纽约提出用无人机检查检筑物质量,想实现得修改法律
Linus Torvalds:Linux内核、社区多元化和开发者的未来
分析通过降低摩擦以改善乘用车的燃油耗及混合动力车的可能性
物联网技术明显对我们的帮助有哪一些
鲲鹏920和麒麟990的区别