单片机课程设计酒店客房电子密码保险箱的控制程序设计.doc

上传人:土8路 文档编号:10286475 上传时间:2021-05-05 格式:DOC 页数:25 大小:239.50KB
返回 下载 相关 举报
单片机课程设计酒店客房电子密码保险箱的控制程序设计.doc_第1页
第1页 / 共25页
单片机课程设计酒店客房电子密码保险箱的控制程序设计.doc_第2页
第2页 / 共25页
单片机课程设计酒店客房电子密码保险箱的控制程序设计.doc_第3页
第3页 / 共25页
单片机课程设计酒店客房电子密码保险箱的控制程序设计.doc_第4页
第4页 / 共25页
单片机课程设计酒店客房电子密码保险箱的控制程序设计.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《单片机课程设计酒店客房电子密码保险箱的控制程序设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计酒店客房电子密码保险箱的控制程序设计.doc(25页珍藏版)》请在三一文库上搜索。

1、 目录第一章 设计任务与功能要求11.1设计课题11.2设计目的11.3设计任务11.4基本设计要求11.5实现目标3第二章 总体设计规划与方案论证42.1硬件需求分析42.2软件的总体设计结构42.3软件需求分析52.4方案论证52.4.1编程方案选择52.5局部程序的方案选择52.5.1数码管自检方案选择52.5.3开关量输入以及矩阵键盘消抖方案的选择62.5.3矩阵键盘按键扫描方案的选择7第三章 总体软件设计说明及总流程图83.1总体软件设计说明83.2总流程图10第四章 系统资源分配及数据定义说明124.1硬件资源分配124.2数据单元定义及进程说明124.2.1初始化及自检设置124

2、.2.2存储单元分配表13第五章 局部程序设计说明155.1自检及总初始化155.2系统休眠子模块程序155.3拨动开关5次消抖动子模块程序155.4驱动电机子程序165.5矩阵键盘的响应程序165.5到位开关的响应子程序165.6矩阵键盘的消抖子程序175.7动画子模块程序175.8拆字子模块程序175.9蜂鸣器控制子模块程序185.10显示更新模块程序185.11恢复出产设置子模块程序19第六章 存在问题及改进方案206.1存在问题206.2改进方案20第七章 系统功能与用户操作使用说明217.1系统功能217.2用户操作使用说明21第八章 课程设计总结23附录:源程序清单24 第一章 设

3、计任务与功能要求1.1设计课题酒店客房电子密码保险箱的控制程序设计1.2设计目的 (1)本课程设计在理论课程微机原理及接口技术的基础上,通过小型微机应用产品控制程序的设计与调试过程,进而提高设计、编程、分析与调试的能力,同时作为工程技术工作的一次基本训练。 (2)通过进一步熟悉和掌握单片机的结构及工作原理,加深对单片机理论知识的理解。将所学知识融会贯通,锻炼设计和调试单片机应用系统的能力,领会单片机应用系统的设计与调试方法,为进一步的学习打下一定的基础。 (3)通过这一课程设计,掌握单片机的接口及相关外围芯片的特性、使用与控制方法,对自己储备的单片机知识加深理解,巩固基础知识的同时,提高整体的

4、动手能力和接受新任务项目时的执行能力。同时,为我们以后的工作积累经验,培养团队的合作精神和分工协调能力,为今后能独立承担起电路设计、能进行微机单片机应用系统的开发与设计工作打下一定的基础.1.3设计任务 设计一个以AT89S51单片机为核心的智能密码箱,该系统具有开机自检,可以在数码管上显示24小时制的时、分、秒信息,具备调时,调分的功能。允许用户设定4到6位的开箱密码。同时,为了提高可靠性,智能密码箱还具有主密码开箱的功能。节能方面,智能密码箱具备自动休眠的功能。1.4基本设计要求1、开机进行有关接口部件及数码显示器、指示灯、讯响器的自检。2、数码管作为界面的信息显示。3、在基本显示界面为按

