简易电子密码锁设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简易电子密码锁设计
【摘要】本设计利用AT89S52单片机制作出一个简易的电子密码锁,其中包含了键盘输入模块、LED显示模块、密码对比模块、报警模块。该设计能完成数字开锁、密码错误提示、密码出错报警的功能。本设计成本较低,功能实用,同时拓展性强。
【关键词】AT89S52;单片机;矩阵式键盘;LED显示1引言
AT89S52是整个电路的核心,是输入与输出的联系部件。在此次设计中P0口既作为输入口也作为输出口,是一个分时复用的数据口。而P1口的P1.0—P1.2则作为7段数码管扫描的片选端及时钟脉冲控制端,P1.3—P1.5分别连接的是指示灯及扬声器。
键盘输入模块采用的是4*4矩阵式键盘。所谓的矩阵式键盘,就是通常所说的行列式键盘,它由4根行线和4根列线组成,按键位于行、列的交叉点上,行列分别接到按键的两端,4根列线分别通过4个上拉电阻按到高电平。无按键按下时列线处于高电平,当有键按下时交叉点的行、列线相通,列输出低电平则行线也为低电平。矩阵式键盘相对于独立按键而言,它节省了很多的I/O口。4*4键盘共16个按键,但此次设计仅用了0—9、取消、确认共12个键,其余4个键留为扩展其它功能之用。
{
switch(keyout)
{
case 10:
for (i=0;i<6;i )
{cs=0;
tabled1[i]=0;
tabma1[i]=0;}
break;
case 11:
cs=0;
for (i=0;i<6;i )
{
if (tabma[i]==tabma1[i]) l=l 1;
tabled1[i]=0;
if (key==tabkey[k])
{while(key==tabkey[k]);
return k;}
return 100;
}
void keycl() //按键处理及密码核对子程序
{
unsigned char keyout,i,l;
keyout=keyscan();
if (keyout!=100)
3软件设计
简易电子密码锁软件运用C语言进行程序设计,由主程序、LED显示程序、键盘扫描程序、键处理及密码校对程序四部分组成。主程序在将各个参数初化后一直工作在按键扫描----按键处理——密码校对——显示——是否报警的工作流程中。
LED显示采用的是动态扫描方式,先送位码后送字码将每个7段码轮流点亮,因为每片数码管的点亮时间相当短,利用人的眼睛惰性,展现在我们眼前的就是6个7段码同时显示。
显示模块采用6片的7段数码管显示。而单片机驱动数码管通常有静态显示和动态扫描两种方法,本设计采用动态扫描模式。在显示电路中利用2片的74ACT377MTC来控制6个数码管的位和字。如图1中所示的U2分别通过8个的限流电阻来分别控制7段数码管的a---dp各个字段码,而U3则通过6个的三极管控制每个7段码的位地址。U2的片选端由P1.0控制,U3的片选端由P1.1控制,两片的脉冲端接在一起由P1.2控制。
键盘扫描的方法采用线反查询法。具体的思路是:首先使行作为输入,使用单片机内部电阻上拉为高电平,列输出低电平,读行的状态。如果有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置行为输入,列输出低电平,读行的状态。最后根据行列的状态查表就可以知识是哪个键按下。
键处理及密码校对程序采用switch语句进行设计,若有按键按下时先识别按下的是第几个键,若是0-9的键则进行密码输入;当按下确认键则校对密码若密码正确LED1灯亮起,若密码错误则LED2灯亮起,连续3次密码错误扬声器报警;当按下取消键时将显示字码的RAM内容清零,同时次数CS也清零,为下次密码输入做好准备。
2硬件电路设计
简易电子密码锁硬件电路是整个设计最底层、最为基础也最为重要的部分。其主要以AT89S52单片机为核心,另外还有键盘输入模块、LED显示模块、扬声器报警模块等多个模块构成。如图1所示。
首先单片机采用的是美国ATMEL公司推出的一种低功耗、高性能的8位89S52单片机。片内带有一个8KB的Flash可编程、可擦除只读存储器(EPROM)和256字节内部RAM,可用于程序存储,不必外扩存储芯片。片内的Flash存储器允许在系统内改编程序或用常规的非易失性存储器编程器来编程。芯片采用CMOS工艺和ATMEL公司的高密度非易失性存储器技术,而且其输出引脚和指令系统都与MCS-51兼容,程序编写灵活简便,且具有较好扩展性和可移植性。
{
0,1,2,3,4,5
};
unsigned char tabma1[6];
void delay(unsigned char x)
{
unsigned char i;
for (i=0;i
}
void ledscan() //显示子程序
{
unsigned char scan,k;
scan=0xfe;
for (k=0;k<6;k )
}
if (l==6)
{ time=0;
l=0;
led1=0;
}
else
{
time=time 1;
led2=0;
}
break;
default:
tabled1[cs]=1;
tabma1[cs]=keyout;
cs=cs 1;
if (cs==6) cs=0;
break;
}
}
}
main()
{
cs=0;
time=0;
程序原代码:
#include
#define key P0
sbit led_cs1=P1^0;
sbit led_cs2=P1^1;
sbit led_cp=P1^2;
sbit led1=P1^3;
sbit led2=P1^4;
sbit speak=P1^5;
unsigned char time,cs;
unsigned char tabled[]=
{
key=scan;
led_cs1=1;
led_cs2=0;
led_cp=1;
led_cp=0;
key=tabled[tabled1[k]];
led_cs1=0;
led_cs2=1;
led_cp=1;
led_cp=0;
delay(120);
key=0xfwk.baidu.com;
led_cp=1;
led_cp=0;
scan=scan<<1|0x01;
}
}
unsigned charkeyscan()//键盘扫描子程序
{
unsigned char keyin,k;
key=0x0f;
keyin=key;
if (keyin==0x0f) return 100;
for (k=0;k<2;k ) ledscan();
key=keyin|0xf0;
for (k=0;k<12;k )
随着时代的发展,人们的生活水平逐步提高,同时安全意识也日益增强。传统的机械锁构造比较简单保密性不高,而电子密码锁保密性高,使用灵活性好,安全系数高,受到了很多人的亲柰。
本次设计的电子密码锁采用C语言进行软件设计,以及运用DXP 2004对硬件电路进行设计。要实现的功能是上电后,6位的7段数码管显示“888888”,输入密码时逐位显示“E”防止泄露密码。同时设有“取消”键,在输入密码过程中出现错输时可以清除屏幕。当密码正确时指示灯LED1亮起,当密码错误时LED2亮,如果连续3次输入密码错误时扬声器报警。以下从由硬件电路设计及软件程序设计两大部分进行分析。
led1=1;
led2=1;
speak=0;
while(1)
{
keycl();
ledscan();
if (time==3) speak=1;
}
}
{
0x80,0x8e
};
unsigned char tabled1[]=
{
0,0,0,0,0,0
};
unsigned char code tabkey[]=
{
0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
};
unsigned char tabma[]=
相关文档
最新文档