




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南理工学院课程设计湖南理工学院单片微机原理课程设计报告书题 目: 多功能时间控制器 系 部: 机 电 专 业: 自 动 化 班 级: 03级自动化3班 姓 名: 学 号: 起迄日期:2006年6月19日-2006年6月30日指导教师: 单片微机原理课程设计任务书1课程设计的内容和要求(包括原始数据、技术要求、工作要求等):功能要求:多功能时间控制器能够产生6路独立的时间控制信号;每路都能按如下4种定时模式工作:(1)、定时关机,定时范围:1s30min59s。(2)、定时关机,定时范围:1min30 h 59 min。(3)、定时开机,定时范围:1s30min59s。(4)、定时开机,定时范围:1min30 h 59 min。技术要求:系统停电后,系统定时工作模式信息不会丢失,上电后仍能正常工作;系统安全可靠,不会出现死机现象。定时精度误差,每天0.1s。操作方便。单片微机原理课程设计任务书2对课程设计成果的要求包括图表、实物等硬件要求:设计硬件系统:说明各部分的工作原理,进行相关元器件的参数选择和计算,用protel画出系统硬件图。(要求提出两个以上的设计方案进行比较论证)系统软件设计:系统功能模块的划分,主要功能模块的流程图。源程序在实验箱上进行仿真调试。撰写系统使用说明书。3主要参考文献:1 赵育良 许兆林.“看门狗”技术在某型相机导航数据接口板中的应用j 国外电子元器件 2005(12)2 刘芳芳 黄会雄 单片机测控系统抗干扰方法的研究与改进j 电子质量 2006.(1)3 姚德法 张洪林 串行时钟芯片ds1302的原理与使用j 信息技术与信息.2006.(1)4 张晓军 罗翔 史金辉 基于时钟芯片的定时控制装置j 现代电子技术 2006(1)5 沈卫红 单片机应用系统设计实例与分析m 北京航空航天大学出版社6 楼苗然 李光辉 51系列单片机设计实例m 北京航空航天大学出版社4课程设计工作进度计划:序号起 迄 日 期工 作 内 容16.196.21进行系统功能分析,查阅相关资料,提出系统初步设计方案。26.226.24硬件系统详细设计,画出详细设计电路图,按排好端口地址。36.256.27软件设计并调试。所有功能在实验箱上实现。46.286.29撰写课程设计报告56.30交设计资料,并答辩。主指导教师日期: 年 月 日目 录1 引言12 单片机概述13 芯片的选择与简介13.1 at89c-51芯片简介 13.2 8255芯片简介 33.2.1 8255可编程并行接口芯片简介33.2.2 8255a的内部结构 33.2.3 8255可编程并行接口芯片方式控制字格式说明 43.3 时钟芯片12887芯片简介 5 3.3.1 特点 5 3.3.2 管脚名称 5 3.3.3 管脚功能 63.4 共阳极的七段数码管 64 控制器硬件的设计 74.1 多功能时间控制器方案论证 74.2 系统硬件设计 74.2.1 控制器系统流程图 84.2.2 控制器控制线路 95 系统编程信息及内存分布106 使用说明107 总结118 参考文献119 附程序清单1. 引言近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制的单片机应用系统中,单片机往往是随着生活水平的上升,现代家庭拥有多种电器。如冰箱,洗衣机,彩电,空调等等。这些电器的开关总是有一定的规律,所以我们可以对它们进行定时开关设计。本设计把你从这些烦琐的开关小事中解放出来。让你享受更高水平的控制技术给您带来的方便。本系统采用msc-51系列单片机at89c51和可编程并行i/o接口芯片8255a为中心器件来设计多功能控制器,实现了对多路电路的开关的控制;显示时间直接通过8255的pa、pb口输出;输入时间和所控制的电路选择有按键控制;系统实用性强、操作简单、显示界面人性化。未来家庭一定是一个自动化程度很高,控制技术得到非常广泛的应用。多功能时间控制器应用领域非常广泛。 2. 单片机概述 单片机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。一块单片机芯片就是具有一定规模的微型计算机系统。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和i/o接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机经过几代的发展,目前的单片机正朝着高性能和多品种方向发展,它们的cpu功能在增强,内部资源在增多,引脚的多功能化,以及低电压低功耗。目前在智能仪器,工业控制,家用电器,机电一体化。网络通信等领域都应用到了。而我们的十字路口交通灯的控制就是单片机在日常生活中的一个典型的应用。3 芯片的选择与简介3.1 at89c51芯片简介at89c51单片机采用40pin封装的双列直接dip结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个i/o口,中断口线与p3口线复用。引脚说明如下图(3.1.1): 图(3.1.1)at89c51的引脚图vcc at89c51 电源正极输入,接+5v 电压。gnd 电源接地端。xtal1 接外部晶振的一个引脚。在单片机内部,它是一反相放大器输入端,这个放大器构成了片内振荡器。它采用外部振荡器时,些引脚应接地。xtal2 接外部晶振的一个引脚。在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端。当采用外部振荡器时,则此引脚接外部振荡信号的输入。rst at89c51 的复位信号输入引脚,高电位工作,当要对芯片又时,只要将此引脚电位提升到高电位,并持续两个机器周期以上的时间,at89c51 便能完成系统复位的各项工作,使得内部特殊功能寄存器的内容均被设成已知状态。ale/prog ale 是表示允许地址锁存允许信号。当访问外部存储器时,ale 信号负跳变来触发外部的8 位锁存器 (如74ls373),将端口p0 的地址总线(a0-a7)锁存进入锁存器中。在非访问外部存储器期间,ale 引脚的输出频率是系统工作频率的 1/16,因此可以用来驱动其他外围芯片的时钟输入。当问外部存储器期间,将以1/12 振荡频率输出。ea/vpp 该引脚为低电平时,则读取外部的程序代码 (存于外部eprom 中)来执行程序。因此在8031 中,ea 引脚必须接低电位,因为其内部无程序存储器空间。如果是使用at89c51或其它内部有程序空间的单片机时,此引脚接成高电平使程序运行时访问内部程序存储器,当程序指针pc 值超过片内程序存储器地址(如051/8751/89c51 的pc 超过0fffh)时,将自动转向外部程序存储器继续运行。此外,在将程序代码记录至8751 内部eprom、89c51 内部falsh 时,可以利用此引脚来输入提供编程电压(8751 为2lv、at89c51 为12v、8051 是由生产厂方一次性加工好)。at89c51的复位方式可以是自动复位,也可以是手动复位,见下图。此外,ea/vpp还是一复用脚,vcc掉电其间,此脚可接上备用电源,以保证单片机内部ram的数据不丢失。如图(3.1.2):图(3.1.2):psen 此为program store enable的缩写。访问外部程序存储器选通信号,低电平有效。在访问外部程序存储器读取指令码时,每个机器周期产生二次psen 信号。在执行片内程序存储器指令时,不产生psen 信号,在访问外部数据时,亦不产生psen 信号。p0 p0口(p0.0p0.7)是一个8 位漏极开路双向输入输出端口,当访问外部数据时,它是地址总线(低8 位)和数据总线复用。外部不扩展而单片应用时,则作一般双向io 口用。p0 口每一个引脚可以推动8 个lsttl 负载。p2 p2口(p2.0p2.7)口是具有内部提升电路的双向i/0 端口(准双向并行i/o 口),当访问外部程序存储器时,它是高8 位地址。外部不扩展而单片应用时,则作一般双向io 口用。每一个引脚可以推动4 个lstl 负载。p1 p1口(p1.0p1.7)口是具有内部提升电路的双向i/0 端口(准双向并行i/o 口),其输出可以推动4 个lsttl 负载。仅供用户作为输入输出用的端口。p3 p3口(p3.0p3.7)口是具有内部提升电路的双向i/0 端口(准双向并行i/o 口),它还提供特殊功能,包括串行通信、外部中断控制、计时计数控制及外部随机存储器内容的读取或写入控制等功能。其特殊功能引脚分配如下:p3.0 rxd 串行通信输入p3.1 txd 串行通信输出p3.2 int0 外部中断0 输入,低电平有效p3.3 int1 外部中断1 输入,低电平有效p3.4 t0 计数器0 外部事件计数输入端p3.5 t1 计数器1 外部事件计数输入端p3.6 wr 外部随机存储器的写选通,低电平有效p3.7 rd 外部随机存储器的读选通,低电平有效3.2 8255芯片简介3.2.1 8255可编程并行接口芯片简介:8255a是一个具有3个8位数据口(即a口、b口、c口,其中c口还可作为两个4位口来使用)的并行输入/输入端口的接口芯片,它为cpu与外部设备提供了ttl电平兼容并行接口。三个数据口均可用软件来设置成输入口或输出口,与外设相连。c口具有按位置位/复位的功能,为按位控制提供了强有力的支持。 8255a具有3种工作方式,即方式0,方式1,方式2。可适应cpu与外设间的多种数据传送方式,如查询方式和中断方式等,以满足用户的各种应用要求。 8255a具有两条功能强、内容丰富的控制命令(方式字和控制字),为用户根据外界条件(i/o设备需要哪些信号线以及它能提供哪些状态线)来使用8255a构成多种接口电路和提供灵活方便的编程环境。8255a执行命令过程中和执行命令完毕之后,所产生的状态可保留在状态字中以便查询。 8255a的c口是一个特殊的端口,除作数据口外,当工作在方式1和方式2时,利用对c口的按位控制可为a、b口提供专门的联络控制信号;在cpu读取8255a状态时,c口可作为方式1和方式2的状态字。 8255a芯片内部主要由控制寄存器、状态寄存器和数据寄存器组成,因此以后的编程主要是对这三类寄存器进行访问。3.2.2 8255a的内部结构8255a内部结构由三部分组成:外设接口部分(通道a、b、c);内部逻辑部分(a组和b组控制电路)和cpu接口部分 (数据总线缓冲器,读/写控制逻辑)。8255a内部结构方框图(3.2.1) 图(3.2.1)8255可编程并行接口芯片有三个输入输出端口,即a口、b口和c口,对应于引脚pa7pa0、pb7pb0和pc7pc0。其内部还有一个控制寄存器,即控制口。通常a口、b口作为输入输出的数据端口。c口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。它们分别与端口a配合使用,可以用作控制信号输出或作为状态信号输入。3.2.3 8255可编程并行接口芯片方式控制字格式说明:8255有两种控制命令字;一个是方式选择控制字;另一个是c口按位置位复位控制字。其中c口按位置位复位控制字方式使用较为繁难,说明也较冗长,故在此不作叙述,需要时用户可自行查找有关资料。方式控制字格式说明如下图(3.2.2):图(3.2.2) d7:设定工作方式标志,“1”有效。 d6、d5:a口方式选择 0 0 方式0 0 1 方式1 1 方式2 d4:a口功能 (1=输入,0=输出) d3:c口高4位功能 (1=输入,0=输出) d2:b口方式选择 (0=方式0,1=方式1) d1:b口功能 (1=输入,0=输出)d0:c口低4位功能 (1=输入,0=输出)8255可编程并行接口芯片工作方式说明: 方式0:方式0是一种基本输入或输出方式,该方式适合于通信双方不需要联络信号(应答信号)的简 单输入/输出场合,cpu可以随时用输入/输出指令对指定端口进行读写操作。 方式1:选通输入输出方式。这时a口或b口的8位外设线用作输入或输出,c口的4条线中三条用作数据传输的联络信号和中断请求信号。 方式2 :双向总线方式。只有a口具备双向总线方式,8位外设线用作输入或输出,此时c口的5条线用作通讯联络信号和中断请求信号。3.3 ds12887时钟芯片3.3.1 特点:可作为ibmat计算机的时钟和日历与mc14681b和ds1287的管脚兼容在没有外部电源的情况下可工作10年自带晶体振荡器及电池可计算到2100年前的秒、分、小时、星期、日期、月、年七种日历信息并带闰年补偿用二进制码或bcd码代表日历和闹钟信息有12和24小时两种制式,12小时制时有am和pm提示可选用夏令时模式可以应用于motorola和intel两种总线数据/地址总线复用内建128字节ram14字节时钟控制寄存器114字节通用ram可编程方波输出总线兼容中断(/irq)三种可编程中断时间性中断可产生每秒一次直到每天一次中断 周期性中断122ms到500ms 时钟更新结束中断3.3.2 管脚名称:ad0ad7地址/数据复用总线nc空脚mot总线类型选择(motorola/intel)cs片选asaler/w在intel总线下作为/wrds在intel总线下作为/rdreset复位信号irq中断请求输出sqw方波输出上电/掉电:当vcc高于4.25v200ms后,芯片可以被外部程序操作;当vcc低于4.25v时,芯片处于写保护状态(所有的输入均无效),同时所有输出呈高阻状态;当vcc低于3v时,芯片将自动把供电方式切换为由内部电池供电。3.3.3 管脚功能:mot(总线模式选择)当此脚接到vcc时,选用的是motorola总线时序;当它接到地或不接时,选用的是intel总线时序。sqw(方波输出)当vcc低于4.25v时没有作用。ad0ad7(双向数据/地址复用总线)as(地址锁存)aleds(data strobe or read input) rd当系统选择的是intel总线模式时,ds被称作rd。当它有效时表示ds12887正在往总线输出数据。rd信号线在有贮器芯片上被称作oe信号线。r/w(read/write input) wrcs(片选输入) cs当vcc低于4.25v时,ds12887从内部禁止对外部cs的操作。此时时钟和ram都被保护起来。irq(中断请求输出)当中断状态位和对应的中断允许位有效时,irq的输出保持为低。复位和读c寄存器都可以清除irq中断信号。没有中断时,irq呈高阻状态,其他中断源还可以挂接到中断总线上,由于irq是漏极输出,所以需要外接上拉电阻。reset(复位)复位脚对时钟、日历、ram无效。系统上电时复位脚要保持低电平200ms以上ds12887才可以正常工作。当复位脚为低并且vcc高于4.25v时,以下情况发生: a.周期中断允许(pie)位清0b.闹钟中断允许(aie)位清0c.更新完成中断标志(uf)位清0d.中断请求状态标志(irqf)位清0e.周期中断标(pf)位清0f.当reset为低时ds12887不可操作g.闹钟中断标志(af)位清0h.irq呈高阻状态i.方波输出允许(sqwe)位清03.4 共阳极的七段数码管数共阳极的七段数码管。如图(3.4.1) 图(3.4.1)vt为双向晶闸管,当门极为高电平时晶闸管导通,该支路指示灯亮;当门极为高电平时晶闸管关断,该支路指示灯灭。4 控制器硬件系统设计4.1多功能时间控制器的方案论证方案一:采用定时装置,将各路信号的定时时间都分别用个自的中断定时装置来控制。这种方法不能满足6路的需求,中断源不够。方案二:三位时间对比法。首先是有一个系统时间,在统一的系统时间下,把将6路信号所定时间的低两位再加上它的高一位(比如说:分与秒的定时,我们再加一个小时位,把他们的个位和十位拆开后的6个数)各存在6个单元中。然后再把系统当前时间拆开后和所定的时间相加,结果放在这6单元中,然后再比较所存时间和系统的当前时间是否一致,当一致时发出动作信号。这个方案的不足之处在于,当定时时间刚好超过最高位的最大时间时,便会产生意想不到的错误。方案三:采用倒计时法,系统上电后,显示器上显示的是系统的当前时间,用户如果要修改这个时间可以按相应的功能键来设置,本设计使用的12887时间芯片,可以提供很精确的时钟时间。当用户按下键盘上的“a”功能键,就可以开始设置开关机时间了。操作方法是:先按“a”键,听到“的”的一声,按数字键“16”,就可以选择六个通道中的其中一个通道,听到“的”的一声,再按功能键“a、b、c、d”,分别代表:方式一、方式二、方式三、方式四,此时就可以设定你想要的定时时间了。各种方式的定时范围分别是:(1)、定时关机,定时范围:1s30min59s。(2)、定时关机,定时范围:1min30 h 59 min。(3)、定时开机,定时范围:1s30min59s。(4)、定时开机,定时范围:1min30 h 59 min。设定好时间后,定时时间会在显示器上显示不动,按“f”键确定就可以了,这时显示器又显示系统的系统时间。当某个通道的定时时间到了后,相应通道的指示灯会被点亮,系统会送出相应的控制信号,非常方便。4.2系统硬件设计选用设备8051单片机一片选用设备:8051单片机一片,8255并行通用接口芯片一片,时钟芯片12887一片,共阳极的七段数码管8个 ,方框图如下图(4.2.1):89c51128878255控制对象控制对象控制对象控制对象控制对象控制对象显示器键盘图(4.2.1)421 系统流程图如下: 开始初始化是否为初次上电初始化并设置系统时间否从片外取系统时间并显示等待有无按键否有铵键,分析取键值,并判断是否为功能键是是功能键吗否选通道,选方式,设定时时间,确定是是422 控制器控制线路图 5 系统编程信息及内存分布1 6路出发信号接p1.0p1.52 12887 发出的时分秒信号 在片外的bf04h、bf02h、bf00h单元内,在片内的25h、26h、27h单元内。经转换成非压缩的bcd码后存在 50h57h 单元内3 disp子程序的显示时间从50h57h得到,disp还承担了显示从键盘输入的定时时间(60h67h)、(68h6fh)、(72h7ah)。4 标志位信息ka bit 24h.6 ;设置键标志位chanal1 bit 21h.0 ;通道1的标志位chanal2 bit 21h.1 ;通道2的标志位chanal3 bit 21h.2 ;通道3的标志位chanal4 bit 21h.3 ;通道4的标志位chanal5 bit 21h.4 ;通道5的标志位chanal6 bit 21h.5 ;通道5的标志位cha1mod1 bit 21h.6 ;通道1下的方式1的标志位cha1mod2 bit 21h.7 ;通道1下的方式2的标志位cha1mod3 bit 22h.0 ;通道1下的方式3的标志位cha1mod4 bit 22h.1 ;通道1下的方式4的标志位cha2mod1 bit 22h.2 ;通道2下的方式1的标志位cha2mod2 bit 22h.3 ;通道2下的方式2的标志位cha2mod3 bit 22h.4 ;通道2下的方式3的标志位cha2mod4 bit 22h.5 ;通道2下的方式4的标志位cha3mod1 bit 22h.6 ;通道3下的方式1的标志位cha3mod2 bit 22h.7 ;通道3下的方式2的标志位cha3mod3 bit 23h.0 ;通道3下的方式3的标志位cha3mod4 bit 23h.1 ;通道3下的方式4的标志位cha4mod1 bit 23h.2 ;通道4下的方式1的标志位cha4mod2 bit 23h.3 ;通道4下的方式2的标志位cha4mod3 bit 23h.4 ;通道4下的方式3的标志位cha4mod4 bit 23h.5 ;通道4下的方式4的标志位cha5mod1 bit 23h.6 ;通道5下的方式1的标志位cha5mod2 bit 23h.7 ;通道5下的方式2的标志位cha5mod3 bit 24h.0 ;通道5下的方式3的标志位cha5mod4 bit 24h.1 ;通道5下的方式4的标志位cha6mod1 bit 24h.2 ;通道6下的方式1的标志位cha6mod2 bit 24h.3 ;通道6下的方式2的标志位cha6mod3 bit 24h.4 ;通道6下的方式3的标志位cha6mod4 bit 24h.5 ;通道6下的方式4的标志位6 使用说明书当用户按下键盘上的“a”功能键,就可以开始设置开关机时间了。操作方法是:先按“a”键,听到“的”的一声,按数字键“16”,就可以选择六个通道中的其中一个通道,听到“的”的一声,再按功能键“a、b、c、d”,分别代表:方式一、方式二、方式三、方式四,此时就可以设定你想要的定时时间了。各种方式的定时范围分别是:(1)、定时关机,定时范围:1s30min59s。(2)、定时关机,定时范围:1min30 h 59 min。(3)、定时开机,定时范围:1s30min59s。(4)、定时开机,定时范围:1min30 h 59 min。设定好时间后,定时时间会在显示器上显示不动,按“f”键确定就可以了,这时显示器又显示系统的系统时间。当某个通道的定时时间到了后,相应通道的指示灯会被点亮,系统会送出相应的控制信号7 总结设计多路时间控制器的关键就是要在软件上难得实现,硬件上是很好实现的。在设计的初始阶段,对设计的方案的筛选进行了科学的研究,最后决定采用倒计时法来完成设计。这个方案设计起来在算法上相对来说要简单点。由于有六路信号要单独控制,这给软件设计带来了很大的困难,理论上来说,只要实现了其中的一路,其它的五路就很好实现了,但在实际设计中,情况并不像想象的那么简单,中间用到了大量的标志位来记录某种操作,如果单独设计某一路在来设计其它五路,那么这么大的程序整合起来后,就会出现很多意想不到的问题,由于像这样的设计经验不足,我在设计中走了很多弯路,以至于在规定的时间内,不能把任务很圆满的完成。不过对这次设计的结果还是很满意,毕竟非常专注地工作了两个星期还是有很大收获的。多路时间控制器的设计完成在市场需求方面前景很广,可以继续研究、设计完善。8参考文献1 赵育良 许兆林.“看门狗”技术在某型相机导航数据接口板中的应用j 国外电子元器件 2005(12)2 刘芳芳 黄会雄 单片机测控系统抗干扰方法的研究与改进j 电子质量 2006.(1)3 姚德法 张洪林 串行时钟芯片ds1302的原理与使用j 信息技术与信息.2006.(1)4 张晓军 罗翔 史金辉 基于时钟芯片的定时控制装置j 现代电子技术 2006(1)5 沈卫红 单片机应用系统设计实例与分析m 北京航空航天大学出版社6 楼苗然 李光辉 51系列单片机设计实例m 北京航空航天大学出版社多功能时间控制器程序清单;* * 主程序 *;* p_a equ 7c00h ;8255p_b equ 7d00hp_c equ 7e00hreg_a equ 0bf0ahreg_b equ 0bf0bhreg_c equ 0bf0chsecond_x equ 0bf00hminute_x equ 0bf02hhour_x equ 0bf04hsecond equ 27h ;秒数据存储单元cmin equ 26h ;分数据chr equ 25h ;小时数据address1 equ 20h ;输入数据入口地址address2 equ 2bhcs bit 0bf59hindata2 bit 2fhindata1 bit 24h.7indatacha bit 48horg 0000h ljmp start ;跳至start执行org 0003h reti ;中断返回(不开中断)org 000bh ;定时器t0中断入口地址reti ;中断返回(不开中断)org 0013h ;外中断1中断入口地址reti ;中断返回(不开中断)org 001bh ;定时器t1中断入口地址ljmp intt1 ;进入定时器中断程序org 0023h ;串行口中断入口地址reti ;中断返回(不开中断)org 002bh ;定时器t2中断入口地址reti ;中断返回(不开中断)org 0100h;* start: mov sp,#68h mov r3,#08h mov a,#10h mov r0,#50h vv:mov r0,a inc r0 djnz r3,vv mov r3,#08h mov a,#10h mov r0,#58h vv01:mov r0,a inc r0 djnz r3,vv01 mov r3,#08h mov a,#10h mov r0,#60h vv02:mov r0,a inc r0 djnz r3,vv02 mov r3,#08h mov a,#10h mov r0,#68h vv03:mov r0,a inc r0 djnz r3,vv03 mov r3,#08h mov a,#10h mov r0,#72h vv04:mov r0,a inc r0 djnz r3,vv04 mov dptr,#con;初始化 mov a,#88h movx dptr,a mov dptr,#cs movx a,dptr cjne a,#0bbh,pp ajm start2 pp: clr p1.7 mov a,#0bbh movx dptr,a clr indatacha ;clr indata lcall disp lcall dl10ms lcall input_time lcall in_time lcall disp lcall disp lcall dl02s lcall dl02s setb ea start1: mov tcon,#01h;it0边沿方式,初始化125887 mov ie,#81hmov dptr,#reg_bmov a,#10000000b;禁止更新数据movx dptr,amov dptr,#reg_b;bcd模式,24小时制,允许更新结束中断mov a,#00010010bmovx dptr,amov dptr,#reg_amov a,#00100000b;开启振荡,允许计时movx dptr,a start2: clr p1.7clr indatasetb indatachalcall disp_time ;调用显示子程序ss:lcall displcall dl10mslcall ks11 ;判断是否有键按下,若有,则调用键盘程序jz sslcall va_keymov a,2ahcjne a,#0ffh,enxajmp start2enx: lcall disp;判断是否为功能键mov a,2ah cjne a,#0ah,mmlcall key_amm:lcall start2lcall displcall va_keylcall key_datastep:setb easetb et1ljmp start1;*; * 键盘程序 *;*va_key: mov psw,#00hlcall ks11;键闭合?jz va_key;无闭合返回lcall dl10ms;延时 lcall dl10ms; lcall ks11 jz reof0 ;无闭合返回 mov r7,#0eeh;有闭合处理 mov r5,#04h clr a mov r3,a;行 mov r4,a;列loop:mov dptr,#p_c mov a,r7 movx dptr,a;扫描码送pc口 movx a,dptr;读c口 jb acc.4,key0;为1转下一列 sjmp reof;为0输出返回key0:jb acc.5,key1 mov r3,#01h sjmp reofkey1:jb acc.6,key2 mov r3,#02h sjmp reofkey2:jb acc.7,key3 mov r3,#03h sjmp reofkey3:djnz r5,next mov a,#0ffh sjmp eofnext:mov a,r7 rl a mov r7,a inc r4 inc r4 inc r4 inc r4 sjmp loopreof:mov a,r3 add a,r4 mov b,aeof:lcall ks11;键松开? jnz eof mov 2ah,b sjmp rettreof0:mov 2ah,#0ffhrett:ret;* input_time: lcall disp lcall ks11jz input_time lcall va_keymov psw,#00hmov a,2ahmov r0,#50hclr csubb a,#03hjnc input_time;无借位,时十位大于2重来mov r0,2ah;存时十位(30h,38h)yy1:lcall displcall dl10ms lcall ks11jz yy1lcall va_keymov a,2ahsubb a,#0ahjnc input_timemov a,2ahsubb a,#04hjc next2_t;有借位,时个位小于4存数字mov a,r0cjne a,#02h,next2_t;时个位大于3但时十位不等于2存数字ljmp input_timenext2_t:inc r0mov r0,2ah;存时个位(31h,39h) yy2:lcall displcall dl10mslcall ks11jz yy2 next3_t:lcall va_keymov a,2ahclr csubb a,#06hjnc input_time;无借位分十位大于6重来inc r0inc r0mov r0,2ah;存分十位(2bh)yy3:lcall displcall dl10mslcall ks11jz yy3lcall va_keylcall key_datamov a,2ahsubb a,#0ahjnc inp07;无借位,分个位大于10重来jc inp007inp07:lcall input_timeinp007:inc r0mov r0,2ah;存分位位(2ch)lcall dispyy4:lcall displcall dl10mslcall ks11jz yy4lcall va_keymov a,2ahclr csubb a,#06hjnc int001;秒十位大于6重来jc int0001int001:lcall input_timeint0001:inc r0inc r0mov r0,2ah;存秒十位(2eh)yy5:lcall displcall dl10mslcall ks11jz yy5lcall va_keymov a,2ahclr csubb a,#0ahjnc int002jc int0002int002:lcall input_timeint0002:inc r0mov r0,2ah;存秒个位(2fh)lcall displcall dl10msret;* in_time:mov dptr,#reg_amov a,#00100000bmovx dptr,amov dptr,#reg_bmov a,#10000000bmovx dptr,amov r0,#50hmov dptr,#hour_xmov a,r0anl a,#0fhswap ainc r0orl a,r0movx dptr,ainc r0inc r0mov dptr,#minute_xmov a,r0swap ainc r0orl a,r0movx dptr,ainc r0inc r0mov dptr,#second_xmov a,r0swap ainc r0orl a,r0movx dptr,amov dptr,#reg_b;bcd模式,24小时制,允许更新结束中断mov a,#00010010bmovx dptr,aret_in:ret;是否闭合子程序;ks11:mov dptr,#p_cmov a,#0f0hmovx dptr,amov dptr,#p_cmovx a,dptrcpl aanl a,#0f0hret;*; * 功能键菜单 *;* key_fun:lcall disp判断是否为功能键mov a,2ahcjne a,#0ah,mmmajmp key_ammm:lcall start2retkey_a: setb kasetb p1.7lcall dl02s clr p1.7reinput:setb indatachaclr indatalcall disp ;显示提示选择设置通道 lcall disp lcall ks11jz reinput lcall va_key mov a,2ah clr c subb a,#07h ;判断是否为数字键,不是数字键则要重新输入 jnc reinputclr cmov a,2ah cjne a,#00h,pha ljmp reinputpha: setb p1.7mov a,2ah dec a mov dptr,#tab001jmp a+dptrtab001:ljmp pha1ljmp pha2ljmp pha3ljmp pha4 ljmp pha5ljmp pha6 zz02:retpha1: setb chanal1setb indatachaclr p1.7uu01: lcall displcall dl10msreinput1:lcall ks11jz uu01lcall va_keymov a,2ahsubb a,#0bhjc reinput1ljmp key_modpha2: setb p1.7 lcall dl02sclr p1.7setb chanal2setb indatachauu02:lcall dispreinput2:lcall ks11jz uu02lcall va_keymov a,2ahsubb a,#0bhjc reinput2ljmp key_modpha3: setb chanal3setb indatachauu03:lcall dispreinput3:lcall ks11jz uu03lcall va_keymov a,2ahsubb a,#0bhjc reinput3ljmp key_modpha4: setb chanal4 setb ind
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃省武威市辅警考试题库(附答案)
- 2025年甘肃省辅警考试题库(附答案)
- 江西省九江市瑞昌市第四中学2023-2024学年七年级上学期语文12月月考试卷(含答案)
- 2025年4月毛概练习题(附参考答案)
- 装饰工程资料归档管理方案
- 毕业论文(设计)致谢6篇
- 第九课 超链接的运用-作品的完善和评价 说课稿-初中信息技术教科版七年级上册
- 第11章 植物的生命周期教学设计-2025-2026学年初中生物学苏科版2024七年级下册-苏科版2024
- 2025企业租赁分公司合同修订模板
- 医院旧楼暖通空调系统节能改造方案
- 企业事故隐患内部报告奖励制度
- 医药行业公关案例
- 联合作战基础知识
- 集团公司特种设备的管理台账及记录表格
- 口腔门诊消防安全培训
- 2025纪检监察综合业务知识考试题题库及参考答案
- 《田径运动概述讲》课件
- 颅内压增高-神经外科教学课件
- 部编《我爱学语文》
- 信息安全意识培训课件
- 展览馆声学优化方案
评论
0/150
提交评论