小区楼道开门控制系统(2)

2020-02-21 00:22

时结束后再检测一下按键的动作,以此来达到消抖动的目的。即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。在键数较少时可用硬件方法消抖动。常利用电容的放电延时,采用并联电容法。

方案二:滚动滤波消抖动。比较几个连续的电平值,相等则将其存起来与原态相比,假如该状态与原态不等就认为按键有动作。在本次程序设计中采用了这种消抖动。用几个连续的单元存放最近几次的电平值,比较几个电平值,若相等则存起来与原态相比较,若新态与原态不等则认为一次电平变化。该子程序简单,速度快,所以选择该方案。 2.2.2 LED数码管显示方式:

LED数码管为常用的输出外设,基本运行模式时,2路电压值通过它来巡回的显示;节拍设定模式的显示;扩展电压显示模式时,2路电压同时的显示;扩展时间显示模式时,实时钟的显示。实验板上的LED数码管为是8段共阳极的。 (1)、LED静态显示方式

LED显示器工作于静态显示方式时,各位的共阳极连接在一起并接+5V,每位的段码线分别与一个8位的锁存器输出相连。静态显示方式虽然接口编程容易,但是占用口线较多,如果要增加显示器的位数,则需要增加I/O口的数目,而该设计中需要用到8个LED数码管,单片机的I/O口又是有限的,所以静态显示方式不能采用。 (2)、LED动态显示方式

将所有显示位的段码线的相应段并联在一起,由一个8位I/O口控制,而各位的共阳极由相应的I/O线控制,形成各位的分时选通,即为LED动态显示方式。采用这种方式虽然牺牲了单片机的时间,但是换取了I/O端口的减少。 2.2.3按键声的选择:有两种按键声,一种是按下键瞬间会响,按住键时也会响,放开手后响声才消失。另一种是只有按下键的瞬间会响,一直按住蜂鸣器也不会响。我选择的是按下键的瞬间会响,由于如果一直按住第一种声音太吵了。 2.2.4数码管自检方案的选择:

方案一:通过逐一检查一个数码管的每段是否正常,逐个数码管进行检查,

5

达到自检目的。这种方法效果很好观察,是一种不错的选择,但是写起程序比较长。

方案二:让八段数码管都亮“8.”这种方案程序较为简单,显示效果也比较好。只要在总初始化上给30H~37H赋全亮的立即数(0CH),再调用显示更新子程序,大约保留显示2s左右,即可判断数码管是否正常。 2.2.5定时器工作方式方案论证:

AT89S51单片机的定时器/计数器的工作模式和工作方式由工作方式寄存器TMOD来选择,其字节地址为89H,不能位寻址,其格式如下图所示。 GATE C/T M1 M0 GATE C/T M1 M0 T1方式字段 T0方式字段

当M1、M2为00时,定时器被设置为工作方式0。定时器0工作在方式0时,为13位计数器, 由TL0的低5位和TH0的高8为构成,TL0低5位溢出则向TH0进位,TH0计数溢出则把定时器控制寄存器中的溢出标志位TF0置“1”。

当M1、M2为01时,定时器0工作于方式1,方式1和方式0的差别仅仅在于计数器的位数不同,方式1为16位计数器,由TH0高8位和TL0低8位构成。

当M1M2为10时,定时器0处于工作方式2。定时器工作在方式2时,为8位计数器,TL0为常数缓冲器,当TL0计数溢出时,在溢出标志TF0置“1”的同时,还自动将TH0中的处置送至TL0,使TL0从初值开始重新计数。

方式0和方式1的最大特点是计数溢出后,计数器为全0,因此在循环定时计数时或循环计数应用时就存在用指令反复装入计数初值的问题,这不仅影响定时精度,而且也会给程序设计但来麻烦。而工作方式2可以省去用户软件中重装初值的指令执行时间,简化定时初值的计算方法,以相当精确的确定定时时间。所以我最终选择了方式为定时器0的工作方式2。 2.2.6 延时时间的选择:

由于主程序要不断地循环,在每个子模块中不允许调用软件延时子程序。在这边有两种方法可实现延时;第一,就是累计主程序循环时间(一个周期大概10ms),然后借助DJNZ指令,对某个单元的内容进行减1不为0,返回继续计时,只有将这个单元的内容减到等于0时,才执行下面的内容,这样就起到了延时的效果。第二,就是借助定时器中断服务子程序,假如想要5s的延时时间。只要

