《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 用AT89C2051设计的多功能密码锁
用AT89C2051设计的多功能密码锁
互联网
摘要: 介绍一种由AT89C2051编程实现的控制电路,具有按键有效指示、输入错误、解码有效指示、控制开锁、定时中断、错误报警、密码修改等功能;8位10进制密码,保密好使用范围广,特适用家庭、宾馆等场所
Abstract:
Key words :
介绍一种由AT89C2051编程实现的控制电路,具有按键有效指示、输入错误、解码有效指示、控制开锁、定时中断、错误报警、密码修改等功能;8位10进制密码,保密好使用范围广,特适用家庭、宾馆等场所。

一、硬件电路:
  
  
   AT89C2051是与MCS-51系列兼容的一种高性能单片机,具有2KB片内ROM、256字节片内RAM,可以不需扩展外程序、数据存储器,可满足一般的程序需求,从硬件组成可以看出该密码锁有一个3X4阵列的键盘,只需7条I/O引脚就可以了余下的I/O引脚可以开发其他控制功能,如:控制空调、电灯、风扇等。

二、功能实现

   键盘扫描所用引脚P1.0-P1.6,其中P1.4-P1.6这3条引脚用于输出扫描信号,P1.0-P1.3这4条引脚用于检测按键的状态。P1.0-P1.6的状态组成的键码以及对应按键如表1所列。
 


   在程序执行中,是先从P1.6送出“0”,再判别P1.3-P1.0的输入。所以,实质是在P1.6-P1.4送出“011”,接收P1.3-P1.0的输入状态,这时判别8,9,A这4个键。接着,在P1.6-P1.4送出“101”,接收P1.3-P1.0的输入,这时判别4,5,6,7这4个键。再而,在P1.6-P1.4送出“110”,接收P1.3-P1.0的输入,这时判别0,1,2,3这4个键的状态。
   开锁电平UNLOCK的输出脚P3.0,当输入的键正确时则在P3.0输出开锁电平UNLOCK。
   报警电平DANG输出脚P3.1。在6次误码输入的条件下,进行报警。
   LOCK控制引脚P3.2,90S之后停止输入。
   有效按键提示EFFI引脚P3.3。
   错误输入警告WARN引脚P3.4。
   另外,还有引脚5,4接石英振荡器的XTAL2,XTAL1端,组成石英振荡器电路,在图1中没有画出。引脚1用于复位。

三、密码锁的控制程序

   密码锁的控制程序由延时子程序、修改密码子程序、扫描输入子程序、时钟中断子程序及主程序组成。程序框图如图2所示。它对输入的8位十进制密码进行判别,如果输入密码正确,则可以直接开锁或修改密码之后开锁。如果不正确,并且6次以上输入不正确,则报警并封锁输入口。
 
  1.主程序:
           ORG   0H
           SJMP  START
           ORG   0BH
           SJMP  INT
           START            ;初始化
           MOV   SP.#70H
           SETB  P3.0
           SETB  P3.1
           SETB  P3.2
           SETB  P3.3
           MOV   TMOD,#01H
           MOV   TL0,#00H
           MOV   TH0,#00H
           SETB  TR0
           SETB  ET0
           SETB  EA
           MOV   R2,#0FFH
           MOV   3AH,#03H
           MOV   R3,#06H
   
  PASSWORD:MOV   R4,#08H        ;设置初始密码
           MOV   R0,#40H
           MOV   A,#07H
           MOV   @R0,A
           INC   R0
           INC   A
           DJNZ  R4,PASSWORD

  DETPW:   MOV   R4,#08H         ;输入密码
           MOV   R0,#30H
 
  AGAIN:   ACALL INPUT
           MOV   A,R7
           CJ    R7,#08H,IN
           ACALL CHPSW           ;修改密码子程序
           JMP   GETPW

  IN:      MOV   @R0,A
           CLR   P3.3            ;按键有效显示
           ACALL DELAY
           SETB  P3.3
 
  COMP:    MOV   R4,#08H         ;比较密码
           MOV   R0,#30H
 
  AGAI:    MOV   50H,@R0
           ADD   R0,#010H
           MOV   A,@R0
           SUB   R0,#010H
           CJNE  A,50H,ONCEMORE
           INC   R0
           DJNZ  R4,AGA1
           CLR   P3.0
 
  HERE:    AJMP  HERE
 
  ONCEMORE:CLR   P3.4             ;错误输入警告
           ACALL DELAY
           SETB  P3.4
           DJNZ  R3,GETPW
           CLR   P3.1             ;6次错误输入报警
  THERE:   AJMP  THERE

 2.延时子程序
  DELAY:   MOV   R5,#30H
 
  DELAY1:  MOV   A,#0FFH
 
  LOOOP:   DEC   A
           JNZ   LOOP
           DJNZ  R5,DELAY1
           RET
 
 3.修改密码子程序
  CHPSW:   MOV   R0,#40H
 
  ANOTHER: ACALL INPUT
           MOV   A,R7
           MOV   @R0,A
           INC   R0
           CLR   P3.3              ;按键有效提示
           ACALL DELAY
           SETB  P3.3
           DJNZ  R4,ANOTHER
           RET
 
 4.扫描键盘输入子程序
  INPUT:   MOV   R6,#02H
           MOV   R1,#40H
 
  LOP:     ACALL DELAY
           MOV   P1,#0FFH           ;扫描码
           CLR   P1.6
           MOV   A,P1
           ANL   A,#0FH             ;检验有否按键
           CJNE  A,#0FH,INKEY
           MOV   P1,#0FFH
           CLR   P1.5
           MOV   A,P1
           ANL   A,#0FH
           CJNE  AA,#0FH,INKEY
           MOV   P1,#0FFH
           CLR   P1,4
           MOV   A,P1
           ANL   A,#0FH
           CJNE  A,#0FH,INKEY
           SJMP  LOP
 
  INKEY:   MOV   @R1,P1
           INC   R1
           DJNZ  R6,LOP
           DEC   R1
           MOV   A,@R1
           DEC   R1
           CJNE  A,40H,INPUT
           RET

 5.时钟中断子程序
  INT:     PUSH  ACC
           MOV   TMOD,#01H
           MOV   TL0,#00H
           MOV   TH0,#00H
           SETB  TR0
           SETB  ET0
           SETB  EA
           DJNZ  R2,CONT
           CONTINUE
           DJNA  3AH,CONT
           CLR   P3.2         ;时钟中断控制
 
  STOP:    AJMP  STOP
 
  CONT:    POP   ACC
           RET1

此内容为AET网站原创,未经授权禁止转载。