酒店电子保险箱设计报告15154.pdf

上传人:得** 文档编号:79383782 上传时间:2023-03-21 格式:PDF 页数:39 大小:1.41MB
返回 下载 相关 举报
酒店电子保险箱设计报告15154.pdf_第1页
第1页 / 共39页
酒店电子保险箱设计报告15154.pdf_第2页
第2页 / 共39页
点击查看更多>>
资源描述

《酒店电子保险箱设计报告15154.pdf》由会员分享,可在线阅读,更多相关《酒店电子保险箱设计报告15154.pdf(39页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、1/39 微机应用设计与实践课程设计 设计课题酒店电子保险箱 2012 年 01 月 07 日 2/39 目录 一、设计任务与实现目标.错误!未定义书签。1.4 基本设计要求:.错误!未定义书签。1.5 功能扩展提示:(选做).错误!未定义书签。设计说明书内容纲要:.4 二、总体设计方案与方案论.错误!未定义书签。2.1 系统总体框架.错误!未定义书签。2.2 设计方案与方案论证.错误!未定义书签。2.3 方案选择.错误!未定义书签。2.4 方案论证.错误!未定义书签。三、总框图及总体软件设计说明.错误!未定义书签。3.1 总流程图.错误!未定义书签。3.2 总体软件设计说明.错误!未定义书签

2、。四、系统资源分配说明.错误!未定义书签。4.1 硬件资源分配.错误!未定义书签。4.2 微处理器内部存储单元分配及数据定义说明.错误!未定义书签。五、局部程序设计说明.错误!未定义书签。5.1 拆字模块.错误!未定义书签。5.2 错误提示:显示“E”错误!未定义书签。5.3 显示模块.错误!未定义书签。5.4 键盘扫描模块.错误!未定义书签。5.5 并字模块描述:.错误!未定义书签。5.6 开门以及门闩模块描述:.错误!未定义书签。5.7 密码修改描述:.错误!未定义书签。5.8 功能键流程图:.错误!未定义书签。5.9 12S 无动作描述:.错误!未定义书签。5.10 15 分钟锁键描述:

3、.错误!未定义书签。5.11 精确时钟流程图:.错误!未定义书签。六、系统功能与操作说明.错误!未定义书签。七、调试记录及调试结果.错误!未定义书签。1.拆字模块.错误!未定义书签。2.错误显示模块.错误!未定义书签。3.显示刷新.错误!未定义书签。4.键盘获取.错误!未定义书签。5.并字调试.错误!未定义书签。6.匹配调试与开门调试.错误!未定义书签。7.门闩开关调试.错误!未定义书签。8.管理员控制码输入.错误!未定义书签。9.密码修改.错误!未定义书签。10.时间调校.错误!未定义书签。八、设计总结.错误!未定义书签。附件 1:程序.25 附件 2:原理图 39 3/39 一、设计任务

4、1.1 设计课题:酒店电子保险箱 1.2 设计目的:通过小型微机应用产品的设计与调试过程,运用微机原理及接口技术课程所学的基本知识,在设计中加以应用,进而得到理解、巩固和提高发展,通过实践的过程学习掌握分析与解决实际问题的方法与手段,提高设计、编程与调试的实际动手能力,作为工程技术工作的一次基本训练。1.3 设计任务:设计一个以单片机为核心的酒店电子保险箱,能在酒店客房中提供给客户使用。具有密码开锁,密码修改、密码输入安全设置、保险箱使用时间等功能。编程并在单片机实验板上模拟调试实现。1.4 基本设计要求:1、开机进行接口部件及数码显示器、指示灯、讯响器等自检。2、密码分为管理员密码和用户密码

5、:管理员密码为 8 位 09 的数字,而用户密码为 6 位 09 的数字。3、设置“0”“9”的数字键及“OP”、“LO”、和“CL”等功能键。对按键输入的信号须进行软件消抖处理。4、保险箱的门有两种状态:打开状态和闭合状态。5、工作模式:(1)常态:数码管显示时钟。(2)开锁模式:需输入 6 位数字为 09 的用户密码或输入 8 位数字为 09的管理原密码进行开锁。然后按“OP”键开门。(3)用户修改密码模式:在保险箱开门状态下,由用户自行输入 6 位数字为 09 的密码作为新密码,用户初始密码为 000000。(4)管理员操作模式:保险柜开门状态下输入 8 位 09 的管理员密码,可以进行

6、调校实时钟、恢复用户初始密码和修改管理员密码、设置保险箱使用日期等功能。6、常态下,八位 LED 7 段数码管显示时钟信息可包括小时、分钟、秒钟。7、常态下,当保险箱关门状态下,只要按下 09 的数字键则进入密码输入状态,每按一个数字键使数码管从左到右逐次显示“”。8、如果输入密码 6 位后按“OP”键则与用户密码进行匹配,匹配一致则开锁;如果输入密码 8 位后按“OP”键则与管理员密码进行匹配,匹配一致则进入管理员操作模式。9、在密码输入状态下,输入未满 6 位或 8 位数字密码,按“OP”键则不作响应。10、输入的用户密码如果匹配一致则驱动电动开门电磁铁线圈通电 1S,用户拉门把可以打开保

7、险箱;如果输入不正确,则提示“E”,3S 后返回常态,等待下一轮的密码输入。11、密码输入过程可以按“CL”键取消输入返回常态。12、用户可以在保险箱开门状态下,通过输入 6 位 09 的数字后按“LO”键进行设置新的用户密码。13、当保险箱处于开门状态下,输入管理员密码后按 OP 键进入管理员操作模式下,输入 01 功能码代表修改管理员密码;输入 02 功能码代表恢复用户初始密码;输入 03 功能码代表实时钟的调校设置,利用数字 3 和数字 4 按键实现对时和分钟的增量式调校,持续按键超 0.5S 时实现快调功能;按“CL”键退出4/39 管理员操作模式。1.5 功能扩展提示:(选做)1、非

8、常态下 12S 内无按键操作则自动返回常态;2、管理员操作模式下,03 代表设置保险箱使用日期功能,如果开始日期和结束日期均为 0:0:0,表示日期不受限制;04 代表查询本次开箱前 5 次的日期和时间。3、如果连续五次输入用户密码错误则报警且锁键15 分钟;4、其他功能扩展。1.6 设计环节及进程安排:1、布置课题,明确任务、总体方案设计 2 天 2、基本功能控制程序设计及调试 3天 4、程序功能完善、改进、扩展 3天 5、答辩及编写设计说明书 2天 设计说明书内容纲要:1、.设计任务 2、总体方案设计与方案论证 3、总框图及总体软件设计说明 4、系统资源分配说明 5、局部程序设计说明 6、

9、系统功能与操作说明 7、调试记录及调试结果 8、课程设计总结 9、附录:源程序清单(详细注释)计算机系统结构教研室 2012 年 12 月 5/39 二、总体设计方案与方案论 2.1 系统总体框架 酒店电子密按键扫描 拆字送显缓 更新显示 开门动作 锁键 管理员部分 密码修改 用户部分 共用部分 无操作 门闩动作 时钟部分 密码匹配 取消退格 输入送缓存 无操作模式 管理员操作 进入 进入 操作模式 修改用户密码 修改管理员密码 用户密码初始 错误动作 时间调校 6/39 2.2 设计方案与方案论证 整个程序采用标志位引导方式实现程序功能,并且将程序模块化,循环扫描各服务子程序。更新模块-数码

10、管动态扫描子程序 取显示缓冲单元的内容,找到其在段码表中的段码值及位置即键号,分别对应传送到 82C55 的 A、B 口,使所得值显示在数码管上。时钟显示模块 当常态标志位为 0 时,数码管上显示时钟,格式为时-分-秒,将双字节时钟单元拆字并传送到显缓 30H-37H 对应的各个单元。键盘扫描模块 采用线反转法获得行列码,在键码表中找到对应的行列码的位置即键号,并采用滚动滤波法对按键进行消除抖动。新键号存在2EH,旧态放在 2FH 单元中。密码匹配模块 在密码匹配允许下进行密码比对。密码修改模块 在密码修改允许下进行密码修改。开门及门闩模块 根据开门标志位决定对电磁铁线圈通电 1S 与否。门闩

11、是一个输入器件。用户部分 有键按下,转为非常态,等待下一位密码输入,为 6 位密码则进入用户模块操作。管理员部分 输入密码为 8 位则进入管理员模块操作。01、02、03 为管理员功能模块。12S 无操作返回及其他拓展部分 在常态下,若没有按键按下,开始计时,时间到 12S 左右,程序返回常态。若有则重置定时初值。密码输入出错五次,进行锁键。2.3 方案选择 拆字部分:方案一:只要检测到按键按下则显示“”,否则显示实时钟。方案二:给定单元作为模式选择、判断。拆字时按照不同模式给以不同程序段处理。常态:实时钟显示;开锁态:显示“”;管理员状态:显示功能或“”、或实时钟。密码存储部分:方案一:单个

12、存储单元储存单位密码。方案二:由于只用到简单数码键作为密码,所以可以使用并字将两个密码存储在同一个单元。7/39 2.4 方案论证 拆字部分:方案一程序简单,占用存储单元较少。方案二程序较长,所需存储单元单元较多。但是,考虑到用户的需求,尤其是老年用户的记忆需要。所以牺牲一定存储单元是有必要的。综上所述,选择方案二。密码存储部分:方案一:代码编写简单。方案二:代码编写较之前复杂。在密码类型简单情况以及 RAM 单元够用情况下,没有太大优势。但是在密码类型较多以及 RAM 单元紧 X 情况下,优势非常明显。并且为后期的拓展提供了方便。综上所述,选择方案二。三、总框图及总体软件设计说明 3.1 总

13、流程图 开始初始化设置错误显示子程序显示刷新子程序键盘按键获取子程序键盘消抖子程序密码输入子程序拆字子程序并字子程序密码匹配子程序开门子程序密码修改子程序时间设置子程序门闩开关程序 8/39 3.2 总体软件设计说明 本设计采用汇编语言编程。系统在上电复位后,程序开始运行,经过初始化,在无任何操作的情况下,八位数码管显示实时钟。程序循环时对键盘进行扫描。常态有键按下时,当键号为 0 到 9 这十个数码键时则输入密码锁的密码。非常态时,不同的功能键对应不同处理,同时,12秒无按键按下,返回常态显示实时钟。当密码输入满六位或者八位后,按下OP 键,进入密码匹配程序进行输入的密码与原存储密码判断是否

14、一致,若一致说明密码正确,循环主程序时启动开门子程序 KM 执行开锁动作,点亮二极管 P1.5 一秒,循环主程序时启动子程序SWITCH 拨下 SW0 进行开门,开门指示灯 L8 亮,返回常态显示实时钟。若是六位密码匹配正确后开门,则是用户操作模式,用户可进行密码修改,连续两次输入密码,并按下LO键进行确认修改。程序判断两次密码是否相同,若相同,用户密码修改成功,若不同密码修改失败。当密码输入满八位后,按下 OP 键,进入管理员密码匹配程序进行输入的密码与原存储密码判断是否一致,若一致说明密码正确,进入管理员模式,此时再次输入管理员密码进入管理员模式,按键按下01或02或03进入不同功能模式。

15、01是进行管理员密码修改,管理员可进行密码修改,连续两次输入密码,并按下OP键进行确认修改。程序判断两次密码是否相同,若相同,管理员密码修改成功,若不同密码修改失败。02是进行管理员初始化用户密码初始化,按下02功能号后再按确认键OP进行用户密码初始化。03是实时钟的设置,利用数字 3 和数字 4 按键实现对时和分钟进行调校,连续按下0.5S 后实现时钟与分钟快调。在管理员模式下,按下 CL 键,程序将回到常态显示实时钟。若有任何不一致说明密码不正确,循环主程序时启动错误显示子程序 CW,使八位数码管最右位显示E三秒,返回常态显示实时钟。若五次输入密码错误,程序将通过数码管显示时时钟,发出报警

16、,并锁定键盘输入十五分钟。9/39 四、系统资源分配说明 4.1 硬件资源分配 1、4*4 键盘按键分配 K0K9 为 09 的数字键盘 KA 为 OP 键 KB 为 LO 键 KC 为 CL 键 KD 为 TG 键 2、指示灯分配 L5 灯为开锁一秒指示灯(图一)L8 灯为开门状态指示灯(图二)(图一)(图二)4.2 微处理器内部存储单元分配及数据定义说明 27H.0 并字允许标志位,可并字置 1 27H.1 普通密码匹配模式标志为,为 0 进行用户密码匹配,为 1 进行管理员密码匹配 27H.2 开门允许标志位,可开门置 1 27H.3 错误标志位,错误置 1 27H.4 键盘获取方式标志

17、为,0 为密码输入模式,1 为管理员控制方式输入模式 27H.5 状态标志位,0 为常态,1 为非常态 28H.0 控制码存放标志位,0 存放在 5AH,1 存放在 5BH 28H.1 密码二次输入标志位,为 1 未进行二次输入 28H.2 密码修改标志位,为 1 为进行密码修改输入 28H.3 门状态标志位,为 1 则门开着 28H.4 修改密码允许位,为 1 进行密码修改 0 1 2 3 4 5 6 7 8 9 OP LO CL TG 10/39 28H.5 时间调整允许标志位,可修改置 1 28H.6 键盘锁定标志位,为 1 锁定,不允许获取键盘输入 29H2FH 消抖单元 30H37H

18、 显示缓冲单元 38H3CH 时间记录存放单元 3DH 存放错误次数 3EH 锁键分钟数设置 3FH 快调计时 0.5S 存储单元 40H42H 用户密码存储区 43H46H 管理员密码存储区 48H4BH 输入密码存储区 4CH4FH 二次输入密码存储区 50H57H 键盘读入存储区 58H 密码位数存储单元 59H 密码存放地址存储单元 5AH 控制方式首位输入存放单元 5BH 控制方式次位输入存放单元 5CH5DH 3S 延时存储单元 60H 键盘扫描读入值存储单元 61H 键号值 62H 键盘获取存储单元 63H 压缩密码位数存放单元 64H 密码匹配暂存存储单元 65H 12S 计数

19、存储单元 五、局部程序设计说明 5.1 拆字模块 拆字流程图:11/39 拆字&错误27H.5=0?实时钟27H.4=0?5AH-37H5BH-36H显示 01.02.03密码输入位数存58H,以密码输入位数显示“-”27H.3=0?出错,先对30-37H送暗码,然后在30H 上显示“E”,延迟 3s返回Y 常态N 非常态Y 密码输入N 控制码输入N 密码错误Y 密码正确 拆字模块描述:进入拆字模块,先把显示缓冲单元 30H-37H 赋值#12H,灭显示。接着判断 27H.5 的值,检测当前状态若为 0 表示当前状态是常态,进入 CZ1 进行常态拆字时分秒,显示缓冲单元存放时分秒。不为 0 则

20、跳转到 FCT 检测键盘输入模式,其标志位为 27H.4,为 0 则为密码输入部分的拆字,根据按键次数把 放入显示缓冲单元中,从 30H 开始放起,最多放到 37H。为 1 则为管理员功能号输入拆字,将 5AH 与 5BH 中的值显示在 37H 与 36H 中,可显示 01、02、03。5.2 错误提示:显示“E”错误显示 E 描述:根据标志位 27H.3 判断是否启动 CW 子程序。为 1 则进入子程序,灭显示缓冲单元,然后在 30H 单元存入#0EH,在数码管最右一位显示E,用循环递减的方式显示E三秒后,清标志位 27H.3,清按键密码存储单元,返回常态显示时钟,清按键数。5.3 显示模块

21、 显示模块描述:系统使用共阴极数码管显示。实验板采用动态显示方式,每次点亮一个 LED 显示器,延时 1MS 时间再点亮下一个 LED 显示器,周而复始,8 个 LED 显示器轮流动态扫描。利用人视觉暂留效应,看起来好像几个显示器上“同时”显示不同的字符。把显示缓冲单元的值依次从八位数码管从右到左显示。为防止窜显,我们在点亮数码管前先送暗码给数码管,且在数码管显示一秒后也对数码管送暗码。此时数码管就不会出现窜显现象。5.4 键盘扫描模块 键盘扫描流程图:12/39 KEYINPUT是否有键按下28H.6=0?键盘锁定OP?LO?CL?TG?按下的键存62H12s无动作?27H.3=0?错误标志

22、位28H.5=0?时间调校允许标志位置非常态返回常态28H.2=0?密码修改标志位27H.4=0?键盘输入模式CLR28H.6设置为密码输入模式输入密码 输入控制码Y是否按下0-9N多分支跳转YY正确YNYNYYN返回返回主程序N没有锁定无键有键按下 键盘扫描模块描述:13/39 采用线反转法扫描得到键盘行列码,根据事先编好的键码表(按国际键盘分布排列)对应行列码查表得到键号,之后根据键号做相应操作(结合其他子模块),功能键则处理相应功能,数字键则相应存储、输出数字量。理论上当按键按下或弹起时,可以相应的产生低电平或高电平,但实际并非如此。键盘按键一般都采用触点式按键开关。按键被按下或释放时,

23、按键触点的弹性会产生抖动现象。即当按键按下时,触点不会迅速可靠地接通,当按键释放时,触点也不会立即断开,而是要经过一段时间的抖动才能稳定下来,按键材料不同,抖动时间也各不相同。按键抖动可能导致单片机将一次按键操作识别为多次操作,一般采用硬件电路或软件程序来消除。本次用软件消抖,即滚动滤波的方式消抖。并字流程图:并字27H.0=0?输入密码首地址给R0,取压缩密码位数28H.1=0?再输入密码存放地址为4BH存放首地址为4FH并字返回N 无并字Y 并字允许N 二次输入Y 第一次输入 5.5 并字模块描述:在并字允许的情况下,确认输入八位或六位情况下,将两个键号压缩放置在一个单元。第一次输入放在以

24、4BH 为首地址的单元,第二次从 4FH 开始。匹配模块流程图:14/39 密码匹配并字允许27H.0=0?28H.2=0?27H.1=0?6/828H.1=0?进行 6位密码匹配进行 8位密码匹配进行两次输入密码匹配(分为8,6)Ok?Ok?28H.3=0?开门标志位27H.2置1,返回常态错误标志位置1(27H.3)返回常态允许开门返回常态控制码输入SETB27H.4Ok?Y允许密码修改标志位置 15A、5B全亮错误标志位置1清空并字允许(58H)=0(59H)=57H(3DH)-13DH=0?锁键盘报警15minSETB28H.6(3DH)给 5返回NY正常匹配N密码修改匹配NYYNY二

25、次密码输入YNNYYNYN 15/39 匹配模块描述:由于本设计采用二次密码确认新密码,所以匹配除了正常的开锁匹配,还包括了修改密码匹配。匹配采用的是一一比对的方法,只要一次比对失败,就退出改子程序,并带上错误标志位。开门以及门闩流程图:开门开门标志位27H.2=0?L5亮1SN返回Y密码修改28H.4=0?27H.1=0?NN改8位SWITCH27H.2=0?读入 C口的值在A口显示判断是否为#0FEH28H.3=0?返回读入 C口的值在A口显示NNYSETB 28H.3门闩开判断是否为#0FFHCLR 28H.3门闩关Y 16/39 5.6 开门以及门闩模块描述:在开门允许标志位有效情况下

26、,可以拉开门闩。亮 L5 一秒说明有效时间。L8 说明门闩状态。门闩状态需注意,只能是输入器件。密码修改流程图:返回密码修改28H.4=0?27H.1=0?从4BH 开始给 42H值从4BH 开始给 46H值返回NY改6位N改8位返回 5.7 密码修改描述:密码修改允许位是该子程序的钥匙,进入后分为管理员密码修改和用户密码修改。修改时,可任选 4BH 或者 4FH 的内容作为最新密码。时间调校描述:利用数字 3 和数字 4 按键实现对时和分钟的增量式调校,持续按键超 0.5S时实现快调功能。5.8 功能键流程图:TG58H=0?58H-159H-1返回YN 17/39 OP27H.4=0?6?

27、8?并字允许密码匹配SETB 28H.2 密码修改标志位SETB 27H.1八位用户密码初始化SETB 28H.5时间调校给 36H、37H送暗码返回0201?满足8 位或者6 位Y03?NYY不满6 位或8 位NN 18/39 28H.2密码修改标志位1LO28H.3=0?28H.1=0?判断输入位数是否为6 位?并字置1SETB 27H.0返回NY是YN回常态,除门闩标志28H.3其他清零。CL返回 功能键描述:TG:退格。OP:输入确定。LO:用户修改密码。(门开时有效)CL:返回常态键。5.912S 无动作描述:程序如下:DJNZ 65H,ZXC ;对非常态返回计数单元减 1 MOV

28、27H,#0 ANL 28H,#01001000B;置标志位 MOV 58H,#0 MOV 59H,#57H ZXC:CJNE A,#60H,DONE ;满 1 分钟?MOV 3AH,#0 ;秒单元清零 在每次按键时都给 65H 立即数 12,在无按键时,65H 每秒减一,等零时,除门闩其他标志位清零。5.1015 分钟锁键描述:程序如下:19/39 MOV A,3EH CJNE A,#0,ZXC2 CLR 28H.6 SJMP ZXC3 ZXC2:DEC 3EH ZXC3:MOV A,3BH ;分钟单元(按 BCD 码)加 1 当错误 5 次时,3EH 被赋值,此时标志位 28H.6 没执行

29、 CJNE A,#0,ZXC2 就不能执行,28H.6一直处于锁键。只有 15 分钟后才能被清零。5.11 精确时钟流程图:20/39 精确时钟描述:利用 51 单片机内部时钟振荡产生的时钟信号,用定时器 0 选用方式 2 定时工作模式每定时计数 256 次对 38H 单元加 1,38H 单元计数 36 次即系统内部定时器1产生定时计数满256次 INC 38H N MOV 38H=0 INC 39H 38H=36?Y N 39H=100?Y MOV 39H=0 3AH 加 1 N 3AH=60?Y MOV 3AH=0 3BH 加 1 N 3BH=60?Y MOV 3BH=0 3CH 加 1

30、N 3CH=24?Y MOV 3CH=0 返回 21/39 晶振频率为 11.0592MHZ 的微控制器 9126 个机器周期=10ms,满 10ms 则 10ms计数单元 39H 加 1,不满 10ms 则返回;39H=100 时即为 1s,则 10ms 计数单元清 0、秒计数单元 3AH 加 1,不满 1s 则返回;3AH=60 时即为 1min,则秒计数单元清 0、分计数单元 3BH 加 1,不满 1min 则返回;3BH=60 时即为 1hour,则分计数单元清 0、小时计数单元 3CH 加 1,不满 1hour 则返回;3CH=24 时即为小时完成一个循环,则小时计数单元清 0 返回

31、,不满 24 小时也返回。六、系统功能与操作说明 常态下八位数码管显示实时钟。非常态下,12S 无操作则返回常态。键盘按键 6 次,输入 6 位正确用户密码,八位数码管右边六个显示-,按下 OP 键,二极管 P1.5 点亮一秒。数码管返回常态显示实时钟。在一秒内拉下SWO 门闩,L8 亮代表门开。在开门状态下,继续输入六位密码并按下 LO 键,此时为修改密码状态,修改密码需输入两次新密码,只有两次输入一致,密码才能修改成功。输入 6 位错误密码,按下 OP 键时,最右边数码管显示E三秒。三秒后数码管返回常态显示实时钟。密码输入错误次数五次,蜂鸣器报警并且锁定键盘。键盘按键 8 次,输入 8 位

32、正确管理员密码,八位数码管八个显示-,按下 OP 键,门开,此时拉下门闩,继续输入八位正确管理员密码就进入管理员模式选择。如果第一次输入八位密码时门闩的前态是开状态,那么输入一次八位密码就可以进入管理员模式选择。管理员模式下,输入 01,按下 OP 键则进行管理员密码修改,输入两次新密码,两次密码一致则密码修改成功,修改成功后,可继续进行管理员模式选择。输入 02,按下 OP 键,对用户密码进行初始恢复,成功后仍可进行管理员模式选择。输入 03 按下 OP 键,数字 3 按键实现对时增量式调校。按数字 4 按键实现对分钟的增量式调校。在输入按键情况下,按下退格键可退格。除锁键状态外,按下 CL

33、 恢复常态。在管理员模式选择状态下,关上门闩,系统也恢复常态。七、调试记录及调试结果 1.拆字模块 当程序初始化后开始运行,我们对键盘无任何操作时为常态,常态正常显示实时钟。设置为非常态且为密码输入状态,给密码位数赋初值,观察显示的“”个数是否正确。显示“”成功后,测试控制码显示,给 5AH 和 5BH 初值,观察是否显示正确。该步骤调试顺利。2.错误显示模块 将错误标志位置一,观察显示。调试时,正常显示“E”3S。在显示E3S 时间设置时本来我以为只要在程序中直接调用延迟3S 子程序就可以了,但是在调试时却发现程序无法正常运行。但是后来又尝试调用延迟1S 子程序发现“E”可以正常显示1S,这

34、个原因可能是因为调用 3S 子程序时间太久,程序已经“跑”出去无法返回主程序。3.显示刷新 只留下拆字与显示刷新两个子程序进行调试,在调试时发现有两处窜显,先在在 DISP 中“LCALL D1MS”指令后加入暗码传送,发现最右位仍有窜显,原因是从 37H,子程序便退出。所以应该在进入显示刷新时也加上一条消除窜显语句。添加后,最终在调试中窜显消失。我们试着将暗码放在其他地方,尝试过后最终决定在 DISP 中加入两断传送暗码的指令,最终调试后窜显消失。22/39 4.键盘获取 首先将键盘设置为密码输入模式,按键盘,观察数码管显示,多按一次就多一个“”。在最初调试时忘记将消抖子程序加进去发现有抖动

35、,所以在调试键盘时应记得消抖。调试密码输入成功后将键盘设置为控制码输入模式,调试管理员控制码输入模块。该步骤调试顺利。5.调试并字,设置并字成功时,P1.0 亮。在调试过程中,发现等一直不亮。后来发现在满六位或者八位时,遗漏了并字允许。6.匹配调试与开门调试 匹配成功与开门是连贯的一个动作。匹配成功时,P1.5 亮 1S,在 1S 内门闩拉下 L8 亮。若 1S 内没有将门闩拉下,而是 1S 后拉下门闩则开门失败,无法进入用户或管理员模式进行操作。7.门闩开关调试 如果没有给门闩标志位,门开后就不能关了。所以门闩需要分配标志位。系统在循环时,门闩处理子程序必须进行。我们刚开始调试程序时由于忽略

36、了门闩是输入器件,所以在软件清零时也将门闩位清零了,在老师验收时才发现 12S后返回常态后,在开门状态下门闩不受控制,不管开门还是关门开门指示灯依旧亮着,才意识到在软件清零是需注意保护门闩位。8.管理员控制码输入 起初输入的数值按前后顺序只能显示在固定的数码管,由于不符合日常习惯,后来改为滚轮显示。输入的数值显示位置不再固定,而是朝左移动。9.密码修改 二次输入密码才能修改成功。为了区别用户与管理员密码修改,我们用“LO”键确认用户密码修改,“OP”键确认管理员密码修改。10.时间调校 在按键超过 0.5S 实现快调。调试时,长按,按 K3 时,只要手没松开,小时一直加一。按 K4 时,只要手

37、没松开,分钟数一直加一。K3 和 K4 按下时,秒都清零,更符合日常习惯。八、设计总结 通过此次的课程设计,我重新把单片机及相关知识联系在了一起,把平时学到的与平时实验操作知识有了整体的认识,做了很好的总结和整合,并了解到理论与实际相结合的重要性。在课程设计之前,老师就为我们分好了小组,一个小组3 个人,为的是让我们在团队合作的过程中学会团结协作,互帮互助。第一天老师布置了这两周的设计课题:酒店电子保险箱。交代了设计任务和基本设计要求。并提醒我们应先画好流程图。早上由我们小组间进行讨论,我们讨论了设计的主要思路,画流程图。可是整个程序设计的方面有些多,笼统的想主要思路出不了结果,便决定回去电脑

38、上查相关资料,作为参考帮助我们理清思路。但是这是我们第一次自己写大程序,刚开始时完全没有头绪,后来老师也为我们讲解了主要流程。这使得23/39 我们慢慢的有了大概的思路,开始进入状态。开始根据 TEST2012 程序进行整改和完善,在 2012 程序的基础上慢慢摸索我们所要的程序。为期两周的课程设计,不仅是对我们专业技能的一次考核,也是对我们的精神意志的一种磨练,在设计过程当中,我们有时候卡在一个地方纠结,久久无法继续写下去,有时好不容易写出了一点点成就,却因为同学不小心把电脑电源碰掉了而愤懑。或者是忘记保存成果,此时的我们却不能抱怨只能从头再来。同样的再编程当中我们会遇到很多问题,例如程序的

39、稍微变动有时会影响程序的整个结果发生翻天覆地的变化,有时只要忽略一个细节就不能实现我们要的功能。此时的我们也只能一步一步的去寻找问题所在解决问题,又不能忘记前后之间的关系。这是对我们耐心的又一种比较高的考验。而且在调试时原本初始密码是000000但是我们使用的那块实验板被我们按的 K0 键都快失灵了,我们就修改了初始密码。这让我知道在成功之前我们需要经过无数次实践。此次课程设计与以往的课程设计有很大的不同,此次我们是三个人合作,每个人都有任务分工明确,但又不能自己做自己的完全不顾别人的程序。每次只要做完一点点都要一起讨论方案是否可行。我们的做事与编程一样,需要透过现象看本质。当我们透过现象,按

40、照机器的自然规律理解它的工作机理,那么我们就可以对其进行控制,操作,和修正。本次的课程设计是对以往每一次实验的一种操作总结,也是一次对操作能力的提升,庞大的程序,更多的是需要我们的思考,与以往的课程设计还有实验的不同之处在于,当量达到一定的时候,我们多冷静思考一秒钟,后面的工程就可以事半功倍了。因此我们不应急于一时,看到要求立即动手写程序,往往后面的漏洞是问题的所在,无疑增加了后续编程的工作量。要是在开始做好规划,边做边写边验证,前期的进程比较慢,后续的服务反而更加的得心应手。编程需要规划,也有规律可循。在我们编写程序之前,良好的规划是减小后续编程工作量的保证,要是在前期,在不同的操作模式下找

41、到相同的变成因子,我们可以借其大大缩减我们的工作量,与编程难度,从实用上考虑,可以使我们的程序结构更加优化,对 CPU 的要求可能也大大减低,意味着对硬件的要求也大大的减小,同时省下成本。为期几天的课程设计总结,虽然我只是写了其中的一小部分程序,但也有很24/39 大的收获。通过对程序的了解概括,和剖析,可以使我们对程序的理解程度更加深刻,并且可以对程序的一些不足之处可以做部分的修改,使得程序更加精简与实用。此次的课程设计对我们来说是意义非凡的!不仅知识得到了更系统的掌握,而且学会了团结协作,懂得了团队的力量。只有在互相的学习中才能进步,做更好的自己。25/39 附件 1:程序 ORG 000

42、0H ;复位入口 LJMP MAIN ORG 000BH ;定时器 0 服务子程序入口 LJMP IT0P ORG 0030H MAIN:MOV SP,#6FH ;总初始化。设定栈底指针 LCALL D30MS ;稍加延时(30mS),以待各芯片均退出复位状态 CLR P3.2 ;蜂鸣器响 LCALL D1S ;延时 1S SETB P3.2 ;关蜂鸣器 MOV A,#89H ;数码管显示与矩阵键盘接口 8255A(U3)初始化 MOV DPTR,#0FEFFH ;8255A(U3)MOVX DPTR,A ;A、B 口输出驱动字段、字位,C 口输入 MOV A,#8BH ;LED 显示、开关、

43、按键接口 8255A(U5)初始化 MOV DPTR,#0FDFFH ;8255A(U5)MOVX DPTR,A ;A 口输出驱 L8-15,B 口输入按键 PB0-7,C 口输入电平开关SW0-7 MOV DPTR,#0FDFCH;选中 A 口 MOV A,#0FFH ;送暗码 MOVX DPTR,A ;L8-L15 全灭 MOV DPTR,#0FEFDH;DPTR 指向 U3-B 口 MOV A,#00 MOVX DPTR,A ;关显示(位驱动全为0无效)MOV 30H,#00H ;30H-37H 为显示缓冲单元,MOV 31H,#01H MOV 32H,#00H MOV 33H,#02H

44、 MOV 34H,#10H MOV 35H,#01H MOV 36H,#05H MOV 37H,#10H MOV 38H,#00H ;38H 单元为实时钟 200uS 计数单元,清 0 MOV 39H,#00H ;39H 单元为 10mS 计数单元,清 0 MOV 3AH,#45H ;秒单元初值 MOV 3BH,#59H ;分单元初值 MOV 3CH,#08H ;时单元初值,时钟初值 08:59:45;.密码初始化.MOV 40H,#11H ;初始用户密码 111111 MOV 41H,#11H MOV 42H,#11H MOV 43H,#11H ;初始管理员密码 11111111 MOV 4

45、4H,#11H 26/39 MOV 45H,#11H MOV 46H,#11H;-其他内容初始化-MOV 27H,#0 ;清空各标志位 MOV 28H,#0 ;清空各标志位 MOV 3DH,#5 ;密码错误次数存储单元 MOV 3FH,#50 ;快调定时存储单元 MOV 58H,#00H ;密码位数 MOV 59H,#57H ;存密码放置首地址 MOV 5CH,#100 ;延时 1S 单元 MOV 5DH,#3 ;延时秒数次数 ;-定时器中断设置-MOV TMOD,#02H ;T0 为定时方式 2,8 位的常数自动重新装载定时。MOV TL0,#00H;00H-FFH=256,256TM*36

46、=9216TM=10MS MOV TH0,#00H SETB ET0 ;开 T0 中断允许 SETB EA ;开中断总允许 SETB TR0 ;启动 T0 定时工作;-主循环-LOOP:LCALL CZ ;拆字 LCALL CW ;错误显示子程序 LCALL DISP ;显示刷新 LCALL KEY ;获取键盘输入 LCALL XDPB ;消抖 LCALL INPUT ;密码输入程序 LCALL BZ ;并字 LCALL PP ;密码匹配 LCALL KM ;开门子程序 LCALL SWITCH ;门闩开关子程序 LCALL MMXG ;密码修改 LCALL SJTJ ;时间调校 SJMP L

47、OOP;-拆字子程序-CZ:MOV R0,#30H ;设置显缓首地址 CZLOOP:MOVR0,#12H ;对所有显缓单元送暗码 INC R0 ;指向下一位 CJNER0,#38H,CZLOOP ;是否超过八个数码管容量 27H.5,FC ;检测当前模式并跳转,为 0 常态,为 1 非常态;-常态拆字模块-MOV R0,#3AH ;显示内容送显缓子程序(拆字子程序)。置时钟数据单元首地址(秒单元)MOV R1,#30H ;置显示缓冲单元首地址(对应于最右显示位)CZ1:MOV A,R0 ;取当前数据单元 BCD 码 ANL A,#0FH ;保留低 4 位(个位)27/39 MOV R1,A ;

48、送显缓当前个位单元 INC R1 ;指向显缓当前十位单元 MOV A,R0 ;再取当前数据单元 BCD 码 ANL A,#0F0H ;保留高 4 位(十位)SWAP A ;交换到低 4 位 MOV R1,A ;送显缓当前十位单元 INC R1 ;指向显缓下一个个位单元 INC R0 ;指向下一个时钟数据单元 CJNE R0,#3DH,CZ1 ;未完继续 SJMP CZRET;-非常态拆字模块-FC:27H.4,CONTROL;检测键盘输入模式,0 为密码输入,1 为控制码输入;.密码输入拆字模块.SR:MOV A,58H ;将密码位数给 A CJNE A,#0,SR2 ;判断密码位数是否为 0

49、,不为 0 则跳转,为零则直接退出 SJMP CZRET SR2:MOV R1,#37H ;置显示缓冲单元首地址(对应于最右显示位)MOV R0,58H ;将已输入的密码个数送至 R0 SR1:MOV R1,#10H ;送密码个数个-到显缓 DEC R1 ;指向下一个缓冲单元 DJNZR0,SR1 ;58H 保存的数不为零则循环 SJMP CZRET;.控制码输入拆字模块.CONTROL:MOV 36H,5BH ;把 5B 的值送给 36H MOV 37H,5AH ;把 5A 的值送给 37H CZRET:RET;-密码错误处理子程序-CW:JNB 27H.3,CWRET ;判断错误标志位,为

50、 0 则不执行,为 1 则进行处理 MOV R0,#30H ;把显缓首地址送给 R0 CWLOOP:MOV R0,#12H ;对显缓单元送暗码 INC R0 ;指向下一位 CJNE R0,#38H,CWLOOP MOV 30H,#0EH ;将最右边一位设成 E,其他数码管不亮。DJNZ 5CH,CWRET ;3S 延时 MOV 5CH,#100 DJNZ 5DH,CWRET MOV 5DH,#3 CLR 27H.3 ;关闭错误标志位 CWRET:RET;-显示刷新子程序-DISP:MOV DPTR,#0FEFCH ;8255-A 口(字段码输出口)MOV A,#0FFH ;先给 30H 暗码,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com