找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6172|回复: 2
打印 上一主题 下一主题
收起左侧

AT89C2051单片机组成的可修改密码的密码锁

[复制链接]
跳转到指定楼层
楼主
ID:262 发表于 2014-11-8 13:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       这款由AT89C2051单片机组成的可修改密码的密码锁是一种能防止多次试探密码的基于单片机的密码锁设计方案,根据用户的10条总体要求,给出了该单片机密码锁的硬件电路和软件程序,同时给出了单片机型号的选择、硬件设计、软件流程图、单片机存储单元的分配、汇编语言源程序及详细注释等内容。很多行业的许多地方都需要密码锁,但普通密码锁的密码容易被多次试探而破译。本文给出了一种能防止多次试探密码的密码锁设计方法,从而有效地克服了上述缺点。       硬件电路

       图1所示是笔者设计的一种密码锁电路。该密码锁主要 是以下10条特点:
     (1)总共可以设置8位密码,每位的取值范围为1~8。
     (2)用户可以自行设定和修改密码。
     (3)按每个密码键时都有声音提示。
     (4)若键入的8位开锁密码不完全正确,则报警5秒钟,以提醒他人注意。
     (5)开锁密码连续错3次要报警1分钟,报警期间输入密码无效,以防窃贼多次试探密码。
     (6)键入的8位开锁密码完全正确才能开锁,开锁时要有1秒的提示音。
     (7)电磁锁的电磁线圈每次通电5秒,然后恢复初态。
     (8)密码键盘上只允许有8个密码按键。锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的。
     (9)密码设定完毕后要有2秒的提示音。
     (10)成本低,硬件和软件都很简洁可靠,易于批量生产。
       图1 电磁锁原理图

  在图1所示电路中,P1口连接8个密码按键AN1~AN8,开锁 信号由P3.2输出,报警和提示音由P3.7输出。BL是用于报警与声音提示的喇叭,K是继电器控制电磁线圈。
       软件设计


  图2给出了该单片机密码锁电路的软件流程图。图中AA1~AA8以及START、SET、SAVE是程序中的标号,是为了理解程序而专门标在流程
图的对应位置的,分析程序时可以仔细对照参考。
        3.1 存储单元的分配
        该密码锁中RAM存储单元的分配方案如下:
        31H~38H:依次存放8位设定的密码,首位密码存放在31H单元;
        R0:指向密码地址;
        R2:已经键入密码的位数;
        R3:存放允许的错码次数3与实际错码次数的差值;
        R4至R7:延时用;
        00H:错码标志位。
        对于ROM存储单元的分配,由于程序比较短,而且占用的存储空间比较少,因此,在无特殊要求时,可以从0030H单元(其它地址也可以)开始存放主程序。
       源程序

       下面是该电子密码锁的软件源程序代码:
                 ORG 0000H
                 AJMP START
                 ORG 0030H
START:  ACALL BP
                 MOV R0,#31H
                 MOV R2,#8
SET:      MOV P1,#0FFH
                 MOV A,P1
                 CJNE A,#0FFH,L8
                 AJMP SET
L8:         ACALL DELAY
                 CJNE A,#0FFH,SAVE
                 A JMP SET
SAVE:    ACALL BP
                 MOV @R0A
                 INC R0
                 DJNZ R2,SET
                 MOV R5,#16
D2S:      ACALL BP
                 DJNZ R5,D2S
                 MOV R0,#31H
                 MOV R3,#3
AA1:      MOV R2,#8
AA2:      MOV P1,#0FFH
                 MOV A,P1
                 CJNE A,#0FFH, L9
                 AJMP AA2
                 L9 ACALL DELAY
                 CJNE A,#0FFH,AA3
                 AJMP AA2
AA3:       ACALL BP
                 CLRC
                 SUBB A, @R0
I                NC R0
                 CJNE A,#00H,AA4
                 AJMP AA5
AA4:      SETB 00H
AA5:      DJNZ R2,AA2
                 JB 00HAA6
                 CLR P3.5
                 L3 MOV R5,#8
                 ACALL BP
                 DJNZ R4,L3
                 MOV R3,#3
                 SETB P3.5
                 AJMP AA1
AA6:      DJNZ R3,AA7
                 MOV R5,#24
L5:          MOV R4,#200
L4:          ACALL BP
                 DJNZ R4,L4
                 DJNZ R5,L5
                 MOV R3,#3
AA7:      MOV R5,#40
                 ACALL BP
                 DJNZ R5,AA7
AA8:      CLR 00H
                 AJMP AA1
BP:         CLR P3.7
                 MOV R7,#250
L2:         MOV R6,#124
L1:         DJNZ R6,L1
                 CPL P3.7
                 DJNZ R7,L2
                 SETB P3.7
                 RET
                 DELAYMOV R7,#20
L7:            MOV R6,#125
L6:            DJNZ R6,L6
                 DJNZ R7,L7
                 RET
                 END

      若按键AN1~AN7分别代表数码1~7,按键AN0代表数码8。
      在没有键按下时,P1.0~P1.7全是高电平1,若某个键被按下,相应的口线就变为低电平0。
      假如设定的密码是61234578,当按键AN6被按下时,P1.6变为低电平,P1端口其余口线为高电平,此时从P1端口读入的数值为10111111,存到31H单元的密码值就是10111111,也就是BFH。依此类推,存到32H至38H单元的密码值分别是FDH、FBH、F7H、EFH、DFH、7FH、FEH。
       开锁时必须先按AN6,使从P1口读入的第一个密码值与31H单元存储的设定值相同,再顺序按AN1、AN2、AN3、AN4、AN5、AN7、AN0才能开锁。否则不能开锁,同时开始报警。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:99341 发表于 2017-4-6 10:17 | 只看该作者
这个不错,值得收藏
回复

使用道具 举报

板凳
ID:72088 发表于 2017-4-7 14:30 | 只看该作者
at2051没有EPROM,如何记忆密码,用户如何修改?应该加上24C02才对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表