6

在初始化将某个单元赋初始零。CJNE A,#100,DONE ;满1S?MOV 39H,#0 ;10mS计数单元清0,在后面加上INC 10H,只要满一秒的时候,10H中的内容就会加1,当10H的内容等于5时,就说明已经延时了5s了。不过我在延时这个方面我选择了第一种的延时方法。 2.2.7 开关的选择方案论证:

拨动开关和按钮开关具有检测电平变化的作用。而拨动开关具有强制切换作用和记忆作用,断电时也不会自行复位,需要外部进行切换。而按钮开关没按时为高电平,按下时为低电平,分开手后会自动变回到高电平,避免不用低电平时,还得将开关拨回。所以我选择了对于外接开门按钮和对讲门铃时用户开门分别使用按钮开关PB7和PB0-PB5来控制。

三、总体软件设计说明及总流程图 3.1 总流程图:

主程序 开始 总初始化 输入三次错误用户密码锁门子程序 进程码判断及赋值

房号、密码输入

显示更新子程序 按键处理子程序

键盘扫描子程序

PB口输入消抖动

独立按键PB0-7的检测

温度及时钟显示控制 7

对应驱动L0-15灯子程序 时钟拆字子程序

进入时钟修改子程序 无操作30S返回子程序 按键声处理子程序 温度显示子程序 出错报警子程序 3.2 总体软件设计说明:

总初始化:主要由自检包括蜂鸣器,L0-L15LED灯,还有八位LED7段数码管等的初始化,和一些要用到的单元进行初始化。

进程码判断及赋值:通过对比得出进程,并对进程码进行相应改变。

房号、密码输入:处理相应进程下按下数字键的显示,并把数字缓存送显缓。 按键处理子程序:对按下确定键、退格键、取消键时,在相应进程的处理。 PB口输入消抖子程:对PB口的输入进行滚动消抖,就是按下按钮后,只有检测到五次地电平数据都相等时,才把这次电平存入新态2EH中,2EH单元的内容推进前态2FH单元中。

独立按键PB0-7的检测:检测PB按键的情况,进行相应处理

对应驱动L0-15灯子程序:对22H、23H单元进行判断,对相应的LED灯点亮及延时。

进入时钟修改子程序:当输入的管理员密码正确后,才执行这个模块。用L0-L5来表示要修改时钟哪位,当按下数字键时进行相应修改且判断是否在正确范围内。

按键声处理子程序:当检测到有按键按下时,会发出短促的声音。 报警子程序: 检测到错误报警,连续响三声。

温度显示子程序:将采集到的电压转换为相应的温度并显示。

无操作30S返回子程序:无按键操作时,无论数码管显示什么,只要延时30s后,自动会返回时钟显示。

8

时钟拆字子程序:拆时钟单元缓存送显缓。

温度及时钟显示控制:温度与时钟的显示时间控制,并互换显示。

键盘扫描子程序:进行查表得出对应的键号,还有按下数字键做出相应事情,按下功能键置某位以便识别。

显示更新子程序:三种显示状态:正常显示时钟,显示温度及对输入的数字进行显示。有显示一位数字,一直到能显示六位数字,输入三位可以直接看见,多余三位看不见真正的数字,只显示“-”符号。

输入三次错误用户密码锁门子程序:判断是否输入三次或以上错误用户密码,如果是就锁开门信号5分钟,5分钟过后输入正确的用户密码才可重新打开开门信号。

定时器T0中断服务子程序:此字程序是对时间进行计时,以致能时钟显示。

四、系统资源分配及数据定义说明 4.1硬件资源分配:

硬件资源分配 名称 实现的功能 LED灯 L0 L1 L2 L3 L4 L5 L8 L9 L10 L11 L12 房间号对应的LED灯 房间号 101、修改时高位 201、修改时低位 301、修改分高位 401、修改分低位 501、修改秒高位 601、修改秒低位 102 202 302 402 502 PB1-PB5 门铃开门按钮 PB7 K0 K1 K2 K3 K4 K5 K6 K7 K8 K9 内置开门按钮 输入0 输入1 输入2 输入3 输入4 输入5 输入6 输入7 输入8 输入9 9


小区楼道开门控制系统(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014 人美版小学美术三年级上册教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: