目 录
摘要..........................................(03)
关键字........................................(03)
1 前言..........................................(04)
2 系统设计......................................(04)
2.1 电子密码锁的工作原理......................(04)
2.2 系统硬件组成..............................(04)
2.3 矩阵键盘扫面工作原理......................(05)
2.4 LED数码管动态显示原理.....................(05)
2.5 电子密码锁系统硬件设计..... ..............(06)
2.6 电子密码锁系统软件设计....... ............(07)
3 设计体会与结论................................(07)
4附录...........................................(08)
5参考文献.......................................(13)
摘要
电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁,特点如下:
1.保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。
2.密码可变。 用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。
3.误码输入保护。当输入密码多次错误时,报警系统自动启动。
4. 电子密码锁操作简单易行,一学即会。
关键字;单片机 LED数码管 矩阵键盘 密码锁
Abstract
Electronic Code Lock is a password input through the control circuit, or chip, thus controlling the closed mechanical switch to complete the lock, closed the task of electronic products. It is of many types, have a simple circuit products, but also the higher cost chip-based products. Now the widely used electronic code lock is a chip at the core, achieved through programming. Performance and safety have greatly exceeded the mechanical lock, the following features:
1. Privacy is good, coding quantity is far greater than the spring lock. Random unlocking success rate is almost zero.
2. Password variable. Users can always change the password, to prevent password theft, but also avoids the lock because of staff turnover Er Shi and drawing down.
3. Error input protection. When you enter your password wrong several times, the alarm system started automatically.
4. E-lock operation is simple, a school that will.
Keywords; MCU LED digital tube matrix keypad lock
1 前言
随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。
设计本课题时构思了两种方案:一种是用以AT89s51为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。
2 系统设计
2.1电子密码锁的工作原理
电子密码锁是以51系列单片机(AT89C51)为核心,配以相应硬件电路,完成密码的识别和显示、驱动电磁执行器并检测其驱动电流值。 单片机接收键入的代码,并与存贮在EEPROM中的密码进行比较,如果密码正确,则驱动电磁执行器开锁;如果密码不正确,则允许操作人员重新输入密码,单片机将每次开锁操作和此时电磁执行器的驱动电流值作为状态信息发送给智能监控器,同时将接收来自传感器接口的报警信息也发送给智能监控器,作为智能化分析的依据。
2.2系统硬件组成
如图(1)所示,系统采用单片机ATC89C51作为控制的核心,完成系统的控制操作。单片机核心接受来自键盘扫面电路的道德键值,判断是数字键还是操作键,并送相应的处理程序。单片机提供动态扫描电路的显示码和位选信号,使动态显示电路正常工作。
键盘扫面电路采用4*4键盘,编号0~9做为数字键“0~9”,编号14做为关锁操作功能键,编号15做为确定功能键。编号13为修改密码键,编号12作为电子锁报警后的解锁键,编号11为清除显示屏键。
动态扫描电路采用4块LED数码管,利用人眼的延迟效应通过合理的软件设计使显示电路显示数字。
供电采用5V直流电压电源
2.3矩阵键盘扫描工作原理
矩阵式键盘又成为行列式键盘,是将I/O线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,如图()所示。这种设计减少键盘与单片机I/O接线的数目。只需要N个行线和M个列线就可以实现N*M个键的操作。
行扫描法识别键值的原理
(1) 将第0 行变为低电平,其余行为高电平,输出编码为1110.然后读取列的电平,判别第0行是否有键按下。在第0行上若有键按下,则相应的列被拉低为低电平,则表示第0行和此列相交的位置上有键按下,进而判别哪一列有键按下。若没有任一条列线为低电平,则说明0行上无键按下。
(2) 用此方法扫描第1行,第2行,第3行,判断是哪个键按下。
由此指出,按键的位置码比不等于按键的实际定义键值,因此还需要进行转换。
2.4 LED数码管动态显示原理
将所有的位选线并联在一起,由一个8位I/O口控制,实现各位的分时选通。如图()所示。
2.5电子密码锁系统硬件设计
键盘部分
如图()所示,采用行列式键盘,P1口作为与行列式键盘的接口。低四位做为行选线,高四位作为列选线。采用逐行扫描的方法完成。
LED动态显示部分
采用7SEG-MPX4-CC 八段数码管,总共有四个八段数码管,共阴极的方法,未选信号为低电平有效。数据接口与P2相连,P2.0~P2.7对应a~dp。未选信号与P3相连,P3.0~P3.3对应4~1.
仿真电灯一端与P0.0相连,另一端与5V的直流电源相连。
2.6电子密码锁系统软件设计
软件是系统的核心,控制硬件的工作。对于单片机的开发,可以采用C语言,也可以采用汇编语言。本次设计中,开发了两套软件分别使用C语言和汇编语言。从可读性来讲C语言相对要好一点。从简洁性来说汇编要好一点。详细代码参见附录。流程图参见附录图(9)
软件分析:
以C语言为例。系统的参数传递采用全局变量的形式
全局变量有:
uchar output[4];
uchar input[4];
uchar led[16]={0x3f,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};
uchar f0=1;
uchar pass[4]={4,3,2,1};
sbit p0_0=P0^0;
数组output用于存储用于数码管输出的码值,input用于存储按键的键值led用于查表,存储数码管的对应编码,f0为密码配对标志,为1表示密码正确,否责密码不正确,pass用于存放密码,p0_0为P0.0口。
采用C语言与汇编混合编程,C作为主函数调用汇编子程序scan(),通过寄存器传递参数。
主要函数为scan(),完成对键盘的扫描并返回扫描的键值。Sodesw(),完成从键值到显示数码管码值的转换。display(),完成动态显示数码管。cmp
(),完成输入密码与系统密码的比较,正确则开锁,错误不开。clean(),完成对输入的密码的清除。
各部分的工作,如流程图所示,图()
3.体会与结论
4.附录
方案一:C程序中有一个小错误,但是是致命的。作为学习只用,请你找出来。若是找不到,请联系红狐狸,zhaowei153@126.com。但是方案二的汇编实现是可以用的。
c语言代码:
//mimasuo.c
#include
#define uchar unsigned char
#define uint unsigned int
extern uchar scan(void);
uchar output[4];
uchar input[4];
uchar led[16]={0x3f,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};
uchar f0=0;
uchar pass[4]={4,3,2,1};
uchar toppass[4]={ 8,8,6,6};
sbit p0_0=P0^0;
sbit p0_1=P0^1;
sbit p0_2=P0^2;
sbit p0_3=P0^3;
void codesw(void)
{
int i;
for(i=0;i<4;i++)
{
output[i]=led[input[i]];
}
}
void display(void)
{
char i;
char k,j;
uchar select;
codesw();
select=0xfe;
for(i=0;i<4;i++)
{
P3=select;
P2=output[i];
for(k=0;k<=70;k++)
{
for(j=0;j<=10;j++);
}
select=~select;
select<<=1;
select=~select;
}
}
void cmp(void)
{
char i;
if(p0_3==0)
{
for(i=0;i=4){f0=1;}
else
f0=0;
}
else
{
for(i=0;i=4){f0=1;}
else
f0=0;
}
}
void clean(void)
{
int i;
for(i=0;i=0x0)&&(keyno=0x0)&&(keyno1<=0xf));
else break;
}
if(keyno==0xe)
{
p0_0=1;
f0=0;
clean();
}
if(keyno==0xf)
{
if(expass==2)
{
pass[3]=input[3];
pass[2]=input[2];
pass[1]=input[1];
pass[0]=input[0];
p0_1=1;
expass=0;
}
else if((p0_3==0x0)&&(f0==0))
{
cmp();
if(f0!=1){clean();}
if(f0==1){counter=0;p0_3=1;p0_0=0; clean();}
}
else
{
counter++;
if((counter)<=3)
{
cmp();
if(f0!=1) {clean();}
if(f0==1){p0_0=0; clean();counter=0x0; }
}
else if(p0_0==0){counter=0;}
else
{
for(keyno1=0;keyno1<=254;keyno1++)
{
for(counter=5;counter=4)
{
p0_3=0;
extoppass=1;
}
}
if(keyno==0xb)
{
clean();
}
if((keyno>=0)&&(keyno<=9))
{
input[3]=input[2];
input[2]=input[1];
input[1]=input[0];
input[0]=keyno;
if(expass==1){expass++;}
if(extoppass==1){extoppass++;}
}
}
}
汇编代码:
;scan.asm
$NOMOD51
NAME SCAN
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
REN BIT 098H.4
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?scan?SCAN SEGMENT CODE
PUBLIC scan
RSEG ?PR?scan?SCAN
scan:
USING 0
MOV R3, #0FEH
MOV R4, #0H
MOV R1, #4H
CLR PSW.5
L1: MOV A, R3
MOV P1, A
MOV R5, #50
D1: MOV R6, #100
DJNZ R6, $
DJNZ R5, D1
MOV A, P1
ANL A, #0F0H
MOV R2, #4
L2: JB ACC.4, N1
MOV 7EH, R4
SETB PSW.5
N1: INC R4
RR A
DJNZ R2, L2
MOV A, R3
RL A
MOV R3, A
DJNZ R1, L1
BACK:
JNB PSW.5, NO_KEY
AJMP SCANOUT
NO_KEY:
MOV 7EH, #20H
SCANOUT:
MOV R7,7EH
?C0001:
RET
END
方案二:
REL EQU 60H
RELBUF EQU 61H
KEYNO EQU 62H
FKEY EQU 20H.0
F0_0 EQU 20H.1
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV SP, #6FH
ACALL CLEAN
START: ACALL DISPLAY
CLR FKEY
ACALL SCAN
JB FKEY, G1
SJMP START
G1: ACALL SCAN
JB FKEY, G1
MOV A, KEYNO
CJNE A, #14, G2
AJMP G4
G2: CJNE A, #15, G3
ACALL CMP
JNB F0_0, G4
CLR P0.0
LCALL DELAY1
CLR F0_0
ACALL CLEAN
AJMP START
G3: MOV 43H, 42H
MOV 42H, 41H
MOV 41H, 40H
MOV 40H, KEYNO
AJMP START
G4: SETB P0.0
ACALL CLEAN
AJMP START
CMP: MOV REL, #00H
MOV R0, #40H
MOV R7, #4H
CMP1: MOV DPTR, #PASS
MOV RELBUF, @R0
MOV A, REL
MOVC A, @A+DPTR
CJNE A, RELBUF, CMPOUT
INC REL
INC R0
DJNZ R7, CMP1
SETB F0_0
CMPOUT: MOV REL, #00H
RET
SCAN: MOV R3, #0FEH
MOV R4, #0H
MOV R1, #4H
CLR PSW.5
L1: MOV A, R3
MOV P1, A
MOV R5, #1
ACALL DELAY
MOV A, P1
ANL A, #0F0H
MOV R2, #4
L2: JB ACC.4, N1
MOV KEYNO, R4
SETB PSW.5
N1: INC R4
RR A
DJNZ R2, L2
MOV A, R3
RL A
MOV R3, A
DJNZ R1, L1
BACK: JNB PSW.5, NO_KEY
SETB FKEY
AJMP SCANOUT
NO_KEY: CLR FKEY
SCANOUT:
RET
CODESW: MOV R0, #40H
MOV R1, #50H
MOV R7, #4
SW1: MOV DPTR, #TAB
MOV A, @R0
MOVC A, @A+DPTR
MOV @R1, A
INC R0
INC R1
DJNZ R7, SW1
RET
DISPLAY:
ACALL CODESW
MOV A, #0FEH
MOV R5, #4
MOV R0, #50H
DIS1: MOV P3, A
MOV P2, @R0
ACALL DELAY
INC R0
SETB C
RLC A
DJNZ R5, DIS1
RET
CLEAN: MOV 40H, #0AH
MOV 41H, #0AH
MOV 42H, #0AH
MOV 43H, #0AH
RET
DELAY: MOV R7, #25
D1: MOV R6, #100
DJNZ R6, $
DJNZ R7, D1
RET
DELAY1:
MOV R7, #245
D11: MOV R6, #225
D12:
DJNZ R6, D12
DJNZ R7, D11
RET
PASS: DB 4,3,2,1
TAB: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DB 40H,40H,40H,40H,86H,8EH
END
图(1)系统硬件组成图
显示的数字 LED码
0 3FH
1 06H
2 5BH
3 4FH
4 66H
5 6DH
6 7DH
7 07H
8 7FH
9 6FH
- 40H
图(2)LED编码表
参考电路图:
图(3)总体电路图
图(4)键盘接口电路
图(5)LED显示接口电路
图(6)开锁显示等电路
图(7)输入密码演示
图(8)锁开启电路
5.参考文献