5、照24小时制动态显示实时钟的时、分、秒信息。4、键盘上的键按下时应回馈短促的键音。5、时钟设定功能:在显示时钟的基本显示界面状态下按下“#”键则进入时钟设定界面,动态调取并显示当前实时钟的小时和分钟值,从高位开始可逐位输入新的时、分值,当前数字位以2Hz频率闪烁显示的形式标示;一旦有输入新数字则停止动态调取实时钟的时、分值,即显示的时、分值不再跟随内部实时钟走时的变化,若按下“*”键则撤销本次修改返回基本显示界面,若按下“#”键则确认本次修改,将新的时、分值更替到实时钟相应单元,返回基本显示界面。6、实验板上的按钮、拨动开关用来模拟设备的开关量输入信号,应当由开关量输入处理子模块程序统一对开关

6、量输入信号进行检测输入并进行软件消抖动处理;实验板上的LED指示灯驱动电路用来模拟设备的开关量输出驱动信号,应当对输出控制信息建立输出缓存,并统一由输出驱动子模块程序根据输出缓存内容执行实质的输出驱动;实验板上的蜂鸣器用来模拟设备的声音告警功能,应当统一由讯响驱动子模块程序综合各功能程序模块所产生的讯响标志信息执行实质的蜂鸣器驱动。7、保险箱的门拴由开关式带无源触点信号反馈式电动执行器驱动,需要“正转伸出”与“反转收缩”两个输出驱动、有“伸出到位”与“收缩到位”两个开关信号输入、此外还有箱门关闭到位检测开关信号输入。8、客人设置密码(客密)关箱功能:在已开箱状态下,关上箱门,并用手按紧箱门,检

7、测到箱门关闭到位检测开关信号输入有效的前提下,许可客人依序输入数字作为客密,显示器同步显示,期间按下“*”键则撤销本次操作回到基本显示界面,当已输入46位客密情况下按下“#”键则确认本次锁箱操作,控制单元驱动门栓伸出扣住箱门,门栓伸出到位则撤销驱动信号,讯响提示锁箱完成,继续显示客密2秒后返回基本显示界面。9、客密开箱功能:在已锁箱状态(箱门关闭到位且门栓伸出到位)下,客人依序输入关箱时设置的客密,显示器同步显示,按下“*”键则撤销本次操作回到基本显示界面,按下“#”键则确认本次输入内容,如果输入的不超过6位的密码与先前设置的客密吻合则控制单元驱动门栓收缩,门栓收缩到位则撤销驱动信号,讯响提示

8、开箱完成,即时返回基本显示界面;如果输入的客密不吻合则讯响告警,返回基本显示界面同时统计出错次数,如果连续三次错误输入密码,则键盘进入3分钟的被锁定状态,显示器黑屏,若再按任何键,仅讯响告警,3分钟后可重新操作。10、主密开箱功能:首次开箱或客人忘记客密时由管理人员运用主密码开箱,在已锁箱状态下,依序输入8位主密,显示器同步显示,按下“*”键则撤销本次操作回到基本显示界面,按下“#”键则确认本次输入内容,如果输入的8位密码与主密吻合则控制单元驱动门栓收缩,门栓收缩到位则撤销驱动信号,讯响提示主密开箱完成,黑屏且延时10秒后返回基本显示界面;如果输入的主密不吻合则讯响告警,返回基本显示界面,同时

9、统计出错次数,如果连续三次错误输入密码,则键盘进入5分钟的被锁定状态,显示器黑屏,若再按任何键,仅讯响告警,5分钟后可重新操作。11、为节约电能,非待机状态下键盘无操作时间超过30秒钟后自动进入休眠待机状态,只保留内部走时、扫描键盘及判断键动作,关闭显示及其它功能使功耗至低,在待机状态按下任意键则恢复基本显示界面。1.5实现目标 1、结合老师给的任务书,以及老师在课堂上对任务书的讲解与分析后,我对总体方案进行规划,编写相应程序并进行调试,满足基本要求,能够通过实验面板上的按键进行实时钟的调校,以及密码箱的密码设定功能与输入主密开箱,客密开箱功能。 2、通过这一课程设计,对课上所学的知识加以理解

