找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机汇编语言密码锁Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. ;R3——输入错误次数
  2. ;R4——密码个数
  3. ;R7——输入密码暂存
  4. ;R2——键值暂存
  5. ;R6——延时参数
  6.                 ORG                00H
  7.                 SJMP        START
  8.                 ORG                0BH
  9. START:       
  10.                                         ;设置初始密码
  11. PASSWORD:
  12.                 MOV                R4,#08H                                ;密码个数8个
  13.                 MOV                R0,#40H                                ;密码暂存区
  14.                 MOV                A,#00H                                ;初始密码0,1,2,3,4,5,6,7
  15. PASSNEXT:
  16.                 MOV                @R0,A
  17.                 INC                R0
  18.                 INC                A
  19.                 DJNZ        R4,PASSNEXT
  20. MLOOP:
  21.                 CLR                P3.0                                ;锁合
  22.                 SETB        P3.1                                ;锁开
  23.                 SETB        P3.2                                ;键有效
  24.                 SETB        P3.3                                ;错误
  25.                 SETB        P3.4                                ;报警
  26.                 MOV                R3,#03H                                ;错误次数3次
  27.                                                    ;输入密码
  28. GETPW:        MOV                R4,#08H                                ;密码个数
  29.                 MOV                R0,#30H                                ;输入密码暂存区
  30. AGAIN:        ACALL        KEY                                        ;输入密码
  31.                 CJNE        A,#0AH,CONTIUE                  ;按确认键无效
  32.                 SJMP        AGAIN
  33. CONTIUE:
  34.                 MOV                @R0,A
  35.                 ACALL        DISPLED                                ;按键有效显示
  36.                 INC        R0
  37.                 DJNZ        R4,AGAIN
  38. AGAIN1:        ACALL        KEY                                        ;按确认键
  39.                 CJNE        A,#0AH,AGAIN1
  40.                 ACALL        DISPLED                                 ;按确认键有效显示
  41.                 ACALL        COMP                                ;比较密码
  42.                 SETB        P3.0                                ;息锁合
  43.                 CLR                P3.1                                ;开锁
  44. WAIT:        MOV                C,P3.5                                ;是否重新上锁
  45.                 JNC                MLOOP                                ;主循环
  46.                 ACALL        TestKey                                ;是否有键按下,是否修改密码
  47.                 JZ                WAIT                                ;累加器的内容为0,则转移;否则执行下一条指令
  48.                 ACALL        CHPSW                                ;修改密码子程序
  49.                 SJMP        WAIT
  50. COMP:        MOV                R4,#08H
  51.                 MOV                R0,#30H
  52. AGAI:        MOV                50H,@R0                                ;取输入密码到50H
  53.                 MOV                A,R0
  54.                 ADD                A,#010H                                ;40H
  55.                 MOV                R0,A
  56.                 MOV                A,@R0                                ;取密码
  57.                 MOV                B,A
  58.                 MOV                A,R0
  59.                 SUBB        A,#010H                                ;30H
  60.                 MOV                R0,A
  61.                 MOV                A,B
  62.                 CJNE        A,50H,ONCEMORE                   ;比较
  63.                 INC                R0
  64.                 DJNZ        R4,AGAI
  65.                 RET                                                        ;正确返回
  66. ONCEMORE:
  67.                 CLR                P3.3                                ;输入错误
  68.                 MOV                R6,#0FFH
  69.                 ACALL        DELAY
  70.                 MOV                R6,#0FFH
  71.                 ACALL        DELAY
  72.                 SETB        P3.3
  73.                 DJNZ        R3,GETPW                        ;3次错误输入
  74.                 CLR                P3.4                                ;声报警
  75.                 CLR                P3.3                                ;光报警
  76. W:                SJMP        W
  77.                                                  ;修改密码子程序
  78. CHPSW:        MOV                R4,#07H
  79.                 MOV                R0,#48H
  80.                 ACALL        KEY
  81.                 CJNE        A,#0AH,CONTIUE2                  ;按确认键无效
  82.                 LJMP        WAIT                                ;返回
  83. CONTIUE2:
  84.                 MOV                @R0,A
  85.                 INC                R0
  86.                 ACALL        DISPLED                                ;按键有效显示
  87. ANOTHER:
  88.                 ACALL        KEY
  89.                 CJNE        A,#0AH,CONTIUE3                 ;按确认键无效
  90.                 SJMP        ANOTHER
  91. CONTIUE3:
  92.                 MOV                @R0,A
  93.                 INC                R0
  94.                 ACALL        DISPLED                                ;按键有效显示
  95.                 DJNZ        R4,ANOTHER
  96. AGAIN2:        ACALL        KEY                                        ;按确认键
  97.                 CJNE        A,#0AH,AGAIN2
  98.                 ACALL        DISPLED                                ;按确认键有效显示
  99.                 MOV                R4,#08H
  100.                 MOV                R0,#40H
  101.                 MOV                R1,#48H
  102. CHANGE:                                                                ;确认后修改密码
  103.                 MOV                A,@R1
  104.                 MOV                @R0,A
  105.                 INC                R0
  106.                 INC                R1
  107.                 DJNZ        R4,CHANGE
  108.                 RET
  109.                                                        ;按键有效显示
  110. DISPLED:
  111.                 CLR                P3.2                                ;按键有效显示
  112.                 MOV                R6,#80H
  113.                 ACALL        DELAY
  114.                 SETB        P3.2
  115.                 RET
  116. TestKey:MOV                P1,#0FH
  117.                 MOV                A,P1                                ;读入键状态
  118.                 CPL                A                                        ;累加器取
  119.                 ANL                A,#0F0H
  120.                 RET
  121.                                                   ;取键值子程序,阵列式键盘
  122. KEY:        MOV                P1,#0F0H
  123.                 MOV                A,P1
  124.                 CJNE        A,#0F0H,K11
  125. K10:        AJMP        KEY
  126. K11:        MOV                R6,#02H
  127.                 ACALL        DELAY
  128.                 MOV                P1,#0F0H
  129.                 MOV                A,P1
  130.                 CJNE        A,0F0H,K12
  131.                 SJMP        K10
  132. K12:        MOV                B,A
  133.                 MOV                P1,#0FH
  134.                 MOV                A,P1
  135.                 CJNE        A,#0FH,K122
  136. K121:        AJMP        KEY
  137. K122:        MOV                R6,#02H
  138.                 ACALL        DELAY
  139.                 MOV                P1,#0FH
  140.                 MOV                A,P1
  141.                 CJNE        A,0FH,K13
  142.                 AJMP        K10
  143. K13:       
  144.                 ANL                A,B
  145.                 MOV                B,A
  146.                 MOV                R1,#11
  147.                 MOV                R2,#0
  148.                 MOV                DPTR,#K1TAB
  149. K14:        MOV                A,R2
  150.                 MOVC        A,@A+DPTR
  151.                 CJNE        A,B,K16
  152.                 MOV                P1,#0FH
  153. K15:        MOV                A,P1
  154.                 CJNE        A,#0FH,K15
  155.                 MOV                R6,#02H
  156.                 ACALL        DELAY
  157.                 MOV                A,R2
  158.                 RET
  159. K16:        INC                R2
  160.                 DJNZ        R1,K14
  161.                 AJMP        K10
  162.                                                             ;键码表
  163. K1TAB:        DB                81H,41H,21H,11H
  164.                 DB                82H,42H,22H,12H
  165.                 DB                84H,44H,24H
  166.                                                 ;延时子程序
  167. DELAY:        MOV                R6,#80H
  168. AA1:        MOV                R5,#0F8H
  169. AA:                NOP
  170.                 NOP
  171.                 DJNZ        R5,AA
  172.                 DJNZ        R6,AA1
  173.                 RET
  174.                 END
复制代码

所有资料51hei提供下载:
222222.rar (41.37 KB, 下载次数: 54)

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

使用道具 举报

沙发
ID:563461 发表于 2019-6-17 14:18 | 只看该作者
你好,你照着你这个自己做了一个,为什么51单片机输出全是高电平呀
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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