密码锁控制DOC.docx
- 文档编号:7859126
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:24
- 大小:61.55KB
密码锁控制DOC.docx
《密码锁控制DOC.docx》由会员分享,可在线阅读,更多相关《密码锁控制DOC.docx(24页珍藏版)》请在冰豆网上搜索。
密码锁控制DOC
烟台大学
课程设计
设计名称:
密码锁控制
学年学期:
2011——2012第二学期
课程名称:
单片机原理及应用
专业年级:
09级机械设计及其自动化
指导老师:
林娅红
小组成员:
孙田宝、陈小辉
隗纪强、马林起
机电汽车工程学院
2012.6.5
概述
本设计利用8051单片机的控制程序结合LCD,设计一个LCD密码锁,可以用在需要密码输入的应用场合。
本设计可以学习8051按键扫描输入、LCD显示、密码比较处理的设计方法。
1.功能分析及总体设计
本设计的密码锁具备的功能有:
(1)使用LCD显示器来显示密码输入的相关信息;
(2)可以设置四位数字(0~9)密码;内定另一组四位数字密码为“1234”;(3)密码输入正确则继电器启动2s,密码输入错误则发出警报声。
程序执行后工作指示灯LED亮,表示程序开始执行,LCD显示“PASSWARDAORBKEY”,按下操作键A或B动作如下:
操作键A:
设置新的四位数字密码;操作键B:
输入四位数字密码并作检查。
系统组成如图1.1所示。
MCU
按键系统
晶振电路
显示电路
开锁、报警系统
图1.1密码锁控制系统组成框图
2.硬件设计
2.1键盘扫描电路设计
本实验使用是的是矩阵式键盘扫描设计。
其方式包括三种,程序控制随机扫描方式、定时扫描方式、中断扫描方式。
我们采用的是第三种,因为第三种是最常用的方式,也是我们比较熟悉的一种,而且前两次扫描方式中,无键按下,也需要CPU不断扫描,极大地影响了CPU的使用效率,后者只有当有键按下时,才需要CPU去扫描键盘,大大提高了CPU的使用效率。
中断扫描方式的的接口电路如图
(1):
所有的行线经与门连接到单片机的INT0口,而列线在初始化时均置为0。
当有键按下时,INT0变为低电平,向CPU发出中断请求,若CPU开放外部中断0,则响应中断请求并执行中断服务程序,在中断服务程序中进行键盘的扫描。
对照图2.1.1的4×3键盘,说明线反转个工作原理。
首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
方法是:
向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。
如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。
判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。
方法是:
依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。
具体的功能设计如表2.1.1。
表2.1.1按键功能对照
按键
键名
功能说明
1-9键
数字键
输入密码
A键
重设密码键
设定新密码
B键
确定键
比较密码
2.2.1LCD1602
引脚图
2.2LCD液晶显示电路设计
LCD1602简介
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,市面上字符液晶绝大多数是基于HD44780液晶芯片,HD44780是带西文字库的液晶显示控制器,用户只需要向HD44780送ASCII的字符码,HD44780就按照内置的ROM点阵发生器自动在LCD液晶显示器上显示出来。
所以,HD44780主要适用于显示西文ASCII字符内容的液晶显示。
1602字符型LCD能够同时显示16*2即32个字符(16列2行)。
其内置192种字符(160个5*7点阵字符和32个5*10点阵字符),具有64个字节的自定义字符RAM,可自定义8个5*8点阵字符或4个5*11点阵字符。
1602通常有14条引脚线或16条引脚线两种,多出来的2条线是背光电源线和地线,带背光的比不带背光的略厚,控制原理与14脚的LCD完全一样,是否带背光在应用中并无差别。
本设计中采用带背光16引脚线的。
LCD1602主要技术参数:
显示容量:
16×2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×4.35(W×H)mm
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
表2.21LCD引脚对照表
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
1602模块内部主要由LCD显示屏、控制器、列驱动器和偏压产生电路构成。
控制器接受来自MPU的指令和数据,控制着整个模块的工作。
主要由显示数据缓冲区DDRAM,字符发生器CGROM,字符发生器CGRAM,指令寄存器IR,地址寄存器DR,忙标志BF,地址计数器AC以及时序发生电路组成。
模块通过数据总线DB0~DB7和E、R/W、RS三个输入控制端与MPU接口。
这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线接受MPU发来的数据和指令,从CGROM中找到欲显示字符的字符码,送入DDRAM,在LCD显示屏上与DDRAM存储单元对应的规定位置显示出该字符。
控制器还可以根据MPU的指令,实现字符的显示,闪烁和移位等显示效果。
CGROM内提供的是内置字符码,CGRAM则是供用户存储自定义的点阵图形字符。
模块字符在LCD显示屏上的显示位置与该字符的字符代码在显示缓冲区DDRAM内的存储地址一一对应。
LCD1602模块内部具有两个8位寄存器:
指令寄存器IR和地址寄存器DR,用户可以通过RS和R/W输入信号的组合选择指定的寄存器,进行相应的操作。
表2.2.2中列出了组合选择方式:
表2.2.2寄存器选择组合
RS
R/W
操作
0
0
将DB0~DB7的指令代码写入指令寄存器IR中
0
1
分别将状态标志BF和地址计数器AC内容读到DB7和DB6~DB0
1
0
将DB0~DB7的数据写入数据寄存器中,模块的内部操作将数据写到DDRAM或者CGRAM中的数据送入数据寄存器中
1
1
将数据寄存器内的数据读到DB0~DB7,模块的内部操作自动将DDRAM或者CGRAM中的数据送入数据寄存器中
1602提供了较为丰富的指令设置,通过选择相应的指令设置,用户可以实现多种字符显示样式。
下面仅简要介绍本次设计中需要用到的一些指令设置。
●清屏指令Cleardisplay
清显示指令将空位字符码20H送入全部DDRAM地址中,时DDRAM中的内容全部清除,显示消失,地址计数器AC=0,自动增一模式。
显示归位,光标闪烁回到原点(显示屏左上角),但不改变移位设置模式。
清屏指令码见表2.2.3。
表2.2.3清屏指令码
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
0
1
●进入模式设置指令Entrymodeset
见表2.2.4,进入模式设置指令用于设定光标移动方向和整体显示是否移动。
表2.2.4模式设置指令码
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
1
I/D
S
I/D:
字符码写入或者读出DDRAM后DDRAM地址指针AC变化方向标志。
I/D=1,完成一个字符码传送后,AC自动加1。
I/D=0,完成一个字符码传送后,AC自动减1。
S:
显示移位标志。
S=1,完成一个字符码传送后显示屏整体向右(I/D=0)或向左(I/D=1)移位。
S=0,完成一个字符码传送后显示屏不移动。
●显示开关控制指令Displayon/offcontrol
指令码见表2.2.5,该指令功能为控制整体显示开关,光标显示开关和光标闪烁开关。
表2.2.5显示开关控制指令码
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
1
D
C
B
D:
显示开/关标志。
D=1,开显示;D=0,关显示。
关显示后,显示数据仍保持在DDRAM中,开显示即可再现。
C:
光标显示控制标志。
C=1,光标显示;C=0,光标不显示。
不显示光标并不影响模块其他显示功能。
显示5*8点阵字体时,光标在第八行显示;显示5*10点阵字符时,光标在第11行显示。
B:
闪烁显示控制标志。
B=1,光标所在位置会交替显示全黑点阵和显示字符,产生闪烁效果;B=0,光标不闪烁。
●功能设置指令Functionset
功能设置指令用于设置接口数据位数,显示行数以及字形。
指令码见表2.2.6。
表2.2.6功能设置指令码
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
1
DL
N
F
*
*
DL:
数据接口宽度标志。
DL=1,8位数据总线DB7~DB0;DL=0,4位数据总线DB7~DB4,DB3~DB0不使用,此方式传送数据需分两次进行。
N:
显示行数标志。
N=0,显示一行;N=1,显示两行。
F:
显示字符点阵字体标志。
F=0,显示5*7点阵字符;F=1,显示5*10点阵字符。
1602模块内部设有上电自动复位电路,当外加电源电压超过+4.5V时,自动对模块进行初始化操作,将模块设置为默认的显示工作状态。
初始化大约持续10ms左右。
初始化进行的指令操作为:
●清显示
●功能显示
DL=1:
8位数据接口。
N=0:
显示一行。
图2.2.2LCD显示电路
F=0:
显示5*8点阵字符字体。
●显示开/关控制
D=0:
关显示。
C=0:
不显示光标。
B=0:
光标不闪烁。
●输入模式设置
I/D=1:
AC自动增一。
S=0:
显示不移位。
但是需要特别注意的是,倘若供电电源达不到要求,模块内部复位电路无法正常工作,上电复位初始化就会失败。
因此,最好在系统初始化时通过指令设置对模块进行手动初始化。
LCD1602电路
如图2.2.2,80C51的P0口接1602的8位数据线,通过输出数据控制1602显示不同的提示字符。
1602本身内置各种字符,还可以自定义显示字符。
本设计中根据不同场合1602会显示各种提示字符。
P2.0~P2.2接1602控制端,其中P2.2接使能端E,写操作时,使能端下降沿有效。
P2.1接读写控制端R/W,R/W=0,读操作;R/W=1,写操作。
P2.0接寄存器选择端RS,RS=0,写操作时指向指令寄存器,读操作时指向地址寄存器;RS=1,无论读操作还是写操作都指向数据寄存器。
LCD1602的VSS为电源地,需接地;VDD为电源电压;V0为LCD驱动电压,接电位器,通过调节电位器控制显示的亮度,使LCD显示清晰而无黑影。
背光电源线LCD正负两端分别接电源和地即可。
2.3发声电路设计
图2.3.1发声电路图
AT89C51
P3.1
发声部分的电路如图2.3.1,就是用P3.1口控制一个有源蜂鸣器发声,作为提示音或报警音。
程序设定为每当识别到有一位按键被按下时,蜂鸣器发声0.1S;密码错误时每次停顿0.5S发声1S。
蜂鸣器有两个引脚,其中长脚为正极,短脚为负极。
其发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它。
由于单片机I/O引脚输出的电流较小,基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,一般使用三极管来放大电流就可以了。
本设计中使用三极管9012,P3.1口高电平时三极管截至,蜂鸣器不发声;P3.1口低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
2.4.开锁控制电路
图2.4.1开锁控制电路图
AT89C51
P3.0
开锁控制电路如图2.4.1,电路的功能就是在输入正确的密码后开锁。
系统使用单片机P3.0引脚发出信号,经三极管放大之后,由继电器驱动电磁阀将锁打开。
在现代自动控制设备中,都存在电子电路(弱电)与电气电路(强电)的相互连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(如电动机、电磁铁、电灯等),另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和工作人员的人身的安全。
继电器便能完成这一桥梁作用。
继电器实际上是用较小的电流去控制较大电流的一种“自动开关”,在电路中起着自动调节、安全保护、转换电路等作用。
在大多数情况下,继电器就是一个电磁铁,这个电磁铁的衔铁可以闭合或断开一个、数个触点。
当电磁铁的绕组中有电流通过时,衔铁被电磁铁吸引,因而就改变了触点的状态。
继电器也是感性器件,所以不能用单片机的I/O口直接控制,而且必须在三极管等控制器件上加反相保护电路。
本设计中单片机通过P2.7引脚连接一只作为电子开关的PNP型三极管9012来驱动继电器,继电器的开、关完全由三极管的基极电平进行控制。
当P2.7为高电平时,PNP型三极管截止,继电器不工作;反之P2.7为低电平时,三极管导通,继电器得电吸合。
设计中使用的继电器型号是松川833H,线圈工作电压直流5V,有5个引脚,如图2.4.2。
其中1、3引脚是线圈两端,一端接三极管,另一端接地,不分正负。
4是常闭触点,不工作时导通。
5是常开触点,继电器吸合后才导通,接发光二极管正极。
2是继电器两个触点的公共极点,接个小电阻后连高电平。
2.5晶振电路
图2.5.1晶振电路
单片机本身是一个复杂的同步时序电路,为保证同步工作方式的实现,必须提供时钟信号,以使其系统在时钟信号的控制下按时序协调工作。
单片机的时钟电路由振荡电路和分频电路组成,其中振荡电路由反向器以及其并联外接的石英晶体和电容构成,用于产生振荡脉冲。
而分频电路则用于把振荡脉冲分频,以得到所需要的时钟信号。
晶振是晶体振荡器的简称,它用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十,高级的精度更高。
电路中的晶振即石英晶体振荡器,它与电容构成振荡回路,为片内放大器提供正反馈和振荡所需的相移条件,从而构成一个稳定的自激振荡器。
如图2.5.1所示,80C51芯片中的高增益反向放大器输入端为引脚XTAL1,输出端引脚为XTAL2。
通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(一般取30pF)。
这两个电容叫晶振的负载电容,它是根据晶振厂家提供的晶振要求负载电容选值的;换句话说,晶振的频率就是在它提供的负载电容下测得的,能最大限度的保证频率值的误差,也能保证温漂等误差。
图2.6.1电路总图
2.6电路连接总图
3.软件设计
系统的软件设计采用汇编语言编码。
设计方法是先用文本编辑器编写源码,然后用软件KeilC51编译,如果没有错误,可连接生成.HEX格式的文件(需事先在KeilC51中设置)。
如果有错误则无法连接,但可在生成的.OBJ文件中找到代码错误的地方,便于修改。
图3.1.1主程序流程图
当然也可以直接在Keil中编码。
生成的HEX文件是记录文本行的ASCII文本文件,在HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。
HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用HEX文件。
该过程可由软件protues模拟仿真。
3.1系统主程序
系统的主程序如图3.1.1所示。
由于用户在使用系统的过程中,可能在任何时刻按下任何按键,而程序都必须对此作出正确响应。
所以主程序流程的主要思路是是根据按键的不同进行不同的程序处理,下面具体介绍主程序的流程。
3.1.1初始化及按键识别
系统的初始化包括堆栈起始地址的设定,定时/计数器的设定,液晶显示模式的设定,一些自定义数据空间的初始化,蜂鸣器初始化发声等操作。
系统初始化并读取密码完成后,液晶显示"PasswordAorB",提示用户可以输入密码。
此时程序即不断测试按键,检查是否有按键被按下。
如果有,则进行按键识别;行列扫描法识别出的键位与对应键码值如表3.1.1所示。
表3.1.1
键值
1
2
3
4
5
6
键码
0EEH
0DEH
0BEH
0EDH
0DDH
0BDH
键值
7
8
9
A
0
B
键码
0EBH
0DBH
0BBH
0E7H
0D7H
0B7H
如果没有按键按下,或者按下的按键没有被识别,BUFF赋值0FFH,并跳转至按键测试。
实际程序运行时,绝大部分时间都在测试按键,等待用户输入。
3.1.2开锁键处理
该程序段是程序识别到开锁键被按下后的流程。
程序比较输入的密码是否与初始密码一致。
如果相同,则前面输入的密码正确,可以开锁。
如果不同,说明密码错误,此时系统返回提示,无法开锁。
开锁过程就是将P2.7口置0,继电器得到低电平就会自动吸合,点亮发光二极管,整个过程可持续2s,然后P2.7口置1,清空密码缓冲区,返回按键提示,重新检测新的按键。
3.2系统相关子程序
3.2.1按键识别子程序
本设计中采用的4*3矩阵键盘共有12个键位,4根行线连P1口
图3.2.1按键识别流程图
低四位,3根列线连P1口高四位。
在按键未被按下时,每一条行线与线列线的交叉处互不相通,当某个按键被按下后,该按键所在的行线和列线连通。
这样在P1口的高4位和低4位中各有一位互相连通。
通过行列扫描检测出这两位,即可识别出被按下的键。
具体识别方式和按键功能完全由软件自定义。
流程图如图3.2.1。
系统具体使用的键盘是一体式薄膜键盘,更轻薄更便捷,有印刷字符,无需连接上拉电阻。
但键盘内部无电流通过,行扫描之前需给4根行线赋高电平,如果某行和某列相通,则高电平变低,可知该行有按键被按下。
然后进行列扫描,同理可识别出按键所在列。
确认行和列按键即被识别出来。
3.2.2LCD显示子程序
点阵字符型LCD显示模块在正常使用之前,一般需要进行初始化,否则模块无法正常显示。
初始化方法有复位电路初始化和软件初始化两种。
图3.2.2为软件初始化过程流程图。
图3.2.2软件初始化的实现过程流程图
4.设计小结
本设计利用单片机AT89C51作为主控芯片,配合液晶显示器LCD1602,4*3矩阵薄膜键盘,蜂鸣器,继电器以及其他外围电路,用单片机汇编语言编写的控制程序,成功设计出一款利用密码开锁,可以随时改密,丰富声光提示信息,具有适用价值的电子密码锁。
本系统发挥出单片机应有的价值,完成了电子密码锁的基础功能。
利用单片机控制矩阵键盘输入密码,液晶显示器显示英文字符,继电器开锁,蜂鸣器发声等部件都运转良好,密码锁运行的效果也可以正确呈现。
本次课程设计历时两周,收获颇丰。
从前期的功能设计,电路设计,到软件上每一条语句的调试,期间遇到许许多多的难点,众多意想不到的问题。
克服这些困难,需要理论和实践的结合,把知识融入到设计的每个角落。
最终完成整个设计,做出实实在在的东西,自是欣喜不已。
在这里要感谢林娅红林老师的指导,期间我们遇到了许多的疑难,林老师都能给我们细心指导,使我们少走弯路,完成本次课程设计。
附录:
CMD_TEMPEQU20H;定义指令暂存寄存器
DATA_TEMPEQU21H;定义数据暂存寄存器
CMDW_ADDREQU0F000H;定义指令端口写地址
CMDR_ADDREQU0F002H;定义指令端口读地址
DATAW_ADDREQU0F001H;定义数据端口写地址
DATAR_ADDREQU0F003H;定义指令端口读地址
ORG0000H;复位地址
LJMPSTART;转初始化
ORG0003H;中断入口地址
LJMPAnJian;转中断服务子程序
ORG0060H;定义主程序首地址
**************************主程序*****************************
MAIN:
MOV30H,#01H;定义初始密码
MOV31H,#02H
MOV32H,#03H
MOV33H,#04H
SETBP2.5
LCALLDELAY
LCALLINIT_LCD
TiShi:
MOVCMD_TEMP,#0C0H
LCALLWR_CMD
MOVR7,#14H;R7为显示数据个数
MOVR6,#0;表头地址
MOVDPTR,#TAB1
TS1:
MOVA,R6
MOVCA,@A+DPTR
MOVDATA_TEMP,A;从A把数据传给写数据入口参数DATA_TEMP
LCALLRD_DATA
MOVP1,#0F0H;定义P1口初状态
LCALLDengDai
DJNE4AH,#0AH,AorB;判断输入的值为A或B
LJMPLOOPA
AorB:
DJNE4BH,#0BH,TiShi
LJMPLOOPB
END
***********************功能子程序*************************
LOOPA:
MOVR2,#04H;按键循环次数
MOVR0,#30H;新密码存储地址
PA:
LCALLDengDai
LCALLXianShi
MOVA,R5
MOV@R0,A
INCR0
DJNZR2,PA
LJMPTiShi
LOOPB:
MOVR2,#04H
MOVR0,#33H
MOVR1,#50H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码锁 控制 DOC