平移式自动感应门智能控制器的控制程序设计_第1页
平移式自动感应门智能控制器的控制程序设计_第2页
平移式自动感应门智能控制器的控制程序设计_第3页
平移式自动感应门智能控制器的控制程序设计_第4页
平移式自动感应门智能控制器的控制程序设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理及接口技术课程设计 微机原理及接口技术课程设计说明书 课题:平移式自动感应门智能控制器的控制程序设计 专业: 班级: 姓名: 学号: 指导老师: 2014 年 6 月 20 日目录目录2一、设计任务与功能要求31.1设计课题31.2设计目的31.3设计任务31.4基本设计要求3二、总体设计规划与方案论证52.1总体设计规划52.1.1设计环节:62.1.2调试环节62.2方案论证62.2.1程序设计方案选择62.2.2硬件方案的选择72.2.3软件方案选择7三、总体软件设计说明及总流程图93.1总体软件设计说明93.2开门停滞时间设定子模块程序11四、系统资源分配及数据定义说明124.1主要芯片端口分配124.2硬件分配124.3单片机内部数据存储单元定义和说明13五、局部程序设计说明165.1自检和总初始化165.2定时器中断服务子程序165.3控制程序主体175.3.1界面显示部分175.3.2键盘操作部分205.3.3开关门控制部分215.3.4动感显示部分22六、存在的问题及改进方案236.1236.223七、系统功能与用户说明书237.1系统功能237.2用户说明书247.2.1设备操作界面247.2.2操作说明24八、课程设计总结26九、附录(程序)29 一、设计任务与功能要求1.1设计课题 平移式自动感应门智能控制器的控制程序设计 1.2设计目的 利用微机原理及接口技术课程所学的基本知识设计小型微机系统的控制程序,在实践感受和学习分析问题的方法,灵活应用知识解决实际的设计问题,达到巩固知识和知识的融会贯通,在设计过程中提高设计、编程与调试的实际动手能力,作为工程技术工作的一次基本训练,为日后的学习和工作打下良好的基础。1.3设计任务 自动感应门能够探测有移动物体靠近时自动开启,广泛应用于办公楼、厂房、超市、机场等场所。设计一个以AT89S51单片机为核心的平移式自动感应门智能控制器,该系统为有线单机控制与驱动平移式自动感应门,具有根据感应探测器信号按自动开门或关门的基本功能,包含实时钟显示、双向通过、单向通过、手动开门、手动关门等,还可扩展如下功能:整点报时、日历显示、防夹保护、异常判断与报警,多参数可设定等,编写智能控制器的控制程序并在实验板上模拟调试。1.4基本设计要求1、开机数码显示器、指示灯、及讯响器有关接口部件等进行适当的自检。2、八位LED 七段数码管作为时钟显示界面,时钟调校界面,开门停滞时间设定界面等其他界面信息显示。3、基本显示模式应按照24小时制动态显示实时钟的时、分、秒信息。4、44矩阵键盘作为参数设定与设备操作的输入设备,由“0”“9”数字键及若干个功能键如确定键及取消键等组成,“0”“9”数字键须按照国际通行排列布局,键按下时应回馈短促的按键音,键盘扫描还应采取消抖动处理。5、时钟调校功能:按下“时钟设定”键则进入时钟设定界面,在调取并显示当前实时钟的时、分值基础上通过操作可逐位修改当前的时钟的分和时数据,当前操作位以2Hz频率闪烁显示的形式表示;按“确定”键则审核不存在超值域的情况下存入时钟的分和时数据,同时对秒清0以及对秒的前级计时环节置初值;按“取消”键则不存新值返回基本显示模式;同时设置“”键、“”键方便操作。6、把实验板上的按钮、拨动开关替代设备的开关量输入信号,利用开关量输入处理子模块程序统一对开关量输入信号进行检测输入并进行软件消抖动处理;利用实验板上的驱动LED指示灯的输出接口电路替代设备的开关量输出驱动信号,并设置对应的输出缓存单元,统一由输出驱动子模块程序根据输出缓存内容执行实质的输出驱动;利用实验板上的蜂鸣器替代设备的讯响部件,统一由讯响驱动子模块程序根据各子模块程序所产生的讯响逻辑标记信息执行实质的蜂鸣器驱动。7、要求控制器可控制平移式自动感应门通用组件。对与双速电机驱动需有“正转开门”输出驱动信号、“反转关门”输出驱动信号及“高速档”输出驱动信号;当开门到位压下开门到位行程开关时产生开门到位信号,关门到位时压下关门到位行程开关产生关门到位信号,进入减速区压下减速区行程开关产生电机减速信号;感应探测器当它的探测区域内有物体移动时,它就产生一个开关量信号送往控制系统,门内外各有一个感应探测器,有“门外探测”、“门内探测”两个输入信号。8、双向通过自动感应开门/关门控制功能:在非开门流程情况下,只要当门内外的探测信号有一个持续0.5秒(探测稳定时间)有效,则进入开门流程,驱动电机正转高速运行,快速开门,处于开门减速区则驱动电机正转低速运行,慢速开门,检测到“开门到位”信号有效则开门到位电机停转;处于开门到位停机状态下,门内外探测信号持续3秒(开门停滞时间)无任一有效信号时,则进入关门流程,驱动电机反转低速运行,慢速关门,检测到 “关门到位”信号有效则关门到位电机停转。9、“手动/自动”功能:控制器面板应设置“手动/自动”模式的选择开关,在“自动”模式下,根据感应器信号控制开门或关门;在“手动”模式下,只可通过面板上的“手动开门”按钮与“手动关门”按钮操控开门或关门。10、“单向/双向”功能:控制器面板设置“单向/双向”模式选择开关,处于“自动”模式状态下,选择单向通过则只允许一侧感应探测器的感应信号控制开门或关门有效。11、“单进/单出” 功能:控制器面板设置“单进/单出”选择开关,处于“自动”档的“单向”状态下,选择单进方式则只依据外侧感应探测器的探测信号控制开门或关门,选择单出方式则只依据内侧感应探测器的探测信号控制开门或关门。12、开门停滞时间设定功能:按下“停滞时间”键则进入停滞时间设定界面,首先调出并显示原有的停滞时间两位十进制秒数,供逐位输入新的秒值,当前操作的数字位有闪烁表示,按“确定”键则审核不存在超值域的情况下存入新的停滞时间秒数,还可以有“取消”键、“”键、“”键等操作功能。13、利用实验板上的L8L15做感应门动作的动感显示。14、在非基本显示界面下,若键盘无按键按下,30秒后自动返回到时钟显示的基本显示界面。1.5功能扩展提示:(选做)1、具有半点及整点报时功能。2、具有定闹与闹铃功能。3、实时钟具有星期、日历显示功能。4、具有异常情况的报警提示功能。5、可设定探测稳定时间。6、可设定夜间自动闭锁功能。7、增加防夹保护功能,依据驱动电机过载的继电器信号判断并执行防夹保护动作。8、其他功能扩展。二、总体设计规划与方案论证 感应门自动控制程序应具有根据感应探测器信号按自动开门或关门的基本功能,包含实时钟显示、双向通过、单向通过、手动开门、手动关门等2.1总体设计规划根据设计任务和设计要求,我认为这是一个较为复杂的系统程序,不能像平常做实验一样根据要求直接设计要实现的功能。因此需要做好设计的规划。设计进程安排,总共用时六天,三天设计,三天调试。我计划利用三天时间完成程序的全部设计利用,先将程序分成四个部分界面显示部分,操作键盘部分,开个门控制部分和感应门动感显示和电机驱动信号显示部分。2.1.1设计环节:第一天,在任务下达后研究任务说明说的基础上,进一步了解设计要求和功能要求,深入理解系统功能。根据功能对系统程序划分模块分配单元,设计程序的总体框架。此后,计划完成界面显示和操作键盘部分程序的的设计,它包括矩阵键盘设计,时钟显示界面,时钟调校界面和开门停滞时间设定界面的界面显示设计;和时钟显示,时钟调校,开门停滞时间设定,30s无操作返回,短促按键音,超值报警音功能设计和调试。主要通过向三四班的同学请教,借鉴他们所编写的程序,在理解的基础上对程序进行修改和调整。第二天,进行开关门控制部分程序设计,这个部分是整个程序的核心,控制逻辑相对比较复杂,应先通过绘制程序流程图对控制逻辑进行梳理,分配拨动开关和单按键作为输入信号,设置相关的进程码,它包括了感应门的门内门外开门信号的检测,手动和自动控制,双向开门和单向开门(单进和单出)功能。完成该部分设计并进行该部分的调试。第三天,在开关门控制程序的基础上设计动感应门感显示和电机驱动信号显示的功能程序。由于,有开个门控制程序做为基础在逻辑清晰的情况下应该很容易实现该部分的程序设计和调试,所以剩余时间用来整合三个部分的程序并做系统程序的初步调试。2.1.2调试环节三天全部用于系统程序进行详细的调试,记录存在的问题,并通过和同学、老师讨论,查阅资料来解决问题使系统程序功能得到优化使得程序得到化简。若有剩余时间完成扩展功能的设计,完善系统功能。由于在实验室调试程序的时间有限,可以根据实验板的设计图纸,绘制实验板电路,利用Proteus软件进行程序的仿真。2.2方案论证 根据现有知识,经验,实际设计环境和条件选择合适的设计方案。2.2.1程序设计方案选择自底向上设计方法:在设计具有层次结构的大型程序时,先设计一些较下层的程序,即去解决问题的各个不同的小部分,然后把这些部分组合成为完整的程序。自底向上设计方法是根据系统功能要求,从具体的器件、逻辑部件或者相似系统开始,凭借设计者熟练的技巧和丰富的经验,通过对其进行相互连接、修改和扩大,构成所要求的系统。该方法是从底层开始的,实际中无论是取用已有模块还是自行设计电路,其设计成本和开发周期都优于自顶向下法;但由于设计是从最底层开始的,所以难以保证总体设计的最佳性。应当说明的是,自底向上法并非一切从硬件开始设计,设计之初,依然要了解系统要求,设计中要保证系统功能的实现。所谓自底向上主要指在设计功能和程序时,应考虑如何使用现有器件。自顶向下设计方法:一种逐步求精的设计程序的过程和方法。对要完成的任务进行分解,先对最高层次中的问题进行定义、设计、编程和测试,而将其中未解决的问题作为一个子任务放到下一层次中去解决。这样逐层、逐个地进行定义、设计、编程和测试,直到所有层次上的问题均由实用程序来解决,就能设计出具有层次结构的程序。按自顶向下的方法设计时,设计师首先对所设计的系统要有一个全面的理解。然后从顶层开始,连续地逐层向下分解,起到系统的所有模块都小到便于掌握为止。方案的比较:对我这样一个程序设计的初学者,没有足够的设计经验无法灵活的应用自底向上设计方法暂且把总系统功能发在一边,先单独设计各个小模块,即使完成各个小模块的功能后也很难使各个模块紧密结合,协调工作。而且本次设计的系统程序,较为复杂,先应该对系统整体有一个详细的了解和认知,在全面的了解和解读系统设计要求和功能要求后,并将系统划分成个个模块,模块化,并且通过进程码使得相关的模块得以紧密衔接,编写子模块程序时同样可以利用进程码来梳理程序,使程序变得有条理。逐步求精的设计程序,使设计思路简单清晰而有层次,保证各模块协调配合完成总系统程序的预计功能。因此,采用自顶向下设计方法。2.2.2硬件方案的选择开关量的选择拨动开关:输入的电平信号能够保持适合做模式切换开关,行程开关和门内外的检测号。单按键:按下后改变电平信号,释放后电平信号恢复,具有自动回复的特点适合做手动开关门的按钮。2.2.3软件方案选择(1)实时钟设计:AT89C51的定时器有四种工作方式 方式0:13位计数方式,初值计算麻烦在时间应用中一般不予采用。方式1:16位计数方式,计数范围大,但需要重装,作为定时器会产生误差。 方式2:8位计数方式,计数范围小,能够自动重装,而且误差只由电路中的晶体振荡器决定。计数精度高。方式3:只能于T0,而且由于本人没有详细的了解过其工作机理,故不采用。方案选择:系统的时钟设计使用T1(本程序中使用T1,T0皆可),并使用方式2进行计数,保证时钟的工作精度。(2)延时方式的选择:定时器延时:调用中断服务子程序的计数单元,精度高,调用麻烦,不利于多次大范围的使用。延时子模块程序延时:编写一个模块利于程序语句的运行时间进行计数延时,精度低,会拉长程序一个流程的运行时间,不利于程序的运行效率。但调用简单使用方便,且延时范围广。程序循环时间延时:利用程序运行一次的循环时间通过计数实现延时,常用CJNE,DZNZ等语句,简单方便适合大范围的调用,但精度低。方案选择:根据以上各延时方法特点,定时器延时由于精度高用与开门停滞的使用。延时子模块程序延时,延时时间长,调用方便适合自检,和数码管显示使用。程序循环时间延时,适合精度要求低,小容量的简单延时如感应信号的确认。(3)键盘扫描方法:扫描法:可节省较多I/O口线段,适用于按键数目较多的场合,但编程复杂,对按键进行逐个全扫描,程序执行时间长。 线反转法:编程简单,对按键进行横竖交替扫描,程序执行效率高无论被按键是处于第一列或者最后一列,均只需经过两步便能获得被按键的行列值,但有个局限,行线设置为输出,列线要设置为输入,列线设置为输出时,行线要设置为输入,因此同个端口不能高低位分开设置输入输出状态的话,就得使用两个端口。方案选择:为了提高程序运行效率使用线反转法,且8255芯片C口的高低四位的输入输出状态可以分开设置,所以使用线反转法的时候不存在局限性,且编程简单。(4)数码管驱动显示方法:静态驱动:数码管公共端接地,每一位数码管的八个段都有八个端口来驱动显示,编程方式简单,而且数码管的显示亮度高,但占用端口多。硬件电路复杂。动态驱动:数码关公共端由一个端口控制来选择要显示的位,把数码管的各位的八个段对应并联由一个端口来驱动显示。占用I/O端口少,编程繁琐。硬件电路简单。方案选择:由于实验板I/O端口数有限,为了节省端口,利于系统硬件的资源分配,故数码管显示用动态驱动方式。三、总体软件设计说明及总流程图3.1总体软件设计说明为适应感应门控制系统程序的设计要求,我使用自顶向下程序设计方法。在了解系统程序的预期功能后,把系统程序按功能划分成几个部分,在相应的部分再划分模块,在模块中再划分进程。同时,根据控制需求分配系统单元避免编程过程中出现单元混乱相互占用的现象。在各个子模块程序中根据控制需求设置相应的进程码,使得程序之间有因果关系,按步执行有根有据。使得各个模块在整合成系统程序时能实现有机的连接良好的配合。 采用集中输入集中输出的信号采集和驱动方式,避免干扰信号,导致设备的误动作。对于输入信号应该统一分配各自的缓冲单元存储输入信息,供各个子模块程序调用。对于输出的驱动信号应分配输出缓冲单元存储输出驱动信号,在所有程序执行完后统一由输出缓冲单元输出驱动信息驱动设备动作。程序布局如下:进入主程序后,先进行自检和总初始化,随后进入主流程循环调用14个子模块程序。(1)消抖子模块程序:对单按键PB0PB7进行消抖滚存把新态存入2EH,旧态存入2FH,对拨动开关SW0SW7进行消抖滚存把新态存入28H,旧态存入29H,对矩阵键盘进行消抖滚存,把新一次扫描到的键号存入2CH单元中,把前一次扫描到的键号存入2DH。(2)键盘扫描子模块程序:使用线反转法扫描键盘,获取当前按下的键的键码存入60H单元,查表得当前按下键的键号存入45H单元后准备消抖。(3)时钟调校子模块程序:在基本界面下,按下时钟调校键进入时钟调校界面,通过输入数字键可以修改当前时钟的时和分。按下左移和右移键可以选择当前要修改的位,按下取消键则取消当前修改设置返回基本界面,按下确定键则保存当前修改设置后返回基本界面,若所设时间时候超值,则使超值报警标志位25H.1单元置一。(4)开门停滞时间设定子模块程序:在基本界面下按停滞时间设定键进入停滞时间设定界面,通过输入数字键可以修改当前时钟的时和分。按下左移和右移键可以选择当前要修改的位,按下取消键则取消当前修改设置返回基本界面,按下确定键则保存当前修改设置后返回基本界面,若修改值为00则是超值报警标志位25H.1置1。(5)拆字子模块程序:在基本界面下,将时钟数据单元3AH3CH中的内容取出进行拆字处理并送往显示缓存单元30H37H。(6)显示更新子模块程序:根据显示缓存单元中的内容,动态驱动8位数码管显示一遍。如若在时钟调校界面,开门停滞时间设定子界面下还需调用对应的闪烁子程序。(7)按键音子模块程序:判断矩阵键盘是否有键按下,若有键按下则置25H.0按键音标志位为1。(8)蜂鸣器驱动子模块程序:若超值报警标志位25H.1为1则驱动蜂鸣器发出报警音,若按键音标志位25H.0为1则驱动蜂鸣器发出按键音。(9) 无操作返回子模块程序:在非基本界面下,若键盘无键按下,30s后返回基本界面。(10)信号检测子模块程序:在自动模式下,根据门内外的检测信号来信号检测标志码并存入22H单元中。(11)自动开关门子模块程序:在自动模式下,根据22H中的信号检测标志码,各个行程的状态和23H中的开关门进程码来确定电机驱动信号并存入2AH中。(12)手动开关门子模块程序:在手动模式下,根据开门按钮PB0,关门按钮PB1,各个行程开关的状态和23H单元中的开关门进程码来确定电机驱动信号并存入2AH中。(13)动感显示子模块程序:根据23H单元中的内容来确定动感显示驱动信号并存入6EH单元。(14)驱动信号输出子模块程序:把2AH单元的电机驱动信号输出驱动电机动作和把6EH单元中的动感显示驱动信输出驱动L8L15做为感应门动作的动感显示。3.2开门停滞时间设定子模块程序四、系统资源分配及数据定义说明4.1主要芯片端口分配(1)AT89C51端口分配端口配置说明P0数据总线D0D7P1L0L7P2P2.0(U3片选端),P2.1(U5片选端)P3P3.2蜂鸣器(2)8255(U3)端口分配端口配置说明PA数码管八个段,输出0有效PB数码管八个位,输出1有效PC矩形键盘(3)8255(U5)端口分配端口配置说明PAL8L15PB单按键PB0PB7PC拨动开关SW0SW74.2硬件分配名称作用数码管时钟,时钟修改,停滞时间修改界面显示SW0自动/手动切换开关(1/0)SW1双向/单向切换开关(1/0)SW2单进/单出切换开关(1/0)SW3关门到位行程开关(1有效)SW4减速区行程开关(1有效)SW5开门到位行程开关(1有效)SW6门外感应信号(1有效)SW7门内感应信号(1有效)PB0手动开门按钮PB1手动关门按钮L0电机正转驱动信号L1电机反转驱动信号L2电机高速运行驱动信号K0数字键1K1数字键2K2数字键3K3时钟修改键K4数字键4K5数字键5K6数字键6K7开门到位停滞时间设定键K8数字键7K9数字键8K10数字键9K11确定键K12键K13数字键0K14键K15取消键4.3单片机内部数据存储单元定义和说明(1)各单元定义与说明单元定义与说明取值范围20H时钟设置进程码:00H基本界面10H时十位,11H时个位12H分十位,13H分个位00H,10H,11H,12H,13H21H开门延时时间设定进程码 00H基本界面,10H十位,11H个位00H,10H,11H22H信号检测标志码 00H为无信号,10H为开门信号,20H为关门信号00H,10H,20H23H开关门进程码(00H关门到位停转 30H高速正转 31H低速正转 32H开门到位停转 40H低速反转 )00H,30H,31H,32H,40H25H存放提示音的状态位 (对应位为1则鸣叫) 25H.1 超值告警标志位 25H.0 标志位按键音28H28H存新态(SW0SW7)29H29H存旧态(SW0SW7)2AH电机驱动信号输出缓冲单元2CH2CH存新键号(KEY)2DH2DH存旧键号(KEY)2EH2E存新态(PB0PB7)2FH2F存旧态(PB0PB7)30H时钟显示缓存单元 秒个位31H时钟显示缓存单元 秒十位32H时钟显示缓存单元 -33H时钟显示缓存单元 分个位34H时钟显示缓存单元 分十位35H时钟显示缓存单元 -36H时钟显示缓存单元 时个位37H时钟显示缓存单元 时十位38H38H单元为256个TM计数单元00H39H39H39H单元为10mS计数单元00H99H BCD码3AH秒单元00H59H BCD码3BH分单元00H59H BCD码3CH时单元,时钟初值08:59:5500H23H BCD码40H44HPB消抖滚存单元45H49HKEY消抖滚存单元4AH校时,定时界面 A寄存器数据保护单元4BH校时拼字BCD码 分4CH校时拼字BCD码 时50H53H动感显示计时单元短505300H14H55H开延时,延时计数56H57H门内信号辅助计数00H32H58H动感显示进程码04H,03H,02H,01H59H开门延时值00H03H5AH30S无键盘操作计数单元00H1EH60HKEY扫描 扫描到的键码61HKEY扫描 扫描到的键号62H65H动感显示计时单元长66H6AHSW消抖滚存单元6BH置短促键音延时参数为056CH置键盘输入超值域告警音延时参数为256DH键盘输入超值域告警音进程码(00为初始状态) 00 01 02 0300H,01H,02H,03H6EHL8L15的输出缓冲单元(1)各位定义与说明位定义与说明备注25H.0短促按键音标志位 为1有效25H.1超值告警标志位 为1有效28H.028H.7对应SW0SW7的新态详见硬件分配29H.029H.7对应SW0SW7的新态2AH.1电机正转驱动信号缓存单元 为0有效2AH.2电机反转驱动信号缓存单元 为0有效2AH.3高速档驱动信号缓存单元 为0有效2EH.02EH.7对应PB0PB7的新态 详见硬件分配2FH.02FH.7对应PB0PB7的新态 P3.2蜂鸣器输出单元 为0有效五、局部程序设计说明 平移式自动感应门智能控制器的控制程序,根据作用划分为自检和总初始化,定时器中断服务子程序,控制程序主体四大部分;其中控制程序分为界面显示部分,操作键盘部分,开关门控制部分,动感显示部分;其中界面显示部分有5个子模块程序,键盘操作部分有4个子模块程序,开关门控制部分有3个子模块程序,动感显示部分有2个子模块程序包含输出刷新子模块程序,总共14个子模块程序。5.1自检和总初始化程序功能:对U3,U5延时复位初始化,检验L0L15,八位数码管,蜂鸣器是否能够正常工作。对各个数据单元赋初始值,定时器初始化,开启中断使能,设置堆栈指针,使程序快速进入正常工作状态。设计思路:通过延时使U3,U5退出复位并初始化,驱动L0L15全亮,八位数码管八段全亮,蜂鸣器鸣叫1S。原理说明:调用延时65MS子模块程序使U3,U5退出复位,对于U3,U5写入方式控制字,定义端口工作方式,设定U3:A口输出(驱动数码管字段)、B口输出(驱动数码管字位),C口输入(键盘行列线)。设定U5: A口输出(驱L815),B口输入(按钮PB07),C口输入(开关SW07)。对U3-A口写入#00H,驱动数码管八段全亮,对U3-B口写入#0FFH驱动字位码八位全点亮。对U5-A口写入#00H 驱动L8L15点亮,对P1口输入#00H驱动(L0L7)点亮。对P3.2置0驱动蜂鸣器鸣叫延时1S后对其置1。设定定时器工作方式,并开启定时器中断使能。按顺序对各个数据单元赋初值。5.2定时器中断服务子程序程序功能:获取实时钟数据。设计思路:通过计算确定每一次产生定时中断所经过的时间,利用计数延时的方式来确定时钟的走时,并设置时,分,秒计数单元和前级基础计数单元,前级基础计数单元用于计算中断产生的次数,据此得出时钟的走时时间,满一秒后,本单元清零重新计数,使后一级的秒单元加一,根据时,分,秒单元内设定的初值确定当前的时钟的时,分,秒信息。另外,单元中的数据应为BCD码,方便拆字显示。原理说明:实验板晶体振荡器的时钟频率为11.0592MHz,所以机械频率为921600Hz,这意味着每一秒有921600个Tm,也就是每10ms有9216个Tm,令TL1,TH1为00H意味着每256个Tm产生一次中断并重新计数产生中断,同时我们在中断程序中设置计数单元38H计数36次,256乘上36刚刚好为9216,意味着时钟走时10ms,以此为基础确定时钟的走时。39H为10ms单元,每10ms加一满100次则表示经过了一秒,清零重新计数,使3AH秒单元加一;秒单元记满60次后则表示记过了一分钟,清零重新计数,使3BH分单元加一;分单元记满60次则表示经过了一个小时,清零重新计数;小时单元记满24次则表示过了一天,清零并重新计数。5.3控制程序主体5.3.1界面显示部分(1)拆字子模块程序-CZ程序功能:时钟数据单元中的BCD码时钟数据进行拆字处理并送往显示缓存单元。设计思路:用一个单元记录基本界面下的的进程码,当进程码满足条件则取出时钟数据单元中的数据进行拆字处理,将时拆为时十位,时个位,将分拆为分十位,分个位,将秒拆为秒十位,秒个位。通过寄存器间接寻址的方式把拆字后的数据送给各个显示缓存单元,并设置显示格式为“HH-MM-SS”。原理说明:基本界面判断:判断21H和20H单元中的内容是否为00H,是则意味则当前的显示界面为时钟显示界面,则将时钟数据单元的首地址和显示缓存单元的首地址分别给R0,R1,通过寄存器间接寻址的方式取出时钟数据单元中的信息,用ANL指令屏蔽时钟数据单元的高四位信息获得时钟数据的个位并送给显示缓存单元,利用INC指令使R1指向下一显示缓存单元,用ANL指令屏蔽时钟数据单元的低四位信息,用SWAP指令交换时钟数据单元高低四位的信息获得时钟数据的个位并送给显示缓存单元。再利用INC指令使R0指向下一时钟数据单元进行拆字,直到将时分秒单元的内容全部拆字处理完后退出。其中“-”为字段码表中的第16个字段码,需送#10H给显缓单元。(2)时钟调校子模块程序-SJTJ程序功能:实现时钟调校界面的显示,修改实时钟显示时间。设计思路:先通过进程码判断当前界面,再根据按键信息判断进入时钟调校界面。设置时钟界面的显示格式并取出当前时钟的时,分信息。通过进程码确定当前要操作的位。判断键盘所按下键的键号并送其键号对应的字段码表序号(即要修改的时钟信息的BCD码)给当前操作位的显示缓存单元。在时钟调校界面判断各功能键是否按下,并执行对应的操作。按下确认键时需要判断是否超值,并是超值标志位置1原理说明:判断进入时钟调校界面:只有当21H,20H为#00H且时钟调校键K13按下的时候才进入时钟调校界面并使20H为10H表示当前修改位为时十位。时钟调校界面的显示格式:将当前时钟的时、分调出,并取字段码表对应的字段码的序号(BCD码)给时钟调教界面置初值。使界面格式为“PL-XX-XX”。操作位确定:通过比较20H中的进程码判断当前的操作位,#10H时十位,#11H时个为#12H分十为,#13H分个为。各个键功能:判断20H中的进程码是否为1XH在时钟调校界面下,是则通过各个键的键号判断各个键是否按下。数字键“09”:按下则给当前操作为的显缓单元送数字键对应的BCD码修改时钟数据,并使进程码加一,加到#13H则使20H单元从置为#10H。“取消”键:按下K15则令20H为#00H返回基本界面。“确定”键:按下K11先对当前缓存单元的数据进行拼字获得修改后的时钟数据,例如把33H和34H单元的内容拼字成时钟的时赋值给时数据缓存4CH。通过SUBB减值域的上限,JNC指令判断是否有进位借位来确定所设定的时间值否超过值域,若超值域则使25H.1超值报警标志位为1,若未超值则把拼字后的时钟数据赋值给对应的时钟数据单元后,令20H为#00H返回基本界面。“左移”键:按下使20H的进程码减一,减到10H则重置为13H。“右移”键:按下使20H的进程码加一,加到13H则重置为10H。、(3)开门停滞时间设定子模块程序-DSOC程序功能:实现开门停滞时间设定界面的显示,修改开门停滞时间设计思路:基本和时钟调校子模块程序的思路相同,只不过在显示开门停滞时间值时要先进行拆字处理。原理说明:基本和时钟调校子模块程序的原理相同,在显示开门停滞时间值时要先对59H单元中的停滞时间值进行拆字处理再送给显示缓存单元。设计开门停滞时间设定界面的显示格式为“PA-XXS”。其可操作位只有两位。只有但设置的停滞时间值为00H时才会置超值报警标志位25H.1为1。(4)显示更新子模块程序-DISP程序功能:实现数码管的动态显示设计思路:字段码的获取:在一个工作寄存器中存放显缓的首地址,取要显示数据的BCD码查表得到相对应的字段码。从第一个显缓单元一直到最后一个显缓单元依次输出字段码。字位码的获取:在另一个工作寄存器中存放位码的初值,从最右位开始,一直到最左位一次输出字位码。显示缓存单元30H37H对应数码管最右位到最左位。从右到左动态显示一遍后退出。操作位闪烁:在非基本操作界面下需要调用位闪烁子模块来标识当前的操作位,用一个数据单元来保护A寄存器中的数据,判断当前的显示界面,同过进程码确定当前的操作位,通过对39H中的10ms计数单元中的数据进行二进制除,获得要闪烁的间隔时间。原理说明:让R0存显缓单元首地址,R3存字位码初值,显示缓存单元30H37H一一对应数码管最右位到最左位。确定字位码:取要显示的字位码到8255-B口选择数码管要显示的位。通过对R3执行左移指令,移动到下一位要显示的位。确定字段码:取要显示数据的BCD码查表得到相对应的字段码输出到8255-A口驱动要显示的数码管显示对应的字段。通过对R0加一,确定下一位要显示的数据。显示结束判断:从右到左依次显示,调用延时1ms字模块程序使要数码管显示持续显示一段时间。通过JB指令判断R3的最高位是否为1来判断显示是否结束。消除最左位的高亮:应在最左为驱动显示1ms后对字段码写入0FFH关显示。操作位闪烁:用4AH保护A寄存器中的数据对39H中的10ms计数单元中的数据进行二进制除,39H除以#25得到商存在A寄存器中,39H的取值范围为00H到99H存在A中的商为00H,01H,10H,11H对应十进制0,1,2,3,其最低为ACC.0为1的频率恰为2Hz。当ACC.0为0时则对A写入#0FFH对当前操作为的字段码进行关显示,为1则返回4AH中的数据给A,退出闪烁模块,闪烁模块有2个,时钟调校闪烁模块,开门停滞时间字闪烁模块,根据显示界面进程码选择要调用的闪烁模块,根据操作位的进程码选择要闪烁的位。当20H为#1XH调用时钟调校闪烁模块#10H,#11H,#12H,#13H分别对应时十为,时各位分十位,分个位。当21H为#1XH时调用开门停滞时间字闪烁模块,10H,11H分别对应停滞时间值的十位和个位。5.3.2键盘操作部分(1)消抖滚存子模块程序-XDPB程序功能:对单按键PB0PB7,拨动开关SW0SW7,键盘进行消抖滚存。设计思路:分别用5个数据单元进行滚存近5次输入的电平信号和键号并一一比较5次都相同则将新态或新键号单元中的内容存入储存旧态或旧键号单元中,将新的状态或新的键号存入储存新态或新键号单元中。原理说明:对近5次的输入量进行比较确认和 ,根据程序循环的周期可知比较5次后所用的时间为约50ms,而信号抖动的时间与之先比跟短,比较确认5次后可以有消的滤除抖动信号,消除抖动。将消抖后的信息依次推存进新态单元和旧态单元。供其他子模块调用。(2)键盘扫描子模块程序-KEY程序功能:获取矩阵键盘当前按下键的键号。设计思路:使用线反转法扫描键盘确定当前按下键的键码,查表确定当前按下键的键号原理说明:C口先初始化为高4位输出方式驱动键行线、低4位输入方式驱动键列线获取键盘列线电平(低4位)存60H单元,C口改初始化为高4位输入驱动键行线、低4位输出驱动键列线,获取键盘行线电平(高4位)电平存入A中与60H单元的内容进行拼合后得到键盘按下的键码回存到60H中。在61H中存入键号值,从键码表的第一个键码开始查表比较60H中的键码,直到查表得到相同的键码后键61H中的键号值存入45H中准备消抖滚存。(3)键盘短促键音字模块程序-DCJY程序功能:当键盘和开关门按钮PB0,PB1有键按下,则回馈短促按键音设计思路:依次判断键盘,开门按钮和关门按钮是否有键按下,有则置短促键音标志位为1原理说明:2CH,2DH分别存的是新旧键号,2EH,2FH分别存的是新旧电平信号。当2DH为#10H,2CH不为#10H则说明当前键盘有按键按下置25H.0为1。用类似的方式可以判断PB0,PB1是否按下(要用到JB和JNB指令进行判断),按下则置25H.0为1。(4)蜂鸣器驱动子模块程序-BEEP程序功能:驱动蜂鸣器发出报警音和按键音设计思路:根据报警音标志位和按键音标志位驱动蜂鸣器鸣叫,优先判断报警音,报警音标志位有效则跳过按键音标志位的判断。原理说明:25H.0按键音标志位,25H.1报警音标志位,为1则有效先判断25H.1若为1跳过判断25H.0驱动蜂鸣器发出报警用DJNZ指令进行延时,响25个主流程周期后停响15个主流程周期,进行俩次分为4个进程动作分别为03H,02H,01H,00H。当25H.1若为0则判断25H.0,若为1则驱动蜂鸣器鸣叫5个主流程周期后停响。驱动蜂鸣器鸣叫完毕后需要对蜂鸣器各标志位清0。(5)30S无按键返回字模块程序-BC程序功能:在非基本操作界面在,键盘30s内无按键按下则返回到基本界面设计思路:界面判断:根据界面进程码,判断当前界面,为非基本操作界面则进入该程序。30S记时:调用中断服务子程序的计数单元设计延时30s的计数单元,通过计数来计时。30s后若无按键按下则置见面进程码为基本界面进程码,重置计数单元。若有按键按下着让计数单元重新计计数。原理说明:当只有当21H,或20H其中一个不#00H进程时才能使用该字模块程序的功能。根据2DH,2CH判断键盘是否有键按下,若有键按下则让5AH重置#30H,若无键按下39H的内容每为00H(过一秒)则让5AH加一,满30次后重置5AH,返回基本界面。5.3.3开关门控制部分(1)感应信号检测子模块程序-XHJC程序功能:获取门内外感应器的检测信号设计思路:在自动模式下,若为双向模式则判断满内外的感应信号是否有效,只要一个有效则使信号检测标志码为有开门信号,若为单向则判断为单进还是单出,单进只有在门外信号有消的情况下才能使信号检测标志码为有开门信号们,单出只有在门内信号有效的情况下才使信号检测标志码为有开门信号。原理说明:根据28H.0判断自动模式和手动模式,根据28H.1判断单向还是双向,根据28H.7,28H.6判断门内外的检测信号,使用计数延时的方式判断检测信号是否持续0.5秒有效,例如:当在自动单出模式下有门内检测信号则使56H单元加一,直到记满50次后则让22H为10H,有有效的开门信号并使56H清0。(2)自动开关门子程序模块-MKG程序功能:实现感应门在自动模式下的开关门设计思路:通过信号检测标志码,行程开关的状态来确定开关门进程码,通过开关门进程码来确定电机驱动信号。原理说明:通过28H.0判断是否为1在自动模式下否则退出。是则进行行程判断,判断是否在3XH进程下为开门过程,并判断是30H快开还是31H慢开,若为快开则通过行程开关28H.4判断是否进入减速区要减速若要减速则是进程变成31H,若不要则退出行程判断。在31H进程下并根据行程开关28H.5判断是否开门到位,未到位则退出行程判断,开门到位则使进程 变为32H,并接着判断是否慢速关门40H进程若不是则判断有无关门信号若无则退出行程判断,若有这使进程变成40H且清除关门信号,若为慢速关门使进程编程40H则根据行程开关28H.3判断是否关门到位。未到位退出进程判断,到位则使进程00H退出进程判断。在确定了23H中的进程后根据进程码确定电机驱动信号并存入2AH单元中,其中32进程关门到位,还需判断是否持续没有开门信号达到开门停滞时间,若是则是22H中的内容为#20H关门信号,若否则存储驱动信号后退出。(3)手动开关门字程序模块-SDKG程序功能:实现感应门在手动模式下根据开关门按钮进行开关门设计思路:根据开关门的按钮和行程开关的状态确定开关门的进程,通过开关门进程码确定电机驱动信号。原理说明:通过28H.0判断是否为0在手动模式下否则退出。进行进程判断,判断手动开门按钮是否按下按下否则判断是否按下手动关门按钮,是则判断是否开门到位开门到位则

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论