智能密码锁系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能密码锁系统设计
目录
摘要................................................................................................. 错误!未定义书签。
目录. (1)
引言 (3)
第1章课题研究的背景 (4)
1.1任务分析 (4)
1.2方案设计 (4)
第2章硬件设备的选择 (7)
2.1键盘电路 (7)
2.2显示模块 (7)
2.3电子密码锁的控制 (7)
2.4单片机的选择 (8)
第3章硬件电路的设计 (9)
3.1键盘电路 (9)
3.2行列式式键盘的设计 (9)
3.3LCD显示电路 (9)
3.4主要元器件选择 (10)
第4章主要组件介绍 (11)
4.1程序流程图 (11)
4.2程序设计 (11)
第5章仿真与调试 (20)
5.1电子密码锁控制器仿真 (20)
5.2程序调试 (21)
总结................................................................................................. 错误!未定义书签。
参考文献.. (22)
引言
随着科学技术的进步,电子器件和电子系统设计方法日新月异,电子设计自动化技术正是适应了现代电子产品设计的要求,吸收了多学科最新成果而形成的一门新技术。
为保证电子产品设计的速度和质量,适应“第一时间推出产品”的设计要求,EDA技术已成为不可缺少的一项先进技术和重要工具,掌握EDA技术是电子信息类专业学生,工程技术人员所必备的基本能力和技能。
随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。
意外事故或人为破坏可能造成中的灾难性后果的系统称为要害系统。
要害系统的保证性包括安全性、可开性和保全性,内涵非常丰富。
我们设计的电子密码锁是一类针对要害系统的安全保险器件,其设计概念与常见的保安密码锁有所不同。
从系统设计观点看,电子安全密码锁是一个实体域定义的概念,比较机械安全密码锁,具有设计实现简便、密码装订灵活、制造成本低廉等优点。
主要的设计实施过程:首先,选用 ATMEL公司的单片机 AT89C51,以及选购其他电子元器件。
第二步,使用 DXP 2004设计硬件电路原理图,并设计 PCB图完成人工布线(后因 PCB 板损坏决定采用万能板焊接的方法)。
第三步,使用 Keil uVision3 软件编写单片机的 C 语言程序、仿真、软件调试。
第四部,使用 PROTEUS 软件进行模拟软、硬件调试。
最后,联合软、硬件调试电路板,完成本次课程设计。
第1章课题研究的背景
1.1任务分析
根据设计要求,电子密码锁可以有数字电路控制完成,还可以由采用一种是用以AT89C51为核心的单片机控制方案。
相比之下,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。
1.2方案设计
采用一种是用以AT89C51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。
其原理如图1-1所示。
图1-1单片机控制方案
本方案采用一种是用以89C51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。
初步设计思路如下:
输入密码用矩形键盘,包括数字键和功能键。
LED数码管显示输入密码,用数码管发光显示数码,用采用一种是用以AT89C51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。
其原理如图1-2所示。
图1-2单片机控制方案
本方案采用一种是用以89C51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。
初步设计思路如下:
输入密码用矩形键盘,包括数字键和功能键。
LED数码管显示输入密码,用74JS247驱动数码管发光显示数码,用74LS138控制各位显示器分时进行显示。
用发光二极管代替开锁的电路,发光表示开锁。
输入密码错误次数超过3次,系统报警。
打开电源后,显示器显示“000000”,设原始密码为“123456”,只要输入此密码便了开门。
这样可预防停电后再来电时无密码可用。
按“C”键,清除显示器为“000000”。
欲重新设定密码,先输入密码在案“*”。
输入密码,再按“D”键。
若密码与设定密码相同,则开门。
否则显示器清为“000000”。
软件的设计主要包括键值的读取,LED显示程序,密码比较程序和报警程序。
控制各位显示器分时进行显示。
用发光二极管代替开锁的电路,发光表示开锁。
输入密码错误次数超过3次,系统报警。
打开电源后,显示器显示“000000”,设原始密码为“123456”,只要输入
此密码便了开门。
这样可预防停电后再来电时无密码可用。
按“C”键,清除显示器为“000000”。
欲重新设定密码,先输入密码在案“*”。
输入密码,再按“D”键。
若密码与设定密码相同,则开门。
否则显示器清为“000000”。
软件的设计主要包括键值的读取,LED显示程序,密码比较程序和报警程序。
第2章硬件设备的选择
2.1键盘电路
方案一:采用独立式键盘。
由于各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可以很容易的判断哪个按键被按下。
此种键盘适用于按键较少或操作速度较高的场合。
但本题发挥部分要求12个功能键,按键数目较多,这就需要较多的输入口线,而且电路结构复杂。
故此方案不可取。
方案二:采用行列式键盘。
它由行线和列线组成,按键位于行列的交叉点上,行线信号和列线信号分别通过两个接口和CPU相连,他有行线和列线组成,按键位于行列的交叉点,通过单片机对行列的快速扫描,从而得到那个键被按下的信息,而且节约IO 口,节省资源。
综合考虑,通过对电子密码锁题目的分析,采用4*3行列式键盘。
2.2显示模块
采用1602显示模块。
能显示复杂的信息,具有质量轻,体积小,功耗低,指令功能强,接口简单,可靠性强等优点,显示内容丰富,图形美观,易于人机交流。
应用起来十分方便。
2.3电子密码锁的控制
组成0~9数字键及确认键、复位键、修改密码键。
用1602液晶显示电路提示信息,当输入密码时,在12.5秒内输入密码有效,当密码位输入完毕按下确认键,对输入的密码与设定的密码进行比较,若密码正确,则开锁。
当密码正确开锁后,7秒后恢复初态,如果输入密码三次不正确,则自动报警10秒。
2.4单片机的选择
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4K bytes的可反复擦写的只读程序存储器(EPROM)和128bytes 的随机存取数据序存器(RAM),器件采用ATMEL 公司的高密度/非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和FLASH存储单元,AT89C51单片机为许多嵌入式控制系统提供了一种灵活行高且价廉的方案。
第3章硬件电路的设计
3.1键盘电路
3.2行列式式键盘的设计
键盘电路如图3所示。
设计键号依次为0~9,确认键的键号为“enter”
3.3LCD显示电路
12864液晶显示,显示所需的字库,采用排阻驱动。
3.4主要元器件选择
主要元器件选用型号和数量如表3-1所示:
序号材料名称规格型号数量元件代号
1 单片机AT89C51 1 LCD1
2 晶振12MHz 1 X1
3 键盘4*3 12
4 1602液
晶
1
5 排阻10k 1 RP1
第4章主要组件介绍
4.1程序流程图
4.2程序设计
说明:首先显示器提示输入密码,密码在.5S内输入有效,
; 输入次三次错误报警S,输入正确开门,7秒后返回初态
; 以上参数均可在主程序里设定,修改系统密码在程序的结尾;===================================================
RS BIT P2.7
RW BIT P2.6
E BIT P2.5
ENTER BIT 22H.0
OPEN BIT P3.6
SPEAK BIT P3.7
PASSBUF EQU 40H
KEYNUMBER EQU 41H ;存放识别后的按键号
ORG 0000H
AJMP MAIN
ORG 0003H
JMP KEY_INT
ORG 000BH
AJMP INTT0
ORG 001BH
AJMP INTT1
ORG 0030H
;========== 主程序开始==============
MAIN: MOV 30H,#07H ;输入密码为位最高只可设位
MOV 42H,#200 ;设定报警的时间,42H单元里的数*50MS
MOV 43H,#250 ;设定开门时间 14的倍数(实际上液晶显示器执行指令占用了时间,开门时间会比*250MS大)
;44H号单元存放输入错误的次数
;45H为定时器中断次数
;46H为定时器中断次数
MOV 47H,#250 ;输入密码时间设定,50MS倍数
MOV SP,#60H
CLR OPEN
CLR SPEAK ;初始化输出设备
CLR ENTER ;标志位初始化
MOV TMOD,#11H ;定时器工作方式
MOV TH0,#3CH ;初值MS
MOV TL0,#0BH
MOV TH1,#3CH
MOV TL1,#0BH
SETB EA
SETB ET0
SETB ET1
MOV TCON,#00000000B ;电平触发
START: MOV R0,30H
MOV R1,#31H
SS1: MOV @R1,#00H
INC R1
DJNZ R0,SS1 ;将输入密码缓冲单元清零
MOV P1,#0FH ;初始化按键口
MOV R1,#31H ;从号单元开始存放按建输入的密码
CLR 20H ;报警标志清零
CLR 21H ;密码超时标志
MOV 46H,#00H ;超时后对定时器中断次数清零,便于下一轮重新计
时
INIT: ACALL SELLCD ;设定液晶工作方式
ACALL LINE1 ;在第一行显示
MOV DPTR,#MES_P ;显示请输入密码
ACALL DISPLAY
setb EX0 ;开中断,允许键盘输入
KEYIN: JB 21H,ERR ;超时转到错误程序
JNB ENTER,KEYIN ;等待ENTER按下
CLR ENTER
clr EX0 ;密码输入完后锁定键盘
;当使用边沿触发时用上面的指令为什么禁止不了中断
;========== 密码判断程序============
COMP:
MOV DPTR,#PASS
MOV R4,30H ;密码的长度
MOV A,#0
MOV R1,#31H
LOOP: MOV R5,A
MOVC A,@A+DPTR
MOV PASSBUF,A ;取出系统设定的密码
MOV A,@R1 ;从号单元开始取出输入的密码 CJNE A,PASSBUF,ERR ;比较
MOV A,R5
INC A
INC R1 ;取下一位
DJNZ R4,LOOP
;正确
MATCH: MOV A,#01H
ACALL ENABLE ;清屏,光标复位
ACALL LINE1 ;从第一行开始显示
MOV DPTR,#MES_C
ACALL DISPLAY ;显示"请进"
ACALL LINE2
MOV DPTR,#TAB_1
ACALL DISPLAY
SETB OPEN ;开门
MOV 44H,#00H ;输入错误次数清零
MOV R6,43H
ACALL DELAY
CLR OPEN ;复位
JMP START
;错误
ERR: ACALL BACK
MOV R6,#03H
ACALL DELAY
ACALL BACK ;输错提示音,鸣两下
MOV A,#01H
ACALL ENABLE
ACALL LINE1
MOV DPTR,#MES_E
ACALL DISPLAY ;显示错误
MOV R6,#40H
ACALL DELAY
INC 44H
MOV A,44H
CJNE A,#03H,EE0
EE0: JC ERROUT ;输错不到三次返回
MOV 44H,#00H ;清零
ACALL WRANING ;报警
ERROUT: JMP START
;=========== 按键中断服务程序==========
KEY_INT:push acc
push psw
clr ex0
acall delay10ms ;延时消抖
SETB TR1 ;启动定时器
ACALL SMKEY ;按键识别
MOV A,KEYNUMBER ;返回按键号
ACALL BACK ;按键发声
MOV R3,A
CJNE R3,#0BH,K1 ;ENTER是否按下
SETB ENTER
clr tr1 ;按下确认后关毕定时器
mov 46h,#00h ;对中断次数清零
AJMP KEY_RTN
K1: ADD A,#30H ;将按键号转换为ASCⅡ码
MOV @R1,A ;将输入的密码存入缓冲单元 INC R1 ;修改地址
ACALL WRDATA ;输入一位显示一个"*"
KEY_RTN:pop psw
pop acc
setb ex0
RETI
;=========== 按键识别程序==========
SMKEY:
MOV A,P1
ANL A,#0FH
WKEY: MOV B,A ;反转法查询
;清屏,光标复位
ACALL ENABLE
MOV A,#38H ;设置显示模式,8位两行,5*7点阵 ACALL ENABLE
MOV A,#0DH ; MOV P1,#0F0H
NOP
MOV A,P1
ANL A,#0F0H
ORL A,B
MOV P1,#0FH ;还原P1口初态
CJNE A,#0EEH,WKEY1
MOV KEYNUMBER,#00H
AJMP RETURN
WKEY1: CJNE A,#0EDH,WKEY2
MOV KEYNUMBER,#01H
AJMP RETURN
WKEY2: CJNE A,#0EBH,WKEY3
MOV KEYNUMBER,#02H
AJMP RETURN
WKEY3: CJNE A,#0E7H,WKEY4
MOV KEYNUMBER,#03H
AJMP RETURN
WKEY4: CJNE A,#0DEH,WKEY5
MOV KEYNUMBER,#04H
AJMP RETURN
WKEY5: CJNE A,#0DDH,WKEY6
MOV KEYNUMBER,#05H
AJMP RETURN
WKEY6: CJNE A,#0DBH,WKEY7
MOV KEYNUMBER,#06H
AJMP RETURN
WKEY7: CJNE A,#0D7H,WKEY8
MOV KEYNUMBER,#07H
AJMP RETURN
WKEY8: CJNE A,#0BEH,WKEY9
MOV KEYNUMBER,#08H
AJMP RETURN
WKEY9: CJNE A,#0BdH,WKEY10
MOV KEYNUMBER,#09H
AJMP RETURN
WKEY10: CJNE A,#0BbH,WKEY11
MOV KEYNUMBER,#0AH
AJMP RETURN
WKEY11: CJNE A,#0B7H,RETURN
MOV KEYNUMBER,#0BH ;判断哪个键按下,返回相应按键号码RETURN: MOV P1,#0FH
NOP
NOP
MOV A,P1
CPL A
ANL A,#0FH
JNZ RETURN ;等待按键松开
RET
;========== 液晶工作方式设置============
SELLCD: MOV A,#01H 显示器开,允许内烁
ACALL ENABLE
MOV A,#06H ;文字不动,光标右移
ACALL ENABLE
RET
;========== 液晶执行指令============
ENABLE: CLR RS
CLR RW ;RS,RW同为低电平时写入指令
MOV P0,A
CLR E ;E由高变低时执行指令
ACALL WAIT
SETB E
RET
;========== WAIT ============
;判断液晶是否忙的子程序
WAIT: MOV P0,#0FFH
CLR RS
SETB RW ;RW为高,RS为低时可读忙信号
CLR E
NOP
SETB E
JB P0.7,WAIT
RET
;========== 显示的起始地址============
;在第一行
LINE1: MOV A,#80H
ACALL ENABLE
RET
;在第二行
LINE2: MOV A,#0C0H
ACALL ENABLE
RET
;=========== 显示程序============
DISPLAY:MOV R7,#00H
NEXT: MOV A,R7
MOVC A,@A+DPTR
CJNE A,#10H,DSP
RET
DSP: ACALL WRDATA
INC R7
AJMP NEXT
;========== 将A里面的数据写入液晶============
WRDATA: SETB RS
CLR RW
MOV P0,A
CLR E
ACALL WAIT
SETB E
RET
;=========== 报警程序============
WRANING: SETB TR0
ACALL BACK
MOV R4,#00H
ACALL D2
JNB 20H, WRANING
RET
;=========== 发声程序============
BACK: MOV R0,#100
KK1: CPL SPEAK
LCALL DELAY2MS
DJNZ R0,KK1 ;不断取反P2.0使其产生一定频率的方波推动扬声器
RET ;延时的长短可以改变输出的频率
;=========== INTT0 ============
;报警时间设定
INTT0: PUSH ACC
PUSH PSW
MOV TH0,#3CH
MOV TL0,#0BH
INC 45H
MOV A,45H
CJNE A,42H,INTT0OUT
MOV 45H,#00H
SETB 20H ;置标志位 CLR TR0 ;关闭定时器INTT0OUT:POP PSW
POP ACC
RETI
;=========== INTT1 ============
;输入超时
INTT1: PUSH ACC
PUSH PSW
INC 46H
MOV A,46H
CJNE A,47H,INTT1OUT
CLR TR1 ;关闭定时器
SETB 21H ;时间到置标志位 MOV 47H,#00H ;中断次数清零INTT1OUT:POP PSW
POP ACC
RETI
;=========== 延时程序============
DELAY: MOV R4,#38H
D1: MOV R5,#0F9H
DJNZ R5,$
DJNZ R4,D1
DJNZ R6,DELAY ;14R6毫秒
RET
DELAY2MS: MOV R4,#02H
D2: MOV R5,#0F0H
DJNZ R5,$
DJNZ R4,D2
RET
DELAY10ms: MOV R4,#20
D3: MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
PASS: DB "1234567"
MES_P: DB "Password?",10H
MES_C: DB " welcome!",10H
MES_E: DB "Error!",10H
TAB_1: DB " shixinli ",10h END
第5章仿真与调试
5.1电子密码锁控制器仿真
在完成了电子密码锁硬件设计和软件设计以后,便进入系统的调试阶段。
系统的调试步骤和方法基本上是相同的,但具体细节和所采用的开发系统以及用户系统选用的单片机型号有关,如可选用Keil软件进行软件调试,用Proteus软件完成硬件调试。
5.2程序调试
参考文献
[1] 王迎旭.《单片机原理及及应用》,机械工业出版社,2001
[2]周航慈.《单片机应用程序设计技术》,北京航空航天大学出版社
[3]张洪润. 《单片机应用技术教程》.北京:清华大学出版社,1997
[4]宋彩利.《单片机原理与C51接口编程》,西安交通大学出版社,2008.6
[5]夏继强,沈德金等.《单片机实验与实践教程》,北京航天大学出版社,2004年1月出版
[6]王新颖.《单片机原理及应用》,北京大学出版社,2008年1月出版
[7]喻萍,郭文川.《单片机原理与接口技术》,化学工业出版社,2005年12月。