首页资源分类嵌入式处理器51内核 > 智能控制窗帘

智能控制窗帘

已有 445025个资源

下载专区

上传者其他资源

文档信息举报收藏

标    签:智能窗帘自动控制

分    享:

文档简介

基于51单片机的光感窗帘,具有智能,简便的特征

文档预览

 南京信息职业技术学院 毕业设计论文 作者 韩生龙 学号 11031P10 系部 电子信息学院 专业 计算机控制技术 题目 智能窗帘控制装置 指导教师 龙凌云 评阅教师 完成时间: 2013年 5 月 1 日 毕业设计(论文)中文摘要 智能窗帘控制装置 摘要:随着现代社会的高速发展,人们对室内设计智能化的要求也越来越高。方便与享受的智能窗帘对于现代快节奏的人们生活来说,是适应现代化办公和生活环境的需要,是人们生活水平提高的一个标志。对于室内的窗帘而言,它不仅要具有遮光作用和美化功能,更要具有方便智能的使用功能。本文综述了智能窗帘控制装置系统的设计与制作过程,介绍了设计制作一个完整的窗帘控制系统需要做的理论分析以及其制作过程。智能窗帘控制装置系统核心采用的是单片机AT89C51,其次利用了光照传感器、键盘显示接口电路以及信号调理电路等外围电路,它主要的功能有时间显示, 定时控制开闭窗帘,还可以根据光强度自动调节窗帘以使屋内达到舒适惬意的环境。整个系统在理论层面上,用程序语言驱动各模块工作,实现系统的内在联系,在应用层面上则采用Protel软件进行原理图设计。 智能窗帘控制装置系统的构成主要由光照传感电路、系统主控模块电路、电源转换电路、电机控制电路、键盘以及显示电路等组成,重点讨论了窗帘自动控制系统的设计过程、硬件选用和软件调试等问题,通过本系统可实现利用光照强度以及设置时间来控制窗帘自动开闭。 关键词:单片机 智能窗帘 定时 步进电机 毕业设计(论文)外文摘要 Title : Smart curtain control device Abstract: With the rapid development of modern society, people are increasingly high requirements for interior design intelligent. Convenience and enjoy smart curtains for the fast pace of modern life for people to adapt to the needs of the modern office and living environment, is a sign of improved living standards. For the curtains in the room, it not only has a shading effect and landscaping features, but also to facilitate intelligent use features. In this paper, intelligent curtain control device system design and production process, design a complete curtain control systems need to do theoretical analysis and its production process. Intelligent curtain control device system core microcontroller AT89C51, followed by the use of a light sensor, keyboard and display interface circuit, and a signal conditioning circuit peripheral circuits, it is mainly the function of time display, timing control the opening and closing curtains, you can also automatically according to the light intensity adjust the curtains to the house of a safe and comfortable environment. The entire system at the theoretical level, each module driven programming language, the intrinsic link of the system, using Protel software for schematic design at the application level. Intelligent curtain control device system constitutes a major by the light sensing circuit, system main control module circuit, power conversion circuits, motor control circuit, keyboard and display circuit focused on the design process of the curtains of automatic control system, hardware selection and software issues such as debugging through the system can be realized using light intensity, and set the time to control the curtains open and close automatically. keywords: MCU Smart Curtains Timing Stepper Motor 目录 第1章 绪论 5 1.1 研究目的和意义 5 1.2 基本内容安排 6 第2章 总体电路设计及其原理说明 7 2.1 系统基本功能 7 2.2系统总体结构设计 8 第3章 硬件分析与设计 9 3.1电源电路设计 9 3.2 89C51单片机及相关电路 12 3.2.1 晶振电路 13 3.2.2 复位电路 14 3.2.3 时钟电路 14 3.2.4 键盘电路 16 3.2.6 A\D转换电路 19 3.2.7 光敏传感器 21 图3.2.7 光敏传感器 22 3.2.8 步进电机 22 图3.2.10 放大滤波电路 24 3.3 窗帘框架构造设计 24 3.3.1 电机选择 24 第4章 程序分析与设计 26 4.1 主程序设计 26 4.2 主要子程序设计 27 4.2.3 步进电机程序设计 30 参 考 文 献 33 附录一 智能窗帘原理图 35 附录二 程序清单 36 第1章 绪论 1.1 研究目的和意义 21世纪是信息化的世纪,各种电信和互联网新技术推动了人类文明的巨大进步。智能家居控制系统可以定义为一个过程或者一个系统。利用先进的计算机技术、网络通讯技术、综合布线技术、将与家居生活有关的各种子系统,有机地结合在一起,通过统筹管理,让家居生活更加舒适、安全、有效。与普通家居相比,智能家居不仅具有传统的居住功能,提供舒适安全、高品位且宜人的家庭生活空间。还将原来的被动静止结构转变为具有能动智慧的工具,提供全方位的信息交换功能,帮助家庭与外部保持信息交换畅通,优化人们的生活方式,帮助人们有效安排时间,增强家居生活的安全性,甚至为各种能源费用节约资金。系统的网络化功能可以提供遥控、家电(空调,热水器等)控制、照明控制、室内外遥控、窗帘自控、防盗报警、电话远程控制、可编程定时控制及计算机控制等多种功能和手段。使生活更加舒适、便利和安全。因智能家居控制系统布线简单、功能灵活,扩展容易而被人们广泛接受和应用。 智能化控制的工作原理自然离不开运算和控制单元,在设计本系统时采用的主控器件AT89C51,正是运算与控制单元的集合体。本窗帘控制系统不仅具有采集控制方便、简单、灵活等优点,而且可以大幅度提高采各模块和芯片的协调性,从而大大提高系统的可利用性。此次系统设计系统正是利用AT89C51 单片机的优点,顺利的完成了本设计的要求。并且实现了学习型定时和自动控制功能,为控制家居设备提供了良好的基础。 正是因为通信技术、计算机技术、网络技术、控制技术的迅猛发展与提高,促使了家庭实现了生活现代化,居住环境舒适化、安全化。这些高科技已经影响到人们生活的方方面面,改变了人们生活习惯,提高了人们生活质量,家居智能化也正是在这种形势下应运而生的。智能家居控制系统的主要功能包括通信、设备自动控制、安全防范三个方面。随着新技术和自动化的发展,传感器的使用数量越来越大,功能也越来越强,各种传感器都已经标准化、模块化,这给智能家居控制系统的设计提供极大方便。 智能窗帘控制装置系统的整体主要由硬件和软件两部分组成。硬件部分由单片机扩展的外围电路以及各种实现单片机系统控制功能的接口电路组成;软件部分主要由单片机系统实现其特定控制功能的各种程序组成。本设计中介绍了智能窗帘控制装置系统的硬件构成以及软件设计过程,以尽最大可能满足不同人对窗帘开闭的不同需求。同时,系统在针对人们一般需求的设计开发外,还提出多种解决方案,在考虑到经济性和简便性的前提下,可以供日后对控制系统的功能进行扩展。 1.2 基本内容安排 该设计通过分析电动窗帘的现状和人们对自动窗帘控制系统的功能的需求,从而对自动窗帘控制器进行总体的设计。系统的总体设计采用以步进电机作为单片机控制元件,执行窗帘开闭的主要任务;以光敏电阻作为检测元件,以提供单片机外界光照的变化;89C51单片机作为主控制芯片,控制着整个系统的运行,此外,辅助以键盘和显示电路,在各个电路模块的配合下最终实现了自动窗帘控制系统的智能化要求。 自动窗帘控制系统设计过程主要分为以下几个章节: (1)绪论:介绍设计目标国内外的发展现状和研究意义目的,设计的基本内容和本文的章节安排。 (2)总体设计方案:给出了智能窗帘控制装置的总体方案设想,智能项目,和设计结构规划。 (3)硬件设计:选用89C51单片机为核心的各种电路设计,包括复位电路,电源电路,时钟电路,步进电机控制电路,键盘/显示电路等一系列相关电路。 (4)软件设计:介绍各个功能模块的的设计流程以及设计思路。 (5)总结:针对设计中的不足进行再思考以及提出自动窗帘控制系统功能的扩展。 1.3 设计思想及基本功能 该系统具有一般的窗帘控制系统的最基本的功能,即通过电动按钮来开闭窗帘,在此基本功能的前提下,本设计根据需求还设计了可以根据光照强度和设定时间自动开闭窗帘的功能,在选取设计方案和采用元器件方面,该系统本着简单实用经济的思想,尽量简化电路设计,用最简单的电路布线和选用最经济实用的器件来达到设计要求。 自动窗帘控制系统具有以下几个基本功能: (1)手动控制:该功能是根据用户的需求通过按键进行窗帘的开关,此功能可以使窗帘的开闭处于任何一种状态; (2)自动控制:用户可以通过按键一次性开闭窗帘; (3)环境亮度控制:窗帘的关闭和开启通过环境亮度自动完成窗帘的开启或关闭操作控制,“天黑关闭,天亮打开”具有智能管理,不产生误动作。 (4)时间自动控制:根据设置输入的开启或关闭时间,来控制窗帘的关闭和打开。 窗帘的正转、反转和停止功能可由单片机输出电平来控制步进电机的运转以实现。环境亮度的控制通过光敏二极管和运放组成的电路来控制单片机输出电平继而控制电机的正转和反转。时间自动控制可以由定时器来控制。 第2章 总体电路设计及其原理说明 2.1 系统基本功能 伴随着科学技术的发展和人民生活水平的日益提高,人们对生活舒适性的追求越来越强烈,而窗帘在每个家庭生活是必备的,其基本功能是保护住户的隐私以及遮蔽阳光等。基于这些作用窗帘的便利性自然也受到家庭的关注。但传统的窗帘绝大部分是用手去开关,每天开关不仅不省力,而且还可能错过最佳光照时间,尤其是大窗帘,比较重,而且长,在开闭时需要费很大力气才能开关窗帘,特别不方便;针对这种现象,电动窗帘便由此产生。现有的电动窗帘基本上都可以利用按键控制,自动开关闭窗帘,虽然省了力气,但是有些方面的设计还是不够人性化。对此,本控制系统提出可以根据光照以及定时等开关窗帘,具体有以下几大功能:(1)手动控制状态:此功能使自动窗帘控制系统具有手动拉开、关闭和停止功能。(2)半自动控制状态:此功能是在要打开或者关闭窗帘的时候,通过“开”或“关”按键,窗帘在电机的带动下可以自动开闭。(3)亮度自动控制:此功能是利用设定的光照强度自动完成窗帘的打开或者关闭,真正实现黑天关闭,白天打开的功能。(4)时间自动控制:此功能根据用户需要,设定需要开闭窗帘的时间,通过输入的开启或关闭时间,控制窗帘开关。 2.2 系统总体结构设计 硬件设计的好坏决定整个方案的成功与否,所以在硬件设计时,在实现功能的情况下电路设计越简单越好,这样才能保证这个系统的稳定运行。下图是智能窗帘控制装置设计的总体框图如图2.2.1所示。 图2.2.1 电动窗帘控制器结构框图 本智能窗帘控制装置以89C51为主控芯片,通过其灵活的输入/输出口设置,由光电传感器检测外界的光强,经过信号调理电路的放大,滤波调理后输入到A/D转换器,A/D转换器件完成一个转换过程需要一定时间,如果在这段时间内信号的幅度发生变化,转换结果将会受到影响,所以其间要用到采样保持电路。转换后的信号由单片机控制器,来实现电机的运行与停止。显示模块主要用来显示智能窗帘控制装置的各种状态信息。键盘模块主要作用是通过按键向单片机输入指令,其中主要包括设定时间,控制步进电机转动方向,从而控制窗帘的开与关。 第3章 硬件分析与设计 3.1电源电路设计 3.1.1 单片机电源电路 单片机工作需要使用5V电压,因此需要给单片机设计电源电路。图3.1.1是单片机的电源电路。它采用LM2576开关稳压集成电路将电动机电源+12V直流电压转变为+5V的直流电压为单片机供电。 图3.1.1单片机电源电路 LM2576中文资料 LM2576系列开关稳压集成电路的主要特性如下: ●最大输出电流:3A; ●最高输入电压:LM2576为40V,LM2576HV为60V; ●输出电压:3.3V、5V、12V、15V和ADJ(可调)等可选; ●震荡频率:52kHz; ●转换效率:75%~88%(不同电压输出时的效率不同); ●控制方式:PWM; ●工作温度范围:-40℃ ~ +125℃ ●工作模式:低功耗/正常两种模式可外部控制; ●工作模式控制:TTL电平兼容; ●所需外部元件:仅四个(不可调)或六个(可调); ●器件保护:热关断及电流限制; LM2576的内部框图如图3.1.2所示,该框图的引脚定义对应于五脚TO-220封装形式。 图 3.1.2 LM2576内部包含52kHz振荡器、1.23V基准稳压电路、热关断电路、电流限制电路、放大器、比较器及内部稳压电路等。为了产生不同的输出电压, 通常将比较器的负端接基准电压(1.23V),正端接分压电阻网络,这样可根据输出电压的不同选定不同的阻值,其中R1=1kΩ(可调-ADJ时开路), R2分别为1.7 kΩ(3.3V)、3.1 kΩ(5V)、8.84 kΩ(12V)、11.3 kΩ(15V)和0(-ADJ),上述电阻依据型号不同已在芯片内部做了精确调整,因而无需使用者考虑。将输出电压分压电阻网络的输出同内部基准稳压值 1.23V进行比较,若电压有偏差,则可用放大器控制内部振荡器的输出占空比,从而使输出电压保持稳定。 由图3.1.1及LM2576系列开关稳压集成电路的特性可以看出,以LM2576为核心的开关稳压电源完全可以取代三端稳压器件构成的MCU稳压电源。LM2576系列开关稳压集成电路来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来更可靠、更方便。 外形图 图3.1.3 3.1.2 步进电机电源电路 本设计采用12V直流电压为步进电机供电,因此需要给步进电机设计电源电路。图3.1.4是步进电机的电源电路。由于该电路在应用中比较常见,所以在此不做任何解析。 图3.1.4步进电机的电源电路 3.2 89C51单片机及相关电路 单片机的全称是单片微型计算机(Single Chip Microcomputer)。为了使用方便,它把组成计算机的主要功能部件:中央处理器(CPU)、数据存储器(RAM)、程序存储器(ROM、EPROM、E2PROM或FLASH)、定时/计数器和各种输入/输出接口电路等都集成在一块半导体芯片上,构成了一个完整的计算机系统。与通用的计算机不同,单片机的指令功能是按照工业控制的要求设计,因此它又被称为微控制器(Microcontroller)。 MCS51系列[1]单片机是美国Intel公司于1980年推出的一种8位单片机系列。该系列的基本型产品是8051、8031和8751。这3种产品之间的区别只是在片内程序存储器方面。8051的片内程序存储器(ROM)是掩膜型的,即在制造芯片时已将应用程序固化进去;8031片内没有程序存储器;8751内部包含有用作程序存储器4KB的EPROM。由于8051的编程需要制造商的支持,而8751的价格昂贵,因此8031获得了更为广泛的使用。 MCS51系列单片机优异的性能/价格比使得它从面世以来就获得用户的认可。Intel公司把这种单片机的内核,即8051内核,以出售或互换专利的方式授权给一些公司,如Atmel、Philips、ADI等。这些公司的这类产品也被称为8051兼容芯片,这些8051兼容芯片在原来的基础上增加了许多特性。本文应用电路中采用了Atmel公司的AT89S51芯片,它与MCS51单片机指令兼容,同时它的内部包含用作程序存储器4KB的基于FLASH技术的只读存储器。采用这款芯片既克服了采用8031需要添加外部程序存储器导致电路复杂的缺点,又克服了采用8751导致电路制作成本高的缺点。 3.2.1 晶振电路 电路中的晶振即石英晶体震荡器。由于石英晶体震荡器具有非常好的频率稳定性和抗外界干扰的能力,所以,石英晶体震荡器是用来产生基准频率的。通过基准频率来控制电路中的频率的准确性。同时,它还可以产生振荡电流,向单片机发出时钟信号。 图3.2.1是单片机的晶振电路。电路中的电容C1和C2的典型值通常选择为30PF左右,该电容的大小会影响振荡电路频率的高低、振荡器的稳定性和起振的快速性。晶体振荡频率的范围通常在1.2~12MHz。晶体的频率越高,系统的时钟频率越快,单片机的运行速度越快。但反过来,运行速度对于存储器的速度要求就越高,对印刷电路板的工艺要求也就越高,即要求线间的寄生电容要小。晶体和电容应该尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证振荡器稳定、可靠地工作。89C51常选择振荡频率12MHz的石英晶体。 图3.2.1 单片机晶振电路图 3.2.2 复位电路 复位是单片机的初始化操作,只需要给89C51的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可以使89C51复位。复位时,单片机初始化为0000H,从0000H单元开始执行程序。除了进入系统的正常初始化之外,当程序运行错误(如程序跑飞)或操作错误使系统处于锁死状态时,也需要复位键使RST脚为高电平,使89C51摆脱“跑飞”或“死锁”状态而重新启动。图3.2.2是复位电路图。 图3.2.2 复位电路图 3.2.3 时钟电路 本设计需要窗帘在给定的时间自动开和关,所以需要用到定时器,而为了保证单片机与外界时钟一致,要用到一个实时时钟电路。这里使用DS12887实时时钟芯片来完成这项功能。 DS12887是DALLAS公司生产的实时日历时钟芯片,其主要功能包括非易失性时日历时钟、报警器、百年历、可编程中断、方波发生器和114字节的非易失静态RAM。使用DS12887时应注意以下几点:Vcc正常情况下为5V,当Vcc降至4.25V时,所有的输入被忽略,输出为高阻状态,Vcc降至3V时,外部电源被关断,内部锂电池为实时时钟和RAM供电,在断电情况下,时钟继续运行,其中的数据可保存十年以上不会丢失。DS12887有两种工作时序,即MOTOROLA和INTEL时序,由MOT引脚的电平指定,当MOT引脚为高电平时选择MOTOROLA时序,当MOT引脚为低电平时选择INTEL时序,图中选为INTEL时序,这时芯片的DS引脚接系统的读信号/RD,R/W引脚接系统的写信号/WR。AS引脚用于分离数据地址总线AD7-AD0上的地址和数据信息,连接到MCU的ALE引脚。RESET引脚的信号对日历时钟和RAM没有影响,但它影响DS12887的命令和状态寄存器的内容,在图中直接将RESET连至Vcc,这样可以保证DS12887在进入或退出电源失效状态时,其工作状态不受RESET引脚的影响。DS12887有一个可编程输出方波引脚SQW,从该引脚可以输出频率为2Hz-256Hz的方波,在系统中正是利用此引脚输出周期为125MS的方波,作为MCU外部中断/INT0的中断源实现周期性中断,每当中断发生时,MCU读一二次输入口,检查电表是否转过一圈,在整点时还要采一次三相电流和电压。除此之外,DS12887内部还有128字节的RAM的单元,其中前10个字节用于存放日历时钟信息,字节0为秒,字节2为分,字节4为时,字节6为星期,字节7为日,字节8为月,字节9为年,字节0AH-0DH用作控制和状态寄存器,剩下的114字节为用户RAM,所有的这128字节都是掉电非易失性的。 图3.2.3 时钟电路图 DS12887时钟芯片和AT89C5l单片微机的接口电路如图3.2.3所示。模式选择脚MOT接地, DS12887时钟芯片的AS端口和89C51单片机的AIE端直接相联;而DS、R/W 读写控制线与单片机的RD/WR控制线制线相连;DS12887的高位地址由89C51单片机的P2.7端口来片选,则DS12887的高8位地址定为7FH,而其低8位则由芯片内部各单元的地址来决定(00H-3FH);DS12887的中断输出端IQR和89C51的外部中断INT0端相联,给单片机提供中断信号;DS12887的SQW端与89C5I的TO端相连。 3.2.4 键盘电路 键盘在由单片机控制的窗帘自动控制系统中的主要作用是通过按键向单片机输入指令,其中主要包括设定时间,控制窗帘的开关等等功能,是人工控制单片机的主要手段。在窗帘控制系统设计中的键盘采用的是4×4矩阵键盘。这16个按键分别为:设定键主要是用来设定自动窗帘打开或者关闭的时间;0-9数字键,其作用主要是用于设定时间;复位键主要应用在程序出错以及误操作的时候使单片机复位,从而重新设定;反转键是使步进电机反转,控制窗帘关闭;正转键是使步进电机正转,从而控制窗帘打开;停止键可以控制步进电机停止工作,窗帘控制器停止运行;确定键主要是用于在时间设定完成后的确定输入。 由于按键比较多,单独设置按键会增加总体设计的复杂性,而且为了减少所占用的端口,可以将按键组成一个矩阵,如图3.2.4所示。 图3.2.4 键盘接口电路 3.2.5 显示电路 显示电路主要是用于显示时间。采用LED数码管进行显示是因为LED数码管具有以下几个优点:(1)能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容。(2)发光响应时间极短(<0.1μs),高频特性好,单色性好,亮度高。(3)体积小,重量轻,抗冲击性能好。 数码管有共阴极和共阳极两种类型,其公共端主要进行位控制,笔画端则是进行字符控制,数码管有静态显示和动态显示两种方法,说明如下: (1)静态显示驱动: 静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O口进行驱动,或者使用如BCD码二—十进位器进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O口多,如驱动5个数码管静态显示则需要5×8=40根I/O口来驱动,要知道一个89C51单片机可用的I/O口才32个。故实际应用时必须增加驱动器进行驱动,增加了硬体电路的复杂性。 (2)动态显示驱动: 数码管动态显示是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp "的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,但能够节省大量的I/O口,而且功耗更低。 本设计采用的是4位LED数码管的串行驱动电路来达到显示的目的。驱动器采用74LS164,由单片机89C51的P3.0和P3.1来控制LED数码管的显示。显示电路图如3.2.5-1所示。 图3.2.5-1 显示电路 74LS164是8 位串行输入,并行输出的移位寄存器。其引脚及各个引脚的作用如下图3.2.5-2所示:    图3.2.5-2 74LS164引脚及说明 3.2.6 A\D转换电路 A/D转换的作用是进行模数转换,把接收到的模拟信号转换成数字信号输出。在选择A/D转换时,先要确定A/D转换精度、转换速度以及转换位数等,A/D转换的位数确定与整个测量控制系统所需测量控制的范围和精度有关,在自定窗帘控制系统中采用了8位A/D转换器ADC0809。 ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D转换器。8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道抵制锁存用译码电路,其转换时间为100μs左右。 ADC0809的主要特性有: (1)8路输入通道,8位A/D转换器,即分辨率为8位。    (2)具有转换起停控制端。    (3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)       (4)模拟输入电压范围0~+5V,不需零点和满刻度校准。    (5)工作温度范围为-40~+85摄氏度    (6)低功耗,约15mW。 ADC0809芯片为28引脚的双列直插式封装,其信号引脚的功能说明如下: IN7~IN0:模拟量输入通道。 ALE:地址锁存允许信号。对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。 START:转换启动信号。START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。 A、B、C:地址线(通道端口选择线),A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC。 CLK:时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500KHz的时钟信号。 EOC:转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。 D7~D0:数据输出线。为三态缓冲输出形式,可以和单片机的数据线直接相连。D0为最低位,D7为最高。 OE:输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。 Vcc:+5V电源。 Vref:参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5V。 多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。地址锁存与译码电路完成对A、B、C 3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连。表3.2.6-1为通道选择表。 表3.2.6-1 通道选择表 ADC0809与单片机89C51的连接示意图如图3.2.6-2所示,其中74LS373为锁存器,当三态允许控制端 OE 为低电平时,O0-O7 为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,O0-O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。 图3.2.6-2 ADC0809与单片机连接示意图 3.2.7 光敏传感器 窗帘自动控制系统的光控功能是可以根据光照的强弱来自动控制窗帘的开闭的,因此需要用到光照传感元器件,在本设计中采用了光敏电阻。 光敏电阻又称光导管,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。光敏电阻属半导体光敏器件,除具灵敏度高,反应速度快,光谱特性及r值一致性好等特点外,在高温,多湿的恶劣环境下,还能保持高度的稳定性和可靠性,可广泛应用于照相机,太阳能庭院灯,草坪灯,验钞机,石英钟,音乐杯,礼品盒,迷你小夜灯,光声控开关,路灯自动开关以及各种光控玩具,光控灯饰,灯具等光自动开关控制领域。 光敏控制电路是由运算放大器组成比较电路,在运算放大器同相输入端用两个电阻分压,得到的电压值作为基准电压,在反相输入端则用光敏电阻对光进行采集,由于光敏电阻具有根据光照强度阻值变化的特点,可以得到反向输入端的电压值。然后将得到的两组电压值进行比较,比较后的信号经过A/D转换送入单片机89C51的P1接口,单片机处理后输出命令控制电机正转或者反转,以实现通过光照控制窗帘的开关功能。本设计采用了型号为GL3526的光敏电阻。 光敏电阻与单片机的连接如图3.2.7所示。 图3.2.7 光敏传感器 3.2.8 步进电机 步进电动机是一种将电脉冲信号转换成角位移或线位移的机电元件。步进电动机的输入量是脉冲序列,输出量则为相应的增量位移或步进运动。正常运动情况下,它每转一周具有固定的步数;做连续步进运动时,其旋转转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。下图为步进电机运行原理图。 图3.2.8步进电机运行原理图 在步进电机控制电路中,步进控制器的作用是把输入脉冲转换成环型脉冲,以控制步进电机的转向。在实际应用中由软件代替步进控制器,其优点是使线路简化,降低成本,可靠性提高。在窗帘控制系统中选用了型号为24BYJ48 12VDC 1/16的四相反应式步进电机,该步进电机有5根引线,排列次序如下:1:红色、2:橙色、3:黄色、4:粉色、5:蓝色。 采用51驱动ULN2003的方法进行驱动, 其优点是力矩大,精度高,其步距角是5.625°。步进电机电路与单片机的连接如图3.2.9。 图3.2.9 步进电机电路与单片机的连接 自动窗帘控制系统的驱动器可以选用大功率复合管,也可以是专门的驱动器,比如光电隔离器,采用光电隔离器一是可以抗干扰,二是起到电隔离的作用。这样可以避免单片机与步进电机功率回路的共地干扰,防止强功率的干扰信号影响主控部分。另外,一旦驱动电路出现故障,也可以隔离较大的电压,不致串入单片机而使其损坏。 步进电机的驱动电路也有很多种,最为常见的是单电压驱动,双电压驱动以及细分驱动等。 3.2.9 信号校正电路 在模拟信号采集过程中,难免会碰到采集信号过于微弱,难以接收到,此时必须采用一个信号放大电路对信号进行一定倍数的放大才能满足A/D转换器对输入信号电平的要求,并且放大器还不能产生干扰信号,因此必须选择一种符合要求的放大器。此外,进行信号采集时,采集到的信号不仅是有用的信号,还有很多干扰信号,应该选用具有频率选择作用的滤波器,这样可以比较有效地滤除噪声和分离各种不同信号,在本设计中采用了低通滤波器。 积分运算电路具有低通特性,而通带放大倍数取决于电阻组成的负反馈网络,故在积分运算电路中电容上并联一个电阻,得到反相输入一阶低通滤波电路,该电路具有放大和滤波功能,如图3.2.10所示。 图3.2.10 放大滤波电路 3.3 窗帘框架构造设计 窗帘框架构造设计包括窗帘微动开关连接电路设计和窗帘架的制作与设计。本设计中的微动开关通过电容、电阻组成的复位电路与单片机的复位引脚相连,微动开关安装在窗帘滑杆上,当窗帘移动到预定位置时,触动微动开关,使单片机复位,此时电机停转,窗帘停到指定位置。如图3.3所示。 图3.3 窗帘框架构 3.3.1 电机选择 本设计选用型号为:24BYJ48 12VDC 1/16 的直流电动机,其优点是力矩大,精度高,大大增加了本设计的可利用性。如图3.3.1。 图3.3.1 24BYJ48 12VDC 1/16直流电机 性能参数: 1.额定电压:12VDC 2.相数:4相 3.减速比:1/16 4.步距角:5.625°/16 5.驱动方式:4相8拍 6.相电阻:120Ω±7%(20℃) 7.空载牵入频率:≥500Hz 8.空载牵出频率:≥800Hz 9.牵入转矩(200Hz):≥125gf.cm 10.自定位转矩:≥100gf.cm 本设计采用的是12V电源来作为直流电机驱动,计算转数与扭矩如下: 按上表参数计算电机在9V下的扭矩, N=最大空载转数×(运行电压÷峰值电压)=63×(9÷12)=47.25r/min M=峰值堵转扭矩×(运行电压÷峰值电压)=7.5×(9÷12)=5.625N.m 在9V的状态下,电机产生5.625的扭矩足以带动绕绳的转动。 第4章 程序分析与设计 4.1 主程序设计 主程序主要完成系统初始化操作及各个子程序之间的联系任务,主程序是无限循环,主要的功能是完成单片机初始化,开关中断,对按键进行扫描,控制步进电机工作,控制计时器等。 主程序流程图如图4.1所示。 图4.1 主程序流程图 主程序流程说明: 电路主要分为以下几个部分,分别是电源部分、显示部分、按键部分,步进电机控制部分、A\D转换部分、单片机主控器件部分,各部分具有不同的子程序。 主程序的作用主要是先初始化寄存器以及显示内容;然后查询按键操作,并且对按键进行分析以及处理,通过分析处理,对于设定键,则设定时间,到了设定的时间后步进电机工作。对于控制键,执行窗帘开闭的工作。如果经过分析后都不是,采取复位的操作。 4.2 主要子程序设计 4.2.1 键盘程序设计 在操作按键时,无论是按下还是松开,触点在闭合和断开时均会产生抖动,此时逻辑电平是不稳的,如果得不到正确处理,可能会引起单片机对按键命令的错误执行。解决这个问题的简单方法是利用软件延时。在单片机处理按键操作后都延时5ms,如果确定是按键后再延时12ms,这样基本可以避免键盘的抖动。然后由单片机进行键码分析,并执行相应的命令,显示并且返回。图4.2.1是键盘程序设计流程图。 图4.2.1 键盘程序流程图 按键设置采用了扫描法,要判断键盘中有无键按下时将全部行线Y0-Y3置低电平,列线置高电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 判断闭合键所在的位置时,在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 例如将单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点,这些交点即为键盘按键。 在单片机应用系统设计中,系统有两性能很大一部分取决于键盘处理程序。在按键时按得快了没有反应,按慢了一连响应几次,总给人迟钝感,不能使人满意。在该设计中用以下思路设计的键处理程序。 首先要判断有没有键值,若有键值,再判断是否为首次按下: (1)若首次按下:判断是否与上次按下的键值相同 a.若相同再判断:是否已经按下了300ms? 1).若已经按下300ms则将此键做为连键处理。 2).若不是连键则判断:是否按下20ms? 1>.若确认按下20ms,得到有效键值等待弹起 2>. 若不是按下20ms直接结束处理(ret)。 b.若不相同则将标志清零结束处理(ret)。 (2)若不是首次按下:将键值暂存起来,标志置位结束处理。 如果无键值,则判断是否有键值已被确认 (1)若有键已被确认:判断按键是否首次抬起 a.若首次抬起:判断抬起延时时间(20ms)是否到达 1>.若延时到则将标志处理结束处理。 2>.若延时未到直接结束处理(ret)。 b.若非首次抬起:直接结束处理(ret)。 (2)若没有键被确认:直接结束处理(ret)。 4.2.2 定时程序设计 定时程序的主要作用是在用户设定的时间后能够使单片机收到一个中断信号,从而发出相应的指令,控制窗帘的开关。时钟芯片发出50ms的信号给单片机后,计数器开始工作,计数器记到20,则时间即为1秒,秒单元加1,当秒单元计数到60,分单元加1,此时秒单元清零。当时单元计数到24,时单元清零。图4.2.2是定时程序流程图。 图4.2.2 定时程序流程图 4.2.3 步进电机程序设计 步进电机是操控窗帘开闭的主要执行器件,其设计主要是按照单片机指令以及按键指令进行正转或者反转。图4.2.3是步进电机程序流程图。 图4.2.3 步进电机程序流程图 步进电机程序设计的主要任务是: (1)判断旋转方向; (2)按顺序传送控制脉冲; (3)判断所要求的控制步数是否传送完毕。 对于四相8拍的设计,其控制方式模型如下: 步 序 控 制 位 工作 状态 控制 模型 P.7 P.6 P.5 P.4 P.3 D相 P.2 C相 P.1 B相 P.0 A相 1 0 0 0 0 0 0 1 1 AB 03H 2 0 0 0 0 0 1 1 0 BC 06H 3 0 0 0 0 1 1 0 0 CD 0CH 4 0 0 0 0 1 0 0 1 DA 09H A组线圈对应 P2.0 B组线圈对应 P2.1 C组线圈对应 P2.2 D组线圈对应 P2.3 正转次序: AB组--BC组--CD组--DA组 (即一个脉冲,正转 7.5 度) 总之,只要按一定的顺序改变 P2.0~P2.3 三位通电的状况,即可控制步进电机依选定的方向步进。而对于节拍比较多的控制程序,通常采用循环程序进行设计。 结论 本次设计系统地介绍了自动窗帘控制系统的硬件电路设计以及软件设计。在总体方案设计中以光敏电阻作为传送信号的传感器,用步进电机作为信号输出的执行元件,89C51单片机作为主要的控制元器件,并且应用了按键以及和显示电路。应用89C51单片机的优势减少了硬件的复杂性,光敏电阻接收外界光照信号,经过A\D转换后,传送给单片机一个电信号,单片机经过处理后,控制步进电机做出相应的动作,以控制窗帘的开闭。在实现一般应用的基础上,又添加了定时元器件电路,使窗帘的自动化性能得到进一步提升。光敏电阻的良好感光性以及步进电机的结构简单,控制方便的优点使窗帘控制开关更加稳定。 本次毕业设计的整个研究与设计过程包括选题、设计以及完善等。首先,在选题方面查阅了很多与题目有关的资料和课题并且制定设计方案,进行设计的总体规划,然后将这些方案落实到设计环节中。其次,在制定的方案基础上运用所学的知识对硬件以及软件进行设计,并用相关软件进行仿真设计。最后,对设计内容进一步修缮,以求达到最佳设计结果。虽然设计内容完成了基本的功能,但是其中还是存在一定欠缺,比如在设计中没有考虑到窗帘工作方式的显示以及没有添加类似红外遥控的设计等。 此次设计过程中,在完成设计任务之外也让我系统性地认识和全面地掌握了单片机相关技术,从本次毕业设计中我更加深刻地认识到理念来源于实际的含义。在和同学以及老师的就相关问题的互相讨论交流中,我认识到自己的很多不足,但在这些不足中我又学到了很多知识,使我的综合应用能力有了很大提高。 致 谢 经过这么长时间的忙碌,毕业设计和论文已经接近尾声。在毕业设计的过程中,由于经验的缺乏以及知识的局限性,难免有许多考虑不周全的地方,在选题,设计等方面,如果没有龙老师的督促指导,没有同学们的支持和帮助,单独完成这个设计,其中还是有一定难度的。在论文完稿之际,我想借此机会对在完成毕业设计期间关心、帮助、支持和鼓励过我的老师、同学以及朋友们致以最诚挚的谢意和最衷心的祝福! 首先我要感谢的是我的指导老师,在完成整个毕业设计的过程中,老师给我提供了很大的帮助,在选题、设计以及修改论文的各个环节里老师给我指出了很多错误,提出了很多宝贵意见,对于设计中存在的问题也是耐心的回答和指导,让我能够顺利的完成毕业设计。在此谨向老师致以诚挚的谢意和崇高的敬意。 其次要感谢的是所有在大学三年中教育指导过我的所有老师,你们传授给我的专业知识是我完成本设计的基础,也是日后踏入工作岗位的重要基石,对于老师们一丝不苟,兢兢业业的精神表示衷心的感谢。 最后我还要向所有关心和支持我学习的朋友和同学们表示真挚的谢意!感谢你们对我的关心、关注和支持。 参 考 文 献 1.童诗白,华成英.模拟电子技术基础.高等教育出版社,2003. 2.胡汉才,单片机原理及接口技术.北京:清华大学出版社,2004. 3.江思敏,胡荣.Protel电路设计教程.北京:清华大学出版社,2002. 4.李全利,迟荣强.单片机原理及接口技术.北京:高等教育出版社,2001. 5.程学先,林珊,程传慧.汇编语言程序设计.北京:机械工业出版社,2005. 6.王建校,杨建国.51系列单片机及C51程序设计.北京:科学出版社,2002. 7.王幸之.AT89系列单片机原理.北京:北京航空航天大学出版社 2004 8.阎石.数字电子技术基础.北京:高等教育出版社,1998. 9.AT89C51 DATA SHEEP Philips Semiconductors 1999.dec 10.李广第. 单片机基础. 北京:北京航空航天大学出版社,2001 11.周航慈,朱兆优. 智能仪器原理与设计. 北京:北京航空航天大学出版社,2005 12.刘守义. 单片机应用技术. 陕西:西安电子科技大学出版社,2007 13.王晓明. 电动机的单片机控制. 北京:北京航空航天大学出版社,2002 14.姚福安.电子电路设计与实践.济南:山东科学技术出版社,2005. 15.刘大茂.智能仪器:单片机应用系统设计.北京:航空工业出版社,1998 附录一:原理图 附录二:程序清单 主程序: ML EQU 32H ;ML存放分的个位数 MH EQU 33H ;MH存放分的十位数 HL EQU 34H ;HL存放小时的个位数 HH EQU 35H ;HH存放小时的十位数 L0 EQU 36H ;L0~L3:显示数据存储器 L1 EQU 37H L2 EQU 38H L3 EQU 39H DSPLYP EQU 3AH ;显示数据指针 PLYTS EQU 3BH ;显示次数计数器 LPLMOD BIT 39H ;低两位显示方式 HPLMOD BIT 3AH ;高两位显示方式 BRIGHT BIT 3BH ;DISPLAY子程序参数 TCOUNT EQU 3CH ;时间计数器 ADDRES EQU 3DH ;加l子程序参数 MAX EQU 3EH ;加l子程序参数 IFDEC BIT 20H ;BCD加法子程序参数 RMOD EQU 3FH LED4 BIT 30H ;发光管状态位 BELL BIT P1.7 WITCH BIT P3.7 FKEY BIT P3.0 ;功能键(S1) MKEY BIT P3.1 ;修改键(S2) WORKIN BIT 38H ;工作状态指示位 MAIN: MOV IE,#00H ;关中断 MOV SP,#57H ;设置堆栈指针 MOV PSW,#00H ;选用寄存器组0 MOV TMOD,#11H ;设定中断工作方式为T0和T1 MOV A,56H CJNE A,#0AAH,CSTART ;判断上电复位标志,无标志转冷启动 MOV A,57H CJNE A,#55H,CSTART ;无标志转冷启动 AJMP HSTART ;有上电复位标志转热启动 NOP NOP CSTART: MOV P1,#0FFH ;冷启动,全面初始化 MOV P3,#0FFH MOV TCON,#00H ;计时停止 MOV TL0,#0B0H ;赋中断T0初值 MOV TH0,#3CH MOV TCOUNT,#0AH ;赋定时器初值 MOV R5,#00H ;R5为一空单元(备用) MOV R4,#00H ;R4为工作模式选择寄存器 MOV ML,#00H MOV MH,#00H ;分 MOV HL,#00H MOV HH,#00H ;时 MOV PLYTS,#64H ;赋显示次数初值为100次 MOV DSPLYP,#L0 ;显示指针指向显存单元 MOV L0,#0AH ;送显示数据“一” MOV L1, #0AH MOV L2,#0AH MOV L3,#04H SETB LED4 ;数码管之间的发光二极管 SETB LPLMOD ;设定显示方式为闪烁 SETB HPLMOD SETB BRIGHT ;允许显示 CLR WORKIN ;清工作标志,待命 AJMP SETUP ;转开始工作 NOP NOP HSTART: MOV SCON,#00H ;有上电标志,热启动,清串行口控制 MOV IP,#00H ;清中断优先控制寄存器 SETB FKEY ;重设按键 SETB MKEY SETB EA ;开中断 AJMP BEGIN ;转向继续工作 NOP NOP SETUP: ETB EA ;开中断 MAINl: ACALL DISPLAY ;调用显示 JB FKEY,JUDGE ;按键扫描 ACALL DELAY1 ;延时消抖动 JB FKEY,JUDGE ;无键按下判断是否到点 CLR ET0 ;功能键被按下 CLR TR0 ;暂停计日寸 ACALL MTAB ;调用菜单设置程序 BEGIN: SETB WORKIN ;置工作标志位,开始工作 SETB ET0 ;开中断 SETB TR0 ;开始计时 MOV A,R4 ;移入工作模式选择 RL A MOV DPTR,#7F01H JMP @A+DPTR ;根据模式转到相应程序段 MTAB: AJMP WORKl AJMP WORK2 AJMP WORK3 AJMP WORK4 NOP NOP WORKl: WORK2: CLR WITCH ;工作方式1和2:开继电器 AJMP MAIN2 NOP NOP WORK3: WORK4: SETB WITCH ;工作方式3和4:不开继电器 MAIN2: CLR BELL ;ACALL DL05S SETB BELL JUDGE: JNB WORKIN,MAINl ;判断是否在定时之中 JNZ MAINl MOV A,ML ;判断分是否为零 JNZ MAINl MOV A,HH ;判断时是否为零 JNZ MAINl ;若时、分、秒全为零 CLR ET0 ;停止计时 CLR TR0 ACALL KEYI ;调用到点工作子程序 AJMP MAIN ;返回 NOP NOP ORG 0100H ROUNT1: MOV A,#N ;步进电机步数→A JNB 00H,LOOP2 ;反向,转 LOOP2 LOOP1: MOV P2,#03H ;正向,A组线圈工作 ACALL DELAY ;延时 DEC A ;A=0,转DONE JZ DONE MOV P2,06H ;B组线圈工作 ACALL DELAY ;延时 DEC A ;A=0,转DONE JZ DONE MOV P2,0CH ;C组线圈工作 ACALL DELAY ;延时 DEC A ;A=0,转DONE JZ DONE MOV P2,09H ;D组线圈工作 ACALL DELAY ;延时 DEC A ;A≠0,转LOOP1 JNZ LOOP1 AJMP DONE ;A=0,转DONE LOOP2: MOV P2,0CH ;反向,A组线圈工作 ACALL DELAY ;延时DEC A;A=0,转DON JZ DONE MOV P2,06H ;B组线圈工作 ACALL DELAY ;延时 DEC A JZ DONE ; MOV P2,03H ;C组线圈工作 ACALL DELAY ;延时 DEC A MOV P2,09H ;D组线圈工作 ACALL DELAY ;延时 DEC A ;A≠0,转LOOP2 JZ DONE JNZ LOOP2 DONE: RET DISPLAY:MOV A , #03H ;初始化 MOV DPTR , #7F00H MOVX @DPTR , A MOV R0 , #60H ;置显示缓冲区首地址 MOV R2 , #01H ;置位选码初值 MOV A , R2 LOOP: MOV DPTR , #7F01H MOVX @DPTR , A INC DPTR MOV A , @R0 ADD A , #0DH ;形成查表的偏移地址 MOVC A , @A+PC DIR: MOVX @DPTR , A ACALL DELAY ;延时 INC R0 MOV A , R2 JB ACC.5 , LOP1 ;判断6位是否显示完毕 RL A MOV R2 , A AJMP LOOP LOP1: RET DB 3FH , 06H , 5BH , 4FH , 66H , 6DH DB 7DH , 07H , 7FH , 6FH , 77H , 7CH DB 39H , 5EH , 79H , 71H DELAY: MOV R7 , #04H DELAY1: MOV R6 , #0FFH DELAY2: DJNZ R6 , DELAY2 DJNZ R7 , DELAY1 RET KEYI: ACALL KS1 ;调用判有无键闭合子程序 JNZ LK1 ;有键闭合,跳LK1 NI: ACALL DIR ;无键闭合,调用显示程序,延迟6ms后,跳KEYI AJMP KEYI LK1: ACALL DIR ;可能有键闭合,延迟12ms,软件去抖 ACALL DIR ACALL KS1 ;调用判有无键闭合子程序 JNZ LK2 ;经去抖,判键确实闭合,跳LK2处理 ACALL DIR ;调用显示子程序延迟6ms AJMP KEYI ;抖动引起,跳KEYI LK2: MOV R2,#0FEH ;列选码→R2 MOV R4,#00H ;R4为列号计数器 LK4: MOV DPTR,#7F01H ;列选码→8155H的PA口 MOV A,R2 MOVX @DPTR,A INC DPTR ;数据指针增2,指向PC口 INC DPTR MOVX A,@DPTR ;读8155H PC口 JB Acc.0,LONE ;0行线为高,无键闭合,跳LONE,转判1行 MOV A,#00H ;0行有键闭合,首键号0→A AJMP LKP ;跳LKP,计算键号 LONE: JB Acc.1,LTW0 ;1行线为高,则跳LTW0,转判2行 MOV A,#08H ;1行有键闭合,首键号8→A AJMP LKP LTW0: JB Acc.2,LTHR ;2行线为高,则跳LTHR,转判3行 MOV A,#10H ;2行有键闭合,首键号10H→A AJMP LKP ;跳LKP,计算键号 LTHR: JB Acc.3,NEXT ;3行线为高,跳NEXT,准备下一列扫描 MOV A,#18H ;3行有键闭合,首键号18H→A LKP: ADD A,R4 ;计算键号:首键号+列号=键号 PUSH ACC ;键号进栈保护 LK3: ACALL DIR ;调用显示子程序,延时6ms ACALL KS1 ;调用无键闭合子程序,延时6ms JNZ LK3 ;判键释放否,未释放,则循环 POP ACC ;键已释放,键号出栈→A RET NEXT: INC R4 ;列计数器加1,为下一列扫描作准备 MOV A,R2 ;判是否已扫到最后一列(最右一列) JNB Acc.7,KND ;键扫描已扫到最后一列,跳KND,重新进行扫描 RL A ;位选码左移一位 MOV R2,A ;位选码→R2 AJMP LK4 KND: AJMP KEYI KS1: MOV DPTR ,#7F01H ;判有无键闭合子程序 MOV A,#00H ;即列线全为低电平 MOVX @DPTR,A INC DPTR ;DPTR增2,指向PC口 INC DPTR ;指针增1,指向PC口 MOVX A,@DPTR ;从PC口读行线的状态 CPL A ;行线取反,如无键按下,则A为0; ANL A,#0FH ;屏蔽无用的高4位 RET END 主程序: ML EQU 32H ;ML存放分的个位数 MH EQU 33H ;MH存放分的十位数 HL EQU 34H ;HL存放小时的个位数 HH EQU 35H ;HH存放小时的十位数 L0 EQU 36H ;L0~L3:显示数据存储器 L1 EQU 37H L2 EQU 38H L3 EQU 39H DSPLYP EQU 3AH ;显示数据指针 PLYTS EQU 3BH ;显示次数计数器 LPLMOD BIT 39H ;低两位显示方式 HPLMOD BIT 3AH ;高两位显示方式 BRIGHT BIT 3BH ;DISPLAY子程序参数 TCOUNT EQU 3CH ;时间计数器 ADDRES EQU 3DH ;加l子程序参数 MAX EQU 3EH ;加l子程序参数 IFDEC BIT 20H ;BCD加法子程序参数 RMOD EQU 3FH LED4 BIT 30H ;发光管状态位 BELL BIT P1.7 WITCH BIT P3.7 FKEY BIT P3.0 ;功能键(S1) MKEY BIT P3.1 ;修改键(S2) WORKIN BIT 38H ;工作状态指示位 MAIN: MOV IE,#00H ;关中断 MOV SP,#57H ;设置堆栈指针 MOV PSW,#00H ;选用寄存器组0 MOV TMOD,#11H ;设定中断工作方式为T0和T1 MOV A,56H CJNE A,#0AAH,CSTART ;判断上电复位标志,无标志转冷启动 MOV A,57H CJNE A,#55H,CSTART ;无标志转冷启动 AJMP HSTART ;有上电复位标志转热启动 NOP NOP CSTART: MOV P1,#0FFH ;冷启动,全面初始化 MOV P3,#0FFH MOV TCON,#00H ;计时停止 MOV TL0,#0B0H ;赋中断T0初值 MOV TH0,#3CH MOV TCOUNT,#0AH ;赋定时器初值 MOV R5,#00H ;R5为一空单元(备用) MOV R4,#00H ;R4为工作模式选择寄存器 MOV ML,#00H MOV MH,#00H ;分 MOV HL,#00H MOV HH,#00H ;时 MOV PLYTS,#64H ;赋显示次数初值为100次 MOV DSPLYP,#L0 ;显示指针指向显存单元 MOV L0,#0AH ;送显示数据“一” MOV L1, #0AH MOV L2,#0AH MOV L3,#04H SETB LED4 ;数码管之间的发光二极管 SETB LPLMOD ;设定显示方式为闪烁 SETB HPLMOD SETB BRIGHT ;允许显示 CLR WORKIN ;清工作标志,待命 AJMP SETUP ;转开始工作 NOP NOP HSTART: MOV SCON,#00H ;有上电标志,热启动,清串行口控制 MOV IP,#00H ;清中断优先控制寄存器 SETB FKEY ;重设按键 SETB MKEY SETB EA ;开中断 AJMP BEGIN ;转向继续工作 NOP NOP SETUP: ETB EA ;开中断 MAINl: ACALL DISPLAY ;调用显示 JB FKEY,JUDGE ;按键扫描 ACALL DELAY1 ;延时消抖动 JB FKEY,JUDGE ;无键按下判断是否到点 CLR ET0 ;功能键被按下 CLR TR0 ;暂停计日寸 ACALL MTAB ;调用菜单设置程序 BEGIN: SETB WORKIN ;置工作标志位,开始工作 SETB ET0 ;开中断 SETB TR0 ;开始计时 MOV A,R4 ;移入工作模式选择 RL A MOV DPTR,#7F01H JMP @A+DPTR ;根据模式转到相应程序段 MTAB: AJMP WORKl AJMP WORK2 AJMP WORK3 AJMP WORK4 NOP NOP WORKl: WORK2: CLR WITCH ;工作方式1和2:开继电器 AJMP MAIN2 NOP NOP WORK3: WORK4: SETB WITCH ;工作方式3和4:不开继电器 MAIN2: CLR BELL ;ACALL DL05S SETB BELL JUDGE: JNB WORKIN,MAINl ;判断是否在定时之中 JNZ MAINl MOV A,ML ;判断分是否为零 JNZ MAINl MOV A,HH ;判断时是否为零 JNZ MAINl ;若时、分、秒全为零 CLR ET0 ;停止计时 CLR TR0 ACALL KEYI ;调用到点工作子程序 AJMP MAIN ;返回 NOP NOP ORG 0100H ROUNT1: MOV A,#N ;步进电机步数→A JNB 00H,LOOP2 ;反向,转 LOOP2 LOOP1: MOV P2,#03H ;正向,A组线圈工作 ACALL DELAY ;延时 DEC A ;A=0,转DONE JZ DONE MOV P2,06H ;B组线圈工作 ACALL DELAY ;延时 DEC A ;A=0,转DONE JZ DONE MOV P2,0CH ;C组线圈工作 ACALL DELAY ;延时 DEC A ;A=0,转DONE JZ DONE MOV P2,09H ;D组线圈工作 ACALL DELAY ;延时 DEC A ;A≠0,转LOOP1 JNZ LOOP1 AJMP DONE ;A=0,转DONE LOOP2: MOV P2,0CH ;反向,A组线圈工作 ACALL DELAY ;延时DEC A;A=0,转DON JZ DONE MOV P2,06H ;B组线圈工作 ACALL DELAY ;延时 DEC A JZ DONE ; MOV P2,03H ;C组线圈工作 ACALL DELAY ;延时 DEC A MOV P2,09H ;D组线圈工作 ACALL DELAY ;延时 DEC A ;A≠0,转LOOP2 JZ DONE JNZ LOOP2 DONE: RET DISPLAY:MOV A , #03H ;初始化 MOV DPTR , #7F00H MOVX @DPTR , A MOV R0 , #60H ;置显示缓冲区首地址 MOV R2 , #01H ;置位选码初值 MOV A , R2 LOOP: MOV DPTR , #7F01H MOVX @DPTR , A INC DPTR MOV A , @R0 ADD A , #0DH ;形成查表的偏移地址 MOVC A , @A+PC DIR: MOVX @DPTR , A ACALL DELAY ;延时 INC R0 MOV A , R2 JB ACC.5 , LOP1 ;判断6位是否显示完毕 RL A MOV R2 , A AJMP LOOP LOP1: RET DB 3FH , 06H , 5BH , 4FH , 66H , 6DH DB 7DH , 07H , 7FH , 6FH , 77H , 7CH DB 39H , 5EH , 79H , 71H DELAY: MOV R7 , #04H DELAY1: MOV R6 , #0FFH DELAY2: DJNZ R6 , DELAY2 DJNZ R7 , DELAY1 RET KEYI: ACALL KS1 ;调用判有无键闭合子程序 JNZ LK1 ;有键闭合,跳LK1 NI: ACALL DIR ;无键闭合,调用显示程序,延迟6ms后,跳KEYI AJMP KEYI LK1: ACALL DIR ;可能有键闭合,延迟12ms,软件去抖 ACALL DIR ACALL KS1 ;调用判有无键闭合子程序 JNZ LK2 ;经去抖,判键确实闭合,跳LK2处理 ACALL DIR ;调用显示子程序延迟6ms AJMP KEYI ;抖动引起,跳KEYI LK2: MOV R2,#0FEH ;列选码→R2 MOV R4,#00H ;R4为列号计数器 LK4: MOV DPTR,#7F01H ;列选码→8155H的PA口 MOV A,R2 MOVX @DPTR,A INC DPTR ;数据指针增2,指向PC口 INC DPTR MOVX A,@DPTR ;读8155H PC口 JB Acc.0,LONE ;0行线为高,无键闭合,跳LONE,转判1行 MOV A,#00H ;0行有键闭合,首键号0→A AJMP LKP ;跳LKP,计算键号 LONE: JB Acc.1,LTW0 ;1行线为高,则跳LTW0,转判2行 MOV A,#08H ;1行有键闭合,首键号8→A AJMP LKP LTW0: JB Acc.2,LTHR ;2行线为高,则跳LTHR,转判3行 MOV A,#10H ;2行有键闭合,首键号10H→A AJMP LKP ;跳LKP,计算键号 LTHR: JB Acc.3,NEXT ;3行线为高,跳NEXT,准备下一列扫描 MOV A,#18H ;3行有键闭合,首键号18H→A LKP: ADD A,R4 ;计算键号:首键号+列号=键号 PUSH ACC ;键号进栈保护 LK3: ACALL DIR ;调用显示子程序,延时6ms ACALL KS1 ;调用无键闭合子程序,延时6ms JNZ LK3 ;判键释放否,未释放,则循环 POP ACC ;键已释放,键号出栈→A RET NEXT: INC R4 ;列计数器加1,为下一列扫描作准备 MOV A,R2 ;判是否已扫到最后一列(最右一列) JNB Acc.7,KND ;键扫描已扫到最后一列,跳KND,重新进行扫描 RL A ;位选码左移一位 MOV R2,A ;位选码→R2 AJMP LK4 KND: AJMP KEYI KS1: MOV DPTR ,#7F01H ;判有无键闭合子程序 MOV A,#00H ;即列线全为低电平 MOVX @DPTR,A INC DPTR ;DPTR增2,指向PC口 INC DPTR ;指针增1,指向PC口 MOVX A,@DPTR ;从PC口读行线的状态 CPL A ;行线取反,如无键按下,则A为0; ANL A,#0FH ;屏蔽无用的高4位 RET END

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高员外,我们会尽快处理。