10、与巩固,同时能够清清楚楚地说明此次课程设计的设计程序逻辑,并做好相应的答辩准备,并撰写课程设计说明书。 第二章 总体设计规划与方案论证2.1硬件需求分析 本设计以AT89S51为核心,配合键盘系统,LED灯电路,蜂鸣器电路,数码管显示驱动电路,以及拔动开关电路。 利用实验板上的拨动开关模拟智能密码箱上的行程到位开关(低电平有效),依次对应关系为(SW0模拟智能密码箱上的电机正转伸长到位行程开关,SW1模拟智能密码箱上的电机反转缩收到位行程开关,SW7模拟智能密码箱上的箱门关闭到的行程开关)。 利用实验板上的LED指示灯的亮与灭来模拟智能密码箱的电机正反转输出的信号是否有效(亮灯信号有效),依次

11、对应关系为(LED0模拟智能密码箱的电机反正转输出的信号有效,LED1模拟智能密码箱的电机正转输出的信号有效)。 利用实验板上的数码管同步显示基本模式,以及设定时钟模式,设定4-6客密模式,输入密码开箱模式,以及黑屏模式。 利用实验板上的蜂鸣器替代设备的讯响部件。 2.2软件的总体设计结构 根据设计要求,把各个功能按模块化进行设计与程序编写。总体有以下几个模块:程序的总初始化及自检(自检包括数码显示器、指示灯、讯响器等)、主工作流程、定时器1中断服务子程序。主流程程序对每个子模块程序进行循回调用,其中子模块程序包括:1、系统休眠子模块程序2、拨动开关5次滚存消抖动子模块程序 3、驱动电机子模块

12、程序4、键盘响应子模块程序5、拨动开关响应子模块程序6、键盘子4次滚存消抖动子模块程序7、各个界面间的动画切换子模块程序8、拆字子模块程序(显示内容送显缓子程序) 9、蜂鸣器驱动子模块程序 10、显示更新,以及闪烁控制子模块程序11、恢复出产设置子模块程序2.3软件需求分析 1、精确实时钟走时通过定时器1的方式,以10ms=9216Tm的算法来实现. 2、各个子模块间通过界面进程码,箱门进程码,以及相应的存储单元,联系在一起。2.4方案论证2.4.1编程方案选择 方案一:整体法编程整体法编程采用的是整体编程的方式对总控制程序进行编程,这样会使程序精简,内存占用的空间少,但是它的逻辑能力较强,而

13、且设计难度较大。 方案二:模块化编程采用模块化的思想,针对各项功能构建子模块并进行编程。通过各个模块独立编程,逐个添加,逐个调试,最后结合起来完成整体功能,模块化编程具有编程逻辑简单,但程序代码不够精简,简单,占用的空间比较大等的特点。 方案选择: 综上所述:对于初学者的我们采用方案二比较好,这样把程序分成许多子模块进行完成,有利于初学者更好的编程,不容易混乱。2.5局部程序的方案选择2.5.1数码管自检方案选择 方案一:在程序初始化时使八个数码管每个数码管均点亮显示“8.”,编写程序简单且便于观察,由于是静态驱动,电流大,很有可能烧坏数码管驱动芯片。方案二在程序初始化时 数码管流水式显示点钟

14、信息.动态效果好,界面友善,由于是动态显示,电流小,所需时间自检的时间短。 方案选择: 综上所述,与方案一相比,方案二较为理想,且观察效果也较好,能更好的实现自检观察功能。因此我选择方案二。2.5.2系统休眠方案的选择方案一:采用定时器0工作方式1,定时50MS,再通过2个计数单元计满600次后,系统进入休眠,如果有按键按下,那么2个计数单元重新开始计数。此方法占用的资源比较多,增加程序的复杂程序,且初始化时要将定时器1的中断优先级设为最高,否则将造成走时精度的误差,需要更大的堆栈区。方案二:利用主流程每约10MS执行一次的特性,通过2个计数单元的计满3000次后,系统进入休眠,如果有按键按下

15、,那么2个计数单元重新开始计数。用这种方法占用的系统资源少,只需增加2个计数单元,程序简单,易于分析。方案选择:比较方案一和方案二的优缺点,采用方案二更加的合理,使用该方法,编写程序比较简单适合单片机刚入门的新手。2.5.3开关量输入以及矩阵键盘消抖方案的选择分析:(1)按键按下的时候、由于机械碰撞,导致刚刚被按键连通的电路中出现电平抖动。(2)某些情况下,例如系统受到外部震动,也会在按键电路中出现电抖动,但这种抖动不是控制者所希望的操作,如果没有防抖动程序,那么系统会因这种不希望出现的干扰而错误动作。(3)为了避免系统误判,可以编写防抖动程序。 方案一:滚动滤波法进行消抖 滚动滤波法是一种利

16、用软件的方法进行消抖,由于主流程的循环时间大约为10MS,已经在一定的程度上消除了部分抖动,为了更好地达到消抖的目的,利用滚存的思想,比较前后近几次输入的电平值一样的话,才认为电平发生了改变,从而更新新态的值,这样百分之90几的抖动都可以消除,使用滚动滤波法,有一个非常好的优点,它使得按键的判别变的非常简单,可以根据前态与新态的值判别按键是刚刚按下的,还是一直按着,还是刚刚松开,还是一直没有按,这样为实现复杂的按键操作提供坚实的基础。 方案二:利用软件延时消抖 由于键盘存在抖动现象,这一消除抖动的方法是当系统扫描到IO处于按键按下的状态的时候,通过软件延时15MS左右跳过键盘抖区然后再次判断I

17、O还是处于按键按下的状态的话则认为是有效的按键操作,从而达到消除抖动的目的,这种方法打破了主程序的运行周期,将造成数码管的闪烁,而且效率很低,用这种方法判别按键的多种状态变的非常的困难。 方案三:利用硬件消抖动 这种方法可以分为电容滤波和RS出发消除抖动,RS具有准时的有效的消抖效果,能严格的保证每一次按键按下只有一次发生触动,是一种比较好的消抖动的方法。 方案选择:比较以上的3种方法,虽然利用硬件消抖动的方法最可靠,但是由于硬件资源有限无法实现,所以我选择滚动滤波法最为合理,我用滚动滤波法分别对拔动开关与矩键盘进行消抖动,效果好,它使得按键的判别变的非常简,而且可靠性高,编写容易,易于实现复

18、杂的逻辑功能。2.5.3矩阵键盘按键扫描方案的选择 方案一:扫描法。第1步,识别键盘有无键按下;第2步,如有键被按下,识别具体的按键。采用扫描法可以解决端口的限制问题,但是其编程比较复杂,要逐个扫描按键,因此程序执行的时间比较长且繁琐。方案二:线反转法。采用线反转法的键盘行线、列线端口各自应当可以在输入与输出方式间切换。线反转法具有简练的特点,无论被按键是处于第一列或者最后一列,均只需经过两步就可确定按键所在的行和列,但是采用反转法有个限制,就是行线设置为输出,列线要设置为输入,列线设置为输出时,行线要设置为输入,因此同个端口不能高低位分开设置输入输出状态的话,就得使用两个端口。 方案选择:

19、比较方案一和方案二的优缺点,由于82C55的C口的高低四位的输入输出状态可以分开设置,因此消除了反转法中端口的限制,设计是时实性比较高,所以时间的精度要求比较高且反转法的编程简单,可知扫描法所用的时间比线反转法的时间长,并且线反转法的比较容易懂,再加上此次的课程,因此本次课程设计编写程序中我采用方案二线反转法来扫描按键是否有按下。2.5.4实时时钟方案的选择 方案一:利用软件延时 这种方案的程序相对来说比较简单,可以实现基本的延时功能,但是它不能进行精确的延时,受中断的影响大,所以要实现高精度的走时,很然实现。 方案二:利用定时中断延时 这种方案利用了单片机内部的定时中断功能,如果用定时方式2

20、进行定时中断,它只受外部晶振的影响,因此它能完成精确的定时功能。只在中断溢出的时候才去执行定时中断里面的子程序,对主流程序的的扫面周期影响,效率高。 方案选择: 综上两种方案,出于实时时钟的定时准确性,和考虑到扫描程序的扫描周期要有实时性,所以比较两方案,我选择方案二。 第三章 总体软件设计说明及总流程图3.1总体软件设计说明 根据任务书的要求,可知此次设计需要实现的基本功能有实时时钟显示及其校时、允许用户设定4到6位的开箱密码。同时,为了提高可靠性,智能密码箱还具有主密码开箱的功能。节能方面,智能密码箱具备自动休眠的功能.因此整个程序必须包含:自检以及初始化程序、拨动开关SW输入并消抖动子模

