基于keil4和Proteus810的电子密码锁的设计

发布时间:199 阅读次数:199

  关于电子密码锁,生活中可以说是随处可见,但第一次做密码锁,我还是挺兴奋的。废话不多说,直接上干货。

  这里就用到了Proteus。我们需要知道电子密码锁都需要什么——按键、电容、AT89C51 、ULN2003A、晶振、单极性步进电机、7段六位共阴极数码管 、电阻、有源蜂鸣器、二极管、电源、底线、导线若干,这些都是将要用到的。

  (2)用3位数码管组成了显示电路提示信息,当输入密码时,只显示“-”;

  (3)设置了修改密码的功能,当密码位输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则开锁(继电器控制或电机控制);

  经典的51单片机,其中各个引脚的功能虽然在我这个课题里面不是都要用到的,但学习单片机肯定是都要知道滴,忘了也没事,翻翻书还是能想起来滴,我就是这么过来的(╥﹏╥)。

  AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体一起构成自激振荡器。

  石英晶体振荡电路对外接电容C1和C2虽没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度,一般电容使用30pF±10pF,这里我们用的是33pF的电容。

  本次设计我们用的是手动复位。RC构成微分电路,在接电瞬间,产生一个微分脉冲,其宽度若大于2个机器周期,AT89C51型单片机将复位,为保证微分脉冲宽度足够大,这里取22μF电容、1KΩ电阻。若按下复位键,则C3通过R5充电,R6两端电压接近Vcc,产生的高电平时间足以使单片机复位。

  我们用的是矩阵键盘,如图8所示,通过计算按键的行数和列数来确定按键的位置。此方法不仅可以节省AT89C51的接口,而且在软件编程时也很方便,可以按键部署更多的功能。按键0-9就是我们输入的密码键,ENTER是确认键,CANCEL是取消键,CHANGE是修改密码键,B、C、E键是尚未开发利用的按键。

  为了满足输入密码时防偷窥的功能,在输入密码时,数码管显示器只会显示“—”。通过这样的方式,可以有效地提高密码的安全性。本次采用的是六位的数码管,如图7所示。

  在实际用途中,电子锁会通过步进电机的顺逆时针旋转来控制开锁和关锁。此次我们用的是以ULN2003A为基础的六位八拍步进电机,如图8所示。

  我们通过编程设置,在输入次数小于5的情况下可以继续输入密码,一旦输入次数大于或等于5次就会自动报警,这时蜂鸣器就会响。如图9所示。

  这里我们使用了keil4,当然直接用Proteus的编码界面也是可以的。这两个电脑软件都有编写C语言和汇编语言的能力。这一部分主要是写代码,最主要的还是先要有个思路。

  我们写了延时函数、键盘识别函数、确认键函数、取消键函数、开关锁函数、报警函数、键盘按动确认函数、修改密码函数、点亮数码管函数,这些函数的完成有助于我们模块化地把他们组装到主函数里面,避免代码混乱。

  写到这儿基本就完成了,在整个过程中,需要我们去不停地调试,讨论方案。从最初没有思路,到最后给电子锁装备了基本的功能和拓展的功能(天知道我们经历了什么......▄█▀█●)。最后很感谢我的队友黄和队友张,正是有了他们,我得以在这个过程中做得很充实,也很快乐。