:基于单片机的电子密码锁设计
号和键盘输入信号的正常转换,这首先要求接口电路具有相应的电气特性,其次还要求接口电路和键盘电路的逻辑和时序关系正确。软件保证是要求系统键盘操作和程序控制逻辑电路正确,并能够得到硬件电路的完全支持,同时也要求键盘控制程序有相应的容错能力,以防硬件电路发生错误操作而引起全系统错误。
在设计单片机系统电路时,抖动是需要消除的。在一般电路设计中,按键按下闭合后,应产生一串负的矩形脉冲。但由于在按动案件时总有一些抖动,因此在负脉冲的开始和末尾部位总要出现一些如图3-6所示的毛齿波。
闭合抖动 释放抖动
图3-6 按键抖动波形
毛齿波的长短与开关的机械特性有关,一般为5~10MS。除了抖动之外还有重键,既一个键按下之后紧接着又按下一键,或者两个键同时按下。这些需要采取一定的措施加以消除。
消除抖动的方法有两种,一种是用硬件电路来实现,可用RC滤波电路或双稳态触发器滤除抖动。另一种则是用软件延时的方法来解决。硬件消除抖动需要添加额外的电路,增加成本,而且如果按键较多,硬件消除抖动将使得电路变得复杂。因此,实际中常常采用软件消抖。
软件编程是通过延时等待信号稳定,等信号稳定后查询键码,其过程是在查询到有按键按下后延时一段时间(12~20MS),再查询一次看是否有按键按下,若第一次查询不到,则说明前一次查询结果为干扰或抖动,若这一次查询到有按键按下,则说明信号已经稳定,然后判断闭合按键的键码。当闭合按键的键码确定之后,再去查询按键是否释放,待按键释放后在进行处理,这样即可消除释放抖动的干扰。对于重键则以后一次查询结果为最终结果。
键盘电路分为独立式键盘和矩阵式键盘。独立式键盘按键的数量较少,并且各按键相互独立,每一个按键由一个单独的I/O口控制,一个按键改变的是一个相应的I/O口的输入电平,而不会对其他I/O口电平产生影响。这样,通过检测各I/O口电平变化,即可以很容易确定是否有键按下以及是何键按下。独立式键盘电路简单,配置灵活,但是因为每一个按键需要占用一个I/O口,所以,I/O口占用量很大,它只适合于按键数量少的情况使用。当然也可以用扩展I/O口的方法来构建独立式键盘,但一般只用扩展I/O口单独构成键盘的电路很少,往往同时还接有显示功能。这样电路就会比较复杂了。
在该设计中,选用的是矩阵式键盘。矩阵式键盘又叫行列式键盘。用I/O口线组成行、列结构,按键设置在行列的交叉点上。例如用2*2的行、列结构可以构成4个键的键盘,4*4的行、列结构可构成16个键的键盘。因此,在按键数量较多时,可以节省I/O口线,也使电路看起来变得更加简单。
矩阵式键盘电路的工作原理是按键设置在行、列线交叉点上,行、列线分别连接到按键开关的两端。当行线通过上拉电阻接+5V时,被钳位在高电平状态。
键盘中有无按键按下是由列线送入全扫描字,行线读入行线状态来判断的。其方法
- 12 -
读键盘 毕业设计(论文)
是把所有列线的I/O线均置成低电平,然后将行线电平状态读入累加器A中。如果有键按下,总会有一根行线被拉至低电平,从而使输入不全为1。
按键中哪一个键按下,是由列线逐列置低电平后,检查行输入状态而获知的。其方法是依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的键不在此列,查下一列,直到查处行线状态不全为1的列,此列中与0电平行线相交的交叉点,就是按下的键。
键盘上每个键都有一个键值。键值赋值的最直接的办法是将行列线按二进制顺序排列,当某一键按下时,键盘扫描程序执行到给该列置0电平,读出各行状态为非全1状
态,这时的行、列数据组合成键值。该密码锁中的键盘电路原理图如图3-7所示:
5V
10K 10K 10K 10K
AT89C2051 VCC P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P3.7 图3-7 键盘电路原理图
键盘的工作方式有很多,有编程扫描工作方式、定时扫描工作方式、中断扫描工作方式。单片机应用系统中,编程扫描工作方式是利用CPU在完成其他工作的空余,调用键盘扫描子程序,在执行键功能程序时,CPU不再响应键输入要求。键盘扫描程序可以实现以下几个功能。
(1) 识别键盘上有无键按下。 (2) 消除键的机械抖动。 (3) 求按下的键号。
编程扫描工作方式只有在CPU空闲时才调用键盘扫描子程序。因此,在应用系统软件方案设计时,这种键盘扫描子程序的编程调用应能满足键盘扫描要求。
定时扫描工作方式是利用单片机内部定时器产生中断,CPU响应中断后对键盘进行扫描,并在有键按下时转入键功能处理程序。定时扫描工作方式的键盘硬件电路与编程
- 13 -
:基于单片机的电子密码锁设计
扫描工作方式相同。其本质是中断方式。
计算机应用系统工作时,并不经常需要输入,因此,无论是编程工作或定时工作,CPU经常处于空扫描状态。为了进一步提高CPU效率,可以采用中断扫描方式即只有在键盘有键按下时,才执行键盘扫描,执行该键功能程序。
键盘有键按下时,要逐行或逐列扫描,以判断是哪一个键按下。通常扫描方式有扫描法和反转法。扫描法是在判定有键按下后逐列(或行)置低电平,同时读入行(或列)状态出现非全1状态,这时在状态行,列交叉点的键就是所按下的键。扫描法的特点就是逐列(或行)扫描查询。这时,相应的行(或列)应有上拉电阻且接高电平。
扫描法要逐行(列)扫描查询,当所按下的键在最后行(列),则要经过多次扫描才能获得键值/键号。采用反转法时,只要经过两个步骤即可获得键值。(1)将D0~D3编程为列输入线,D7~D4编程为行输入线,并使I/O输出数据为0*H(即保证输出信号D7~D4为0000)。若有键按下,与门的输出端变为低电平,向CPU申请中断,表示键盘中有键按下。于此同时,D3~D0的数据输入到内存中某一单元(N)中存放。其中0位对应的是按下键的列位置。然后转第2步。(2)将第1步中的传送方向反转过来,即将D7~D4编程为输入线,D3~D0编程为输出线。使I/O口输出数据为N单元中的数(即D3~D0为按下键的位置),然后读入I/O口数据,并送入内存N+1单元存放,该数据的D7~D4位中0电平对应的位是按下键的行位置。最后,将N单元中D3~D0与N+1单元中D7~D4拼起来就是按下键的键值。 3.6 本章小结
本章主要介绍的是本设计的硬件结构设计,通过单片机相关的I/O口输入、输出来
实现相应的控制功能。还具体介绍了单片机的选择、复位电路、晶振电路、键盘电路、开锁电路、报警电路等的设计。
- 14 -
毕业设计(论文)
第4章:系统软件设计
本系统软件包括主程序模块、键盘扫描模块、时钟中断模块、智能报警模块、修改密码模块及延时程序模块。
该系统软件工作原理为:上电复位后,初始化各端口,标志位和有关寄存器,接着从单片机中读入密码,然后开始检测键盘是否有输入,如没有就不断检测,如果有输入就转到相应处理程序。例如按了设置键,则P3.3输出低电平,等输入原密码指示LED亮,接着如果输入了正确的原密码并按了确定键,P3.7输出低电平,可以输入新密码指示LED亮,接着输入新密码按确定键,P3.3、P3.7输出高电平,等输入原密码指示LED熄灭、可以输入新密码指示LED熄灭,程序转为复位后。如果在设置状态,输入了错误的密码并按了确定键,P3.4不断输出高电平报警。上电复位后按数字键8次,或按了小于8次数字键,再按了确定键则比较密码是否对,如果不对,P3.5开锁信号输出口输出低电平,锁不开,这时还可再输入两次,如还不对则P3.4不断输出高电平报警。如果输入对了,P3.5开锁信号输出口输出高电平,锁打开4秒钟后,程序转为复位状态。 4.1 主程序模块的设计
该模块的功能包括定时器及数据缓冲区初始化、本机初始密码设置、键盘扫描模块调用等功能。主程序模块是整个软件程序的核心。其程序框图如图4-1所示:
初始化
N=0
密码输入
正确? Y 输入新密码 修改密码 Y 错误输入报告 N 正常开锁
N=N+1
N N>=8?
Y 输出告警信号封锁输入口
图4-1 密码锁程序框图
- 15 -
:基于单片机的电子密码锁设计
TREATFLAG EQU 00H SECRETOK EQU 01H ERRTIME EQU 6AH NUMBERTIME EQU 6BH LOCKONTIME EQU 6CH MS10 EQU 6DH SCODE EQU 6EH
SECRETCODE EQU 40H INCODE EQU 30H BEEPOUT EQU P3.2 LOCKON EQU P3.5 WARNINGOUT EQU P3.4
;*******************主程序********************** ORG 0000H AJMP MAIN ORG 000BH AJMP TIME8SECOND
MAIN: MOV P1,#0FFH ;初始化端口,标志位,有关RAM MOV P3,#0FFH MOV SP,#70H MOV ERRTIME,#00H MOV NUMBERTIME,#00H CLR TREATFLAG CLR LOCKON CLR WARNINGOUT SETB SECRETOK
- 16 -