模拟密码锁 完整版 JJ

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

沈阳工程学院

微机原理及应用课程设计成绩评定表系(部):电气工程系班级:发电本093 学生姓名:文鹏

中文摘要

随着科学技术的发展和高新技术的广泛应用,电子技术在国民经济的各个领域所起的作用越来越大,并深深地渗透到人们的生活、工作、学习的各个方面。同时在工业领域,为防止他人误操作而利用电子锁进行加密的机械控制也得到了广泛的应用。本设计就是利用8255、8254、电子发声单元和发光二极管等制作了一款多功能密码锁。在输入密码正确的条件下,控制电控锁开启(用发光二极管亮来代替),同时显示”O”字样;当输入密码错误时,发出错误警告声音,同时显示”C”字样,并报警。密码锁的设计,硬件方面,最难的就是键盘值的确定及LED数码管的显示,本设计采用扫描法来解决键值读取;软件方面,最主要的则是取出键盘输入值,和已知密码比对等。

关键字:模拟密码锁,扫描法,密码比对

目录

课程设计任务书

课程设计成绩评定表

中文摘要..........................................................................I 1 总体设计.. (1)

1.1 模拟密码锁原理 (1)

1.2 初步设计思路 (1)

2 硬件设计 (2)

2.1 LED数码块模板 (2)

2.2 按键模块 (4)

2.3 报警模块和发光二级管模块 (5)

3 软件设计 (6)

3.1 软件概要设计 (6)

3.2 功能模块详细设计 (6)

3.3 程序流程图 (9)

4 系统测试分析 (11)

总结体会 (12)

致谢 (13)

参考文献 (14)

1 总体设计

1.1模拟密码锁的原理是:

从键盘输入一组密码,CPU把该密码和设置密码比较,对则将锁打开,显示“O”字样,同时数码灯亮;错则LED显示“C”字样,并发出声音报警。

1.2初步设计思路如下:

1.输入密码用矩形键盘。

2.LED数码管显示输入密码,采扫描法确定具体按键。

3.用发光二极管模拟锁的情况,锁时发光二极管灭,打开时发光二极管亮。

4.输入密码错误时报警。

软件的设计主要包括矩形键盘键值的读取、LED扫描输出程序、密码判断程序和报警程序。系统硬件电路图如1.1所示:

1.1 系统硬件电路

2 硬件设计

根据设计思路,硬件电路可通过实验平台上的一些功能模块电路组成,由于实验平台上的各个功能模块已经设计好,用户在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。硬件电路由LED数码管显示模块、按键模块、发光二极管电路和蜂鸣器模块组成。

2.1 LED数码块模板

实验平台上提供一组四个LED数码管。七段LED数码管由名称为abcdefg的7个笔画段和一个圆点dp组成,这7个笔画段在点亮时,可以显示数字和一些简单的西文字符。本设计用8255的PB口作为输出,和7段LED数码管的abcdefg和dp相连,8255的A口低四位PA0~PA3和LED列线连接,共同来控制内容的显示。数码灯的示意图如图2.1所示。

图2.1 LED数码管正面图

本程序是用的共阳极,从上图可以看出,要使数码管显示数字,有两个条件:

(1)要在COM端加正电源;

(2)要使(a、b、c、d、e、f、g、dp)端接低电平或”0”,这样才能显示。

LED数码管上显示的数字,必须经过转换,才能显示正确的字样。常用字符共阴极、共阳极时的段码即编码表,如表2.1所示。

表2.1 段码表

本设计中,LED数码管的连线如图2.2所示。由于a、b、c、d、e、f、g、dp分别和8255B口的PB0~PB7相连(8255的控制字假设初始化为81H)。那么假如我现在已经选中了一个数码管,如果我要输出一个‘0’,那么我只要写下如下代码段:

MOV DX,MY8255_B ; MY8255_B为B口的端口地址

MOV AL,3FH

OUT DX,AL

这样,即可在该选中数码管上显示一个字符‘0’。

图2.2 LED灯示意图

2.2 按键模块

实验平台提供了2*4的矩阵键盘。为了检测键盘是否有键按下及具体按下了那个键,本设计使用列扫描法。分两步:

(1)查询是否有键按下

将所有列线置成低电平0,然后通过行线输入全部行值,若读入的行值全是1,则说明没有任何一个键按下;若读入的行值不全是1,则说明有键按下。也就是说,在键盘识别的开始先进行全扫描,若有键按下,则必须判别是哪个键按下。 (2) 一旦发现有键按下,则采用逐列扫描的办法来确定究竟是那个键被按下。先扫描第一列,也就是使它输出低电平0,其余的列线为高电平1,然后读入行值。若读入的行值中有一位为低电平0,则说明在此行的一个行、列交叉处有键被按下。若读入的行值全是1,则说明这一列所有键都未被按下。接着扫描第二列。依此类推,直到扫描完全部的行线为止。若在扫描过程中发现非全1的行值,就能找出被按下键的位置。

在处理按键模块中,必须要解决的问题是,如何解决键抖动、重键、一次按键多次处理,及键值的确定。前面三个问题,用软件的方法,很容易实现。可以用多次扫描,延时来消除干扰。而键值的确定,也使用了一点儿技巧。键的行列值不是该键所对应的键值,那么CPU如何根据行、列值得到所按下键的键值呢?最方便的方法是利用按键所在的行、列值,形成一个查表值。然后,查表得到相应的键值。

本设计用8255的C口低四位PC0~PC3连接键盘的行线,接收键盘的输入;A口的低四位PA0~PA3作为和数码管及键盘的共阴极线连接。键盘物理结构示意图如图3.3。

图2.3 键盘物理结构

键盘和8255的电路连线如图2.4所示。

相关文档
最新文档