21、块、4X4键盘输入并消抖动子模块、键盘响应程序、拆字子模块、显示更新子模块、蜂鸣器驱动子模、30S无操作进入休眠子程序、密码箱行程开关的信号检测子模块、动画显示子模块、输出驱动子模块以及其他辅助子程序。 程序一运行,先进行自检以及初始化,初始化完成后进入主工作流程循回调用11个子模块。由于使用模块化的编程方式,所以各模块根据显示进程码与界面进程码来相互关连。这里交代进程码代表含义:(1)20H界面进程码,用于界面间的切换,以及一些其它的功能。 00H 系统进入休眠 01H 系统显示实时钟界面(L 21- 55 ) 10H 系统进入调时模式,此时还在走时 11H 修改小时的个位 12H 修改分钟

22、十位 13H 修改分钟个位 20H 进入设置4-6位客密界面(E _ _ _ _ _ _) 21H 设置输入第1位密码 22H 设置输入第2位密码 23H 设置输入第3位密码 24H 设置输入第4位密码 25H 设置输入第5位密码 26H 设置输入第6位密码 30H 进入输入客密界面(_ _ _ _ _ _ _ _) 31H 输入第1位密码 32H 输入第2位密码 33H 输入第3位密码 34H 输入第4位密码 35H 输入第5位密码 36H 输入第6位密码 37H 输入第7位密码 38H 输入第8位密码 40H 等侍关箱完成 50H 等侍客密解锁完成 56H 等侍主密码解锁完成 60H 延时

