找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5772|回复: 4
收起左侧

Proteus设计的51单片机汇编语言电子密码锁

[复制链接]
ID:261488 发表于 2017-12-14 13:40 | 显示全部楼层 |阅读模式
密码锁仿真图,源程序代码。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.jpg 0.png

单片机汇编语言源程序如下:
  1. ;===================================================
  2. ;名    称:电子密码锁
  3. ;作    者:小发
  4. ;日    期:2007年06月13日
  5. ;修改日期:2007年06月18日
  6. ;说    明:首先显示器提示输入密码,密码在12.5S内输入有效,
  7. ;         输入次三次错误报警10S,输入正确开门,7秒后返回初态
  8. ;         以上参数均可在主程序里设定,修改系统密码在程序的结尾
  9. ;===================================================

  10.         RS BIT P2.7
  11.         RW BIT P2.6
  12.         E BIT P2.5
  13.         ENTER BIT 22H.0
  14.         OPEN BIT P3.6
  15.         SPEAK BIT P3.7
  16.         PASSBUF EQU 40H
  17.         KEYNUMBER EQU 41H       ;存放识别后的按键号
  18.         ORG 0000H
  19.         AJMP MAIN
  20.         ORG 0003H
  21.         JMP KEY_INT
  22.         ORG 000BH
  23.         AJMP INTT0
  24.         ORG 001BH
  25.         AJMP INTT1
  26.         ORG 0030H
  27. ;========== 主程序开始 ==============
  28. MAIN:   MOV 30H,#07H          ;输入密码为7位  最高只可设15位
  29.         MOV 42H,#200         ;设定报警的时间,42H单元里的数*50MS
  30.         MOV 43H,#250          ;设定开门时间     14的倍数(实际上液晶显示器执行指令占用了时间,开门时间会比14*250MS大)
  31.         ;44H号单元存放输入错误的次数
  32.         ;45H为定时器0中断次数
  33.         ;46H为定时器1中断次数
  34.         MOV 47H,#250          ;输入密码时间设定,50MS倍数
  35.         MOV SP,#60H
  36.         CLR OPEN
  37.         CLR SPEAK              ;初始化输出设备
  38.         CLR ENTER              ;标志位初始化
  39.        
  40.         MOV TMOD,#11H          ;定时器工作方式2
  41.         MOV TH0,#3CH           ;初值50MS
  42.         MOV TL0,#0BH
  43.         MOV TH1,#3CH           
  44.         MOV TL1,#0BH
  45.         SETB EA
  46.         SETB ET0
  47.         SETB ET1
  48.         
  49.         MOV TCON,#00000000B     ;电平触发
  50. START:  MOV R0,30H
  51.         MOV R1,#31H
  52. SS1:        MOV @R1,#00H
  53.         INC R1
  54.         DJNZ R0,SS1            ;将输入密码缓冲单元清零
  55.         MOV P1,#0FH            ;初始化按键口
  56.         MOV R1,#31H             ;从31号单元开始存放按建输入的密码         
  57.         CLR 20H                 ;报警标志清零
  58.         CLR 21H                 ;密码超时标志
  59.         MOV 46H,#00H           ;超时后对定时器中断次数清零,便于下一轮重新计时
  60. INIT:   ACALL SELLCD            ;设定液晶工作方式
  61.         ACALL LINE1             ;在第一行显示
  62.         MOV DPTR,#MES_P         ;显示请输入密码
  63.         ACALL DISPLAY
  64.         setb EX0               ;开中断,允许键盘输入
  65. KEYIN:  JB  21H,ERR             ;超时转到错误程序
  66.         JNB ENTER,KEYIN         ;等待ENTER按下
  67.         CLR ENTER
  68.         clr EX0                ;密码输入完后锁定键盘
  69. ;当使用边沿触发时用上面的指令为什么禁止不了中断???
  70. ;========== 密码判断程序 ============
  71. COMP:            
  72.         MOV DPTR,#PASS
  73.         MOV R4,30H             ;密码的长度
  74.         MOV A,#0
  75.         MOV R1,#31H            
  76. LOOP:   MOV R5,A
  77.         MOVC A,@A+DPTR
  78.         MOV PASSBUF,A          ;取出系统设定的密码
  79.         MOV A,@R1              ;从31号单元开始取出输入的密码
  80.         CJNE A,PASSBUF,ERR     ;比较
  81.         MOV A,R5
  82.         INC A
  83.         INC R1                 ;取下一位
  84.         DJNZ R4,LOOP

  85. ;正确
  86. MATCH:  MOV A,#01H
  87.         ACALL ENABLE           ;清屏,光标复位
  88.         ACALL LINE1            ;从第一行开始显示
  89.         MOV DPTR,#MES_C
  90.         ACALL DISPLAY          ;显示"请进"
  91.         ACALL LINE2
  92.         MOV DPTR,#TAB_1
  93.         ACALL DISPLAY
  94.         SETB OPEN              ;开门
  95.         MOV 44H,#00H           ;输入错误次数清零
  96.         MOV R6,43H               
  97.         ACALL DELAY
  98.         CLR OPEN               ;复位
  99.         JMP START            
  100. ;错误
  101. ERR:    ACALL BACK
  102.         MOV R6,#03H
  103.         ACALL DELAY
  104.         ACALL BACK           ;输错提示音,鸣两下
  105.         MOV A,#01H
  106.         ACALL ENABLE
  107.         ACALL LINE1
  108.         MOV DPTR,#MES_E
  109.         ACALL DISPLAY       ;显示错误
  110.         MOV R6,#40H
  111.         ACALL DELAY         
  112.         INC  44H
  113.         MOV A,44H
  114.         CJNE A,#03H,EE0
  115. EE0:    JC  ERROUT        ;输错不到三次返回
  116.         MOV 44H,#00H        ;清零
  117.         ACALL WRANING       ;报警
  118. ERROUT: JMP START

  119. ;=========== 按键中断服务程序 ==========
  120. KEY_INT:push acc
  121.         push psw
  122.         clr ex0
  123.         acall delay10ms     ;延时消抖
  124.         SETB TR1            ;启动定时器
  125.         ACALL SMKEY         ;按键识别
  126.         MOV A,KEYNUMBER     ;返回按键号
  127.         ACALL BACK          ;按键发声
  128.         MOV R3,A
  129.         CJNE R3,#0BH,K1     ;ENTER是否按下
  130.         SETB ENTER
  131.         clr tr1             ;按下确认后关毕定时器
  132.         mov 46h,#00h        ;对中断次数清零
  133.         AJMP KEY_RTN
  134. K1:     ADD A,#30H          ;将按键号转换为ASCⅡ码
  135.         MOV @R1,A           ;将输入的密码存入缓冲单元
  136.         INC R1              ;修改地址
  137.         
  138.         ACALL WRDATA        ;输入一位显示一个"*"
  139.         
  140. KEY_RTN:pop psw
  141.         pop acc
  142.         setb ex0
  143.         RETI


  144. ;=========== 按键识别程序 ==========
  145. SMKEY:   
  146.          MOV A,P1
  147.          ANL A,#0FH
  148. WKEY:    MOV B,A               ;反转法查询  
  149.          MOV P1,#0F0H
  150.          NOP
  151.          MOV A,P1
  152.          ANL A,#0F0H
  153.          ORL A,B
  154.          MOV P1,#0FH         ;还原P1口初态
  155.          CJNE A,#0EEH,WKEY1
  156.          MOV KEYNUMBER,#00H      
  157.          AJMP RETURN
  158. WKEY1:   CJNE A,#0EDH,WKEY2
  159.          MOV KEYNUMBER,#01H
  160.          AJMP RETURN
  161. WKEY2:   CJNE A,#0EBH,WKEY3
  162.          MOV KEYNUMBER,#02H
  163.          AJMP RETURN
  164. WKEY3:   CJNE A,#0E7H,WKEY4
  165.          MOV KEYNUMBER,#03H
  166.          AJMP RETURN
  167. WKEY4:   CJNE A,#0DEH,WKEY5
  168.          MOV KEYNUMBER,#04H
  169.          AJMP RETURN
  170. WKEY5:   CJNE A,#0DDH,WKEY6
  171.          MOV KEYNUMBER,#05H
  172.          AJMP RETURN
  173. WKEY6:   CJNE A,#0DBH,WKEY7
  174.          MOV KEYNUMBER,#06H
  175.          AJMP RETURN
  176. WKEY7:   CJNE A,#0D7H,WKEY8
  177.          MOV KEYNUMBER,#07H
  178.          AJMP RETURN
  179. WKEY8:   CJNE A,#0BEH,WKEY9
  180.          MOV KEYNUMBER,#08H
  181.          AJMP RETURN
  182. WKEY9:   CJNE A,#0BdH,WKEY10
  183.          MOV KEYNUMBER,#09H
  184.          AJMP RETURN
  185. WKEY10:  CJNE A,#0BbH,WKEY11
  186.          MOV KEYNUMBER,#0AH
  187.          AJMP RETURN
  188. WKEY11:  CJNE A,#0B7H,RETURN
  189.          MOV KEYNUMBER,#0BH       ;判断哪个键按下,返回相应按键号码
  190. RETURN:  MOV P1,#0FH
  191.          NOP
  192.          NOP
  193.          MOV A,P1
  194.          CPL A
  195.          ANL A,#0FH
  196.          JNZ RETURN              ;等待按键松开
  197.          RET



  198. ;========== 液晶工作方式设置 ============
  199. SELLCD: MOV A,#01H          ;清屏,光标复位   
  200.         ACALL ENABLE
  201.         MOV A,#38H          ;设置显示模式,8位两行,5*7点阵
  202.         ACALL ENABLE
  203.         MOV A,#0DH          ;显示器开,允许内烁
  204.         ACALL ENABLE      
  205.         MOV A,#06H          ;文字不动,光标右移
  206.         ACALL ENABLE
  207.         RET

  208. ;========== 液晶执行指令 ============
  209. ENABLE: CLR RS
  210.         CLR RW              ;RS,RW同为低电平时写入指令
  211.         MOV P0,A
  212.         CLR E               ;E由高变低时执行指令
  213.         ACALL WAIT
  214.         SETB E
  215.         RET

  216. ;========== WAIT ============
  217. ;判断液晶是否忙的子程序
  218. WAIT:   MOV P0,#0FFH
  219.         CLR RS
  220.         SETB RW             ;RW为高,RS为低时可读忙信号
  221.         CLR E
  222.         NOP
  223.         SETB E
  224.         JB P0.7,WAIT
  225.         RET


  226.         
  227. ;========== 显示的起始地址 ============
  228. ;在第一行
  229. LINE1:  MOV A,#80H
  230.         ACALL ENABLE
  231.         RET
  232. ;在第二行
  233. LINE2:  MOV A,#0C0H
  234.         ACALL ENABLE
  235.         RET


  236. ;=========== 显示程序 ============
  237. DISPLAY:MOV R7,#00H
  238. NEXT:   MOV A,R7
  239.         MOVC A,@A+DPTR
  240.         CJNE A,#10H,DSP
  241.         RET
  242. DSP:    ACALL WRDATA
  243.         INC R7
  244.         AJMP NEXT

  245. ;========== 将A里面的数据写入液晶 ============
  246. WRDATA: SETB RS
  247.         CLR RW
  248.         MOV P0,A
  249.         CLR E
  250.         ACALL WAIT
  251.         SETB E
  252.         RET

  253. ;=========== 报警程序 ============
  254. WRANING: SETB TR0
  255.          ACALL BACK
  256.          MOV R4,#00H
  257.          ACALL D2
  258.          JNB 20H, WRANING
  259.          RET
  260. ;=========== 发声程序 ============
  261. BACK:    MOV R0,#100
  262. KK1:     CPL  SPEAK
  263.          LCALL DELAY2MS
  264.          DJNZ  R0,KK1             ;不断取反P2.0使其产生一定频率的方波推动扬声器
  265.          RET                      ;延时的长短可以改变输出的频率

  266. ;=========== INTT0 ============
  267. ;报警时间设定
  268. INTT0:   PUSH ACC
  269.          PUSH PSW                  
  270.          MOV TH0,#3CH           
  271.          MOV TL0,#0BH
  272.          INC 45H
  273.          MOV A,45H
  274.          CJNE A,42H,INTT0OUT
  275.          MOV 45H,#00H
  276.          SETB 20H                 ;置标志位
  277.          CLR TR0                  ;关闭定时器
  278. INTT0OUT:POP PSW
  279.          POP ACC
  280.          RETI
  281. ;=========== INTT1 ============
  282. ;输入超时
  283. INTT1:   PUSH ACC
  284.          PUSH PSW
  285.          INC 46H
  286.          MOV A,46H
  287.          CJNE A,47H,INTT1OUT
  288.          CLR TR1                 ;关闭定时器
  289.          SETB 21H                ;时间到置标志位       
  290.          MOV 47H,#00H            ;中断次数清零
  291. INTT1OUT:POP PSW
  292.          POP ACC
  293.          RETI  
  294. ;=========== 延时程序 ============
  295. DELAY:    MOV R4,#38H
  296. D1:       MOV R5,#0F9H
  297.           DJNZ R5,$
  298.           DJNZ R4,D1
  299.           DJNZ R6,DELAY        ;14R6毫秒
  300.           RET
  301. DELAY2MS: MOV R4,#02H
  302. D2:       MOV R5,#0F0H
  303.           DJNZ R5,$
  304.           DJNZ R4,D2
  305.           RET
  306. DELAY10ms:  MOV R4,#20
  307. D3:         MOV R5,#248
  308.             DJNZ R5,$
  309.             DJNZ R4,D3
  310.             RET

  311. PASS:   DB "1314520"
  312. MES_P:  DB "Password?",10H
  313. MES_C:  DB "   welcome!",10H
  314. MES_E:  DB "Error!",10H
  315. TAB_1:  DB "xiao_fa office",10h     

  316.         END


复制代码

所有资料51hei提供下载:
Proteus设计的51单片机电子密码锁.rar (44.96 KB, 下载次数: 120)

评分

参与人数 2黑币 +55 收起 理由
879598301 + 5 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:261488 发表于 2017-12-14 13:41 | 显示全部楼层
顶一下
回复

使用道具 举报

ID:264175 发表于 2017-12-20 16:47 | 显示全部楼层
楼主,这个怎么解决
微信图片_20171220164709.png
回复

使用道具 举报

ID:275002 发表于 2018-1-11 21:28 | 显示全部楼层
顶一下
回复

使用道具 举报

ID:744548 发表于 2020-6-18 20:53 | 显示全部楼层
bottlewww 发表于 2017-12-20 16:47
**** 作者被禁止或删除 内容自动屏蔽 ****

这个问题你解决了吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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