23、一会儿返回基本界面(2)21H箱门进程码,用于模拟密码箱所处的状态。 02H 箱门已开 01H 在开箱的进程下,箱门关闭 03H 箱门已锁 00H 开箱过种中,或关箱过程中3.2总流程图 定时器1中断流程图第四章 系统资源分配及数据定义说明4.1硬件资源分配 本次课程设计的智能密码箱的控制程序的设计硬件电路主要包括矩阵键盘输入模块、拨码开关SW输入模拟、矩阵按键的响应程序 、数码管显示模块、LED灯显示模块、讯响器模块等。 根据实验电路板来设计各个模块的资源分配,使用AT89S51单片机作为主驱动芯片,并使用8255A进行I/O口扩展。利用8255A(U3)的C口(地址为#0FEFEH)作为键

24、盘的输入模块。由8255A的A口(地址为#0FEFCH)作为字段码输入口和B口(地址为#0FEFDH)作为字位码输入口共同组成数码管显示控制模块,由89S51的P1口控制L0-L7,P3.2口控制讯响器。4.2数据单元定义及进程说明4.2.1初始化及自检设置使用的单元说明#0FEFFHA8线选,选择(U3)控制口,方式字89H,设定为A输出(驱动字段)、B口输出(驱动字位),C口输入#0FDFFHA8线选,选择(U5)控制口,方式字8BH,设定为A口输出(驱L815),C口输入(开关SW07)#0FEFCHA8线选,指向(U3)A口,字段输出0,“0”对应段亮#0FEFDHA8线选,指向(U3

25、)B口#0FEFEH指向(U3)C口#0FDFCH指向(U5)A口#0FDFDH指向(U5)B口#0FDFEH指向(U5)C口38H时钟200uS计数单元#00#3639H时钟10mS计数单元取值范围:#00H#99H3AH时钟秒单元取值范围:#00H#59H3BH时钟分单元取值范围:#00H#59H3CH时钟时单元取值范围:#00H#23H4.2.2存储单元分配表09H矩阵键盘前30MS的状态0AH矩阵键盘前20MS的状态0BH矩阵键盘前10MS的状态0CH矩阵键盘当前的状态0DH矩阵按键前态0EH矩阵按键新态20H界面进程码21H箱门里程码22H响铃节拍控制23H每个节拍的响铃时长24H每

26、个节拍的响铃时长2DH拔动开关前40MS的状态2CH拔动开关前30MS的状态2BH拔动开关前20MS的状态2AH拔动开关前10MS的状态29H拔动开关当前的状态2FH拔动开关前态2EH拔动开关新态30H数码管显存对应数码管右边第1位31H数码管显存对应数码管右边第2位32H数码管显存对应数码管右边第3位33H数码管显存对应数码管右边第4位34H数码管显存对应数码管右边第5位35H数码管显存对应数码管右边第6位36H数码管显存对应数码管右边第7位37H数码管显存对应数码管右边第8位38H实时钟256US计数单元39H实时钟10MS计数单元3AH秒计数单元3BH分计数单元3CH小时单元40H45H

27、用于存储客户密码50H57H用于存储主密码4AH高4位存储主密错误次数,低4位存客官错误次数4FHP1口缓存5BH设置动画拆字首地址5AH旧的显示进程5EH6FH动画显示缓存单元第五章 局部程序设计说明5.1自检及总初始化功能描述:总初始化程序主要是在程序开始进入主流程时,对程序中有用到的数据单元赋予初值、开启定时器1的中断允许位以及总中断允许位、对有用到的外设进行自检等,这些程序段只有在程序开始时执行一遍,此后不再执行该程序段。自检能够让我了解各软硬件的完好性,以便维护。设计方案:此次设计的总初始化,先对两片8255A(U3、U5)接口芯片初始化、使蜂鸣器响1秒,LED灯(L0L8)亮一秒,

28、再将接下来程序中有用到的数据单元赋予相应的初值,接下来使数码管逐个点亮。5.2系统休眠子模块程序 这个了程序模块,是通过两个单元自减,由于子模块在主工作流程中调用,所以计数单元每减1次约为10MS,当两个计数单元减为0后就修改界面进程为00H,系统就进入休眠,当然考虑到实际使用的效果,增加了某些界面进程下系统不进入休眠的约束。例如系统已经休眠了不计数,系统处于输错主密码或客密码3次黑屏时计数单元也不自减,系统处于输入对主密码后黑屏10S时不计数,以上几种情况下会将计数单元重置初值。 5.3拨动开关5次消抖动子模块程序 这段程序也是利用5次滚存消抖法,设置了5个滚存单元2DH、2CH、2BH、2

29、AH、29H分别用来储存拨动开关最近这40MS的电平值,每10MS采样一次,将最终的结果存放在2FH单元和2EH单元,2FH单元为新态,2EH单元为前态。每次把5个单元采样的电平值进行比较,如果都相同的话,才认为电平发生了变化,从而更新2EH单元的电平值,如果比较5个单元电平值不相同的话,则保持新态2EH内容不变,从而达到消抖动的效果。5.4驱动电机子程序 用4FH单元做为P1口的输出缓存,通过改变4FH单元的内容就能达到改变P1口输出的电平状态,这样做有个很好的优点,不会造成设备的误动作,可以拿4FH单元单做一些运算,不会影响P1口的输出。5.5矩阵键盘的响应程序 这个程序通过判断(0DH)

30、前态 (0EH)新态的内容,如果前态是(#0CH没按键),新态不是(#0CH)则认为键盘有按键按下,但此时并不知道现在按下的是什么按键,紧接着就是要具体判断按下的是哪个键,我用了排除法来判断,首先判断新态的值是不是0AH如果是,说明此时按下的“*”号键,如果不是的话继续判断新态的值是不是0BH如果是的话说明按下的是“#”键,如果还不是的话,说明按下的肯定是数字键。然后分别往“*”,“#”,数字键这3大块后面添加子程序。首先有按键按下,给休眠计数单元重置初值,然后开始判断界面进程码的值,如果现在已经进入休眠的话,则修改界面进程码20H单元的内容为01H(返回基本模式)。如果按下的是“*”键的话,

31、再判断界面进程码不处于60H(锁定黑屏)的前提下则修改界面进程码20H单元的内容为01H(返回基本模式)。5.5到位开关的响应子程序 利用判段2FH单元的内容(拔动开关的状态)低电平有效。 SW0=1,SW1=0,SW7=0,此时把箱门进程码21H值改为01H,此状态下则说明密码箱处于开箱的进程下,箱门关闭到位。 SW0=1,SW1=0,SW7=1,此时把箱门进程码的值改为02H,此状态下则说明密码箱处天开箱的进程下箱门开启。 SW0=0,SW1=1,SW7=0,此时把箱门进程码的值改为03H,此状态下则说明密码箱处于关闭锁定。 当密码箱门处于开箱中,或着关箱的过程中则把箱门进程码的值改为00

32、H。5.6矩阵键盘的消抖子程序 利用线反转法扫描按键的位置,将键值存储在00H单元中(键值如键值表),接着根据每次所得到的键值与键值表相比较,如果相等,将键值在键值表中的顺序号(键号)给R5,如果不相等接着往下查找,直至相等,后者R5单元的数据位0CH,就停止查表。通过改变各键值在表中的顺序,就可以改变各个按键对应的键号,并通过(09H,0AH,0BH,0CH)4个单元进行4次滚存法进行消抖动,最后将结果单元存放在0DH(前态)单元,与0EH(新态)单元中。5.7动画子模块程序 通过比较把原来的界面进程码,与现在的进程码先比较如果不相等则播放一段动画。5.8拆字子模块程序 就是通过判断界面进程

33、码20H单元的值如果是00H的话,就往显缓30H-37H送空格。 判断界面进程码20H单元的值如果是01H的话,就往显示缓存单元,37H,36H单元送小时的数据,35H单元送“”,34H与33H单元送分钟的数据,32H单元送“”,30H与31H送秒种的数据。 判断界面进程码20H单元的值如果是10H的话,就往显示缓存单元,37H单元送“L”,36H单元送空格,35H与34H单元小时的数据,33H单元送“”,32H与31H送分种的数据,30H送空格。 判断界面进程码20H单元的值如果是11H到14H的话直接退出,不再更改显示缓存的数据。 判断界面进程码20H单元的值如果是20H26H的话,就往显

34、示缓存单元,37H单元送“E”,36H单元送空格。 判断界面进程码20H单元的值如果是30H37H的话直接退出,不再更改显示缓存的数据。 判断界面进程码20H单元的值如果是40H的话直接退出,不再更改显示缓存的数据,并且等侍关箱完成。 判断界面进程码20H单元的值如果是50H的话直接退出,不再更改显示缓存的数据,并且等侍开箱完成。 判断界面进程码20H单元的值如果是56H的话直接退出,不再更改显示缓存的数据,并且等侍开箱完成。 判断界面进程码20H单元的值如果是60H的话直接退出,不再更改显示缓存的数据,这个进程是公共的进程,此进程会延时一会儿返回基本界面,延时时间通过两个计数单元的内容共同决

35、定的,可以任意修改,密码设置成功后保持秒用到了这个进程,还有客密解锁过程中,密码输入错误次锁定分钟用到了这个进程,主密解锁过程中,密码输入错误次锁定分钟也用到了这个进程。5.9蜂鸣器控制子模块程序 此程序通过逐次判断22H单元的上的每个位,(规定为1响0不响),来控制蜂鸣器响几声,由于此子程序每10MS执行一次,声音太短促了,所以要再通过23H与24H单元的计数来延长效果。由于这时的22H与23H,24H的内容可以改变,所以可以组合出非常多的声音。5.10显示更新模块程序 功能描述:该模块主要是执行实现数码管显示。将显示缓冲单元30H-37H的内容在数码管上显示。常规显示模式下动态显示通常模式

36、界面,显示格式为:XX-XX-XX;显示时钟设定界面,格式为:L XX-XX,;客密设定界面,显示格式为:E _ _ _ _ _ _,密码输入界面,显示格式为:_ _ _ _ _ _ _ _。 工作原理:首先将位码01H送到8255A的B口,之后将显示缓冲单元首地址30H内容查字段码表得到相对应的段码送入到8255A的A口,则30H单元的内容在数码管的最右位显示;利用循环控制语句依次将31H-37H单元的内容在相应的数码管上显示。以及数码管的显示内容更新。 通过判别界面进程码20的值,以2HZ频率闪烁对应的位,这里的2HZ是通过39单元中的码(0099)除于25得到2进制的商为00,01,10

37、,11,只需要判断最低位是为0亮还是为1灭,就能得亮灭,亮灭两次刚好是2HZ,界面进程码20H等于10H时,闪烁35H单元对应显示的那一位,界面进程码20H等于11H时,闪烁34H单元对应显示的那一位,界面进程码20H等于12H时,闪烁32H单元对应显示的那一位,界面进程码20H等于13H时,闪烁31H单元对应显示的那一位。等等(显示更新子程序:见附录)5.11恢复出产设置子模块程序 先判断是否拨动开关是否为低电平,如果为低电平的话则将,客密重新初始为888888,同时把主密码重新初始化为12345678.第六章 存在问题及改进方案6.1存在问题 在各个显示模式之间的切换,太花俏。 在关箱的进

38、程下,且在基本模式,按下数字键,切换至输入密码模式,无法立刻显示当前按下的数字。 在开箱的进程下,且在基本模式,按下数字键,切换至设置密码模式,无法立刻显示当前按下的数字。 问题说明: 由于我们在编写程序时没有考虑周全,只考虑到自己。并没有考虑到我所开发的东西当作一种真正的产品去开发。6.2改进方案1.由于我主流程中增加了,各个模式切换的动画效果子模块,直接去掉这个子模块,经过调试,此方法得到预期的效果。2.说明:在开箱的进程下,箱门关闭,同时在基本界面下,有数字键按下,此时进入设置密码的界面,由于我没有把当前按下的数字键直接送显示缓存单元35H,而是直接退出。改进方法:在开箱的进程下,箱门关

39、闭,同时在基本界面下,有数字键按下,入设置密码的界面,并同时将当前按下的数字键直接送到显示缓存单元35中,经过调试,此方法得到预期的效果。3.说明:在锁箱的进程下,同时在基本界面下,有数字键按下,此时进入输入密码的界面,由于我没有把当前按下的数字键直接送显示缓存单元37H,而是直接退出。改进方法:在锁箱的进程下,同时在基本界面下,有数字键按下,进入输入密码的界面,并同时将当前的按下的数字键直接送到显示缓存单元37中,经过调试,此方法得到预期的效果。第七章 系统功能与用户操作使用说明7.1系统功能 设计一个以AT89S51单片机为核心的智能密码箱,该系统具有开机自检,可以在数码管上显示24小时制

40、的时、分、秒信息,具备调时,调分的功能。允许用户设定4到6位的开箱密码。同时,为了提高可靠性,智能密码箱还具有主密码开箱的功能。节能方面,智能密码箱具备30秒内无操作自动休眠的功能。7.2用户操作使用说明键盘操作界面如下所示:其中,矩阵键盘的操作定义如下:数字键0到9可对时间的设定值进行修改,可用于设置客密的输入操作,可用于密码箱解锁时的密码输入操作。在实时钟界面下按下“#”号键,可以进入修改时间的界面,可对小时和分钟进行修改,当时间修改完成后可按“#”确认修改,这时也可以按“*”号键取消本次对时间的修改操作。并对调出的时和分进行修改。开箱后,关闭箱门,可以依次输入到位密码,按“#”号键确认,

41、此时将锁上密码箱,也可以按“*”取消当前的操作。可以输入自己设定的密码进行开箱,也可以用位的主密码进行开箱操作,出厂的用户密码为“”,出厂主密码为“”,按“#”确认您的密码,密码正确开箱完成,也可以按“*”取消当前的操作,如果密码输错次后密码箱将被锁定,在锁定期间没法操作。30S内无用户操作将自动进入休眠。 第八章 课程设计总结 两周的实训一转眼就过了,虽然我所设计的密码箱功能上并未得到老师的认可,但是我还是觉得有很大的成就感,因为我至少尝试创新过,我把我心里所想的动态效果完完全全的在单板机上实现了。 能够这么顺利的完成两周的课设,老师们是功不可没的,在实训的第一天于老师就帮我们解读了,这次实

42、训所要完成的任务及要求,以及实现一些功能的方法,印象比较深的是进程码的概念,通过使用进程码来简化程序的结构,在这次课程设计中我用运用进程码,感觉用了之后,程序结构变的清晰了,一些复杂的功能,通过进程码很容易实现。于老师还提示了本次课程设计过程中几个功能的实现方法,比如控制蜂鸣器的响铃方式,巧妙的通过一个存储单元上的位来控制蜂鸣器,响几声,通过这样一个思路实现多种响铃的声音就解决了。老师还说到了数码管的闪烁控制,巧妙的通过把单元的内容除以从而判断整数部分的第个位就得到了的闪烁频率,方法非常巧妙,而且很容易实现。通过这次课设使得我们把课本所学专业基础知识和专业知识与实践相结合,巩固了专业理论教学的效果,培养我们观察问题的能力,了解将来可能从事的行业,为将来更快的适应工作打下基础。课程设计过程中间老师和同学们帮我解觉了许多问题,感谢他们的帮助。附录:源程序清单

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1