论文多功能打铃系统的设计.doc_第1页
论文多功能打铃系统的设计.doc_第2页
论文多功能打铃系统的设计.doc_第3页
论文多功能打铃系统的设计.doc_第4页
论文多功能打铃系统的设计.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

密级: 公开 nanchang university学 士 学 位 论 文thesis of bachelor(2008 2012 年)题 目 多功能打铃系统的设计 学 院: 信息工程学院 系 电子信息工程 专 业: 电子信息工程 班 级: 学 号: 学生姓名: 指导教师: 起讫日期: 2012年3月5日2012年.5月27日 南 昌 大 学学士学位论文原创性申明本人郑重申明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式表明。本人完全意识到本申明的法律后果由本人承担。作者签名: 日期:学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权南昌大学可以将本论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 保密,在 年解密后适用本授权书。本学位论文属于 不保密。(请在以上相应方框内打“”)作者签名: 日期:导师签名: 日期:摘要多功能打铃系统的设计专 业:电子信息工程 学 号:6100208208学生姓名:李太亮 指导教师:杨文玲摘要时钟伴随着人类发展每一个过程。它由古代的沙漏发展到近代的机械表再发展到现代的电子表。步入快节奏的二十一世纪,精准的时钟和打铃系统更成为不可或缺的工具。我采用at89c51单片机作为整个设计的中枢。at89c51是一种带4k字节flash存储器的低电压、高性能cmos 8位的微处理器。本设计由四个模块组成,分别是单片机、控制按钮、铃声装置和数码管等。本文利用at89c51单片机的2hz时基计时并进行年历计算。在时间计算时,每增加一秒都与系统设定的某个固定时间进行比较,如果和系统设定的时刻相同,则会进行相应的控制即打铃输出,从而驱动相应的蜂鸣器打铃。并且使用led发光管显示当前时间。在整个设计中,全部功能通过四个按键来加以控制,以更好地调控准确的时间等。关键词:单片机;at89c51 ;打铃系统;时间显示iabstractmultifunctional bell systemabstractclock along with every process of human development. it consists of the the hourglass development of the ancient to the modern mechanical watch, the development of modern electronic watches. the twenty-first century into the fast-paced, precise clock and bell systems have become an indispensable tool。i use the at89c51 microcontroller as the hub of the entire design. the at89c51 is a low voltage of one kind with 4k bytes flash memory, high-performance cmos 8-bit microprocessor. this design consists of four modules, namely, the microcontroller, control buttons, ring tones, devices, and digital tube. using at89c51 microcontroller 2hz when the timing and calendar year basis and 5v voltage source to the microcontroller. the calculation of time for each additional one second and the system set a fixed time for comparison. if at some point and set the same moment, is the appropriate control of the bell output, in order to drive the buzzer rang the bell. use of led and led displays the current time. throughout the design, control of all functions via four buttons to control, you can better control the accurate time.keywords: microcontroller; on at89c51; bell system; time displayii目录目录摘要.iabstract.ii引言- 1 -第一章 设计简介及方案论述- 2 -1.1本设计任务和主要内容- 2 -1.2方案论证- 2 -1.3多功能打铃系统概述 - 3 -第二章 系统硬件电路- 4 -2.1多功能打铃系统总体框图。- 4 -2.2 各硬件模块的使用和性能介绍- 4 -2.3 系统硬件电路图- 9 -第三章 系统软件设计- 11 -3.1系统软件的主要内容- 11 -3.2主程序流程设计- 11 -第四章 系统调试与测试结果分析- 13 -4.1系统调试- 13 -4.2仿真结果- 13 -第五章 汇编程序与器材仪表- 15 -5.1 汇编程序- 15 -5.2 器材仪表- 28 -结 论- 29 -参考文献- 30 -致谢- 31 -iii引言引言本设计是根据我们所学习的单片机课程,按照大纲要求对我们进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。掌握单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效的方法就是理论与实践并重,本文就是用at89c51单片机设计的一个自动打铃系统。- 1 -第一章 设计简介及方案论述第一章 设计简介及方案论述1.1本设计任务和主要内容(1)设计任务用可编程器件为主体,设计并制作一台自动打铃系统。要求完成的作品必须固化软件,测试检查时上电即可工作。能够实现显示当前的准确时间,同时能够在规定的时间点控制打铃装置打出预期的铃声。另外增设四个按钮,通过分配以实现对时间的调整,包括对时钟、分钟的增加和减少,秒钟的清零以及强制打铃和关闭打铃等。(2)主要内容1、基本计时和显示功能(用24小时制显示)。包括上下午标志,时、分的数字显示,秒指示。2、能设置当前时间(含上、下午,时,分)3、能实现基本打铃功能,规定:上午6:00起床铃:打铃5秒、停2秒、再打铃5秒。下午10:30熄灯铃:打铃5秒、停2秒、再打铃5秒。4、通过按键输入每节课的时间,课间的休息时间及中饭、晚饭等时间间隔值。铃声可用小喇叭播放,凡是用到铃声功能的均按此处理。1.2方案论证方案一根据设计要求,由于本设计是可调时钟显示与打铃功能,可以使用中断之类的器件利用其转换功能。在有键按下时,就可以用单片机进行数据的处理,从而实现调时钟与打铃功能。在显示电路上,可以用数码管将被调时钟显示出来,直接用at89c51引脚接数码管、键盘、蜂鸣器,这种设计只需要用到少量的cpu i/o口。方案二根据设计要求,也可以用8255a可编程并行i/o接口芯片,8255a芯片有3个8位并行口。要实现显示时间和打铃功能还需要一些时序电路和逻辑电路器件,计时部分使用单片机内部的可编程定时器,该方案利用mcs51中的89c52作为其核心部分,利用其内部的定时/计数器进行中断定时,配合软件延时实现时、分的计时,键盘输入部分,用8255a作为单片机的键盘输入,采用3*1矩阵结构,其中两个键用于调整时间分和时,另一个键用于调上下午标志。从以上两种方案,很容易看出,采用方案一,能充分利用资源,软件设计思路也比较简单,在软件和硬件方面设计可以使用模块化思路。故采用了方案一。 本方案利用at89c51作为其核心部分,其内部的定时/计数器进行中断定时,配合软件程序实现时、分的计时。键盘输入部分采用4*1矩阵结构,其中三个键用于调整时间分和时,另外一个键强制打铃或关闭打铃。上电后系统自动进入时钟显示,从零时开始计时,此时可以设定当前时间。系统内部设定固定的打铃时间,一旦相应的时间到,蜂鸣器鸣叫打铃。1.3多功能打铃系统概述 本设计是一个具有报时功能的作息时间控制钟。它利用at89c51单片机的2hz时基计时,进行年历计算,并用蜂鸣器将它报出来;在进行时间显示过程中,时间每过一秒,都与规定的作息时间比较,如果相等则进行相应的控制或动作。整个单片机外围电路由七段显示驱动模块、蜂鸣器驱动模块和按钮控制模块三部分组成。在按钮控制模块中有四个按键,这些按键作用用于报时及校正时间。现代机关企业,特别是学校要求对时间加以控制,要按时打铃及播放广播,以保证学习与工作的正常运行。本文设计实现了这些功能,给学校及其他机关企业带来方便,整体性好,人性化强、可靠性高,实现了对时间控制的智能化。- 3 -第二章 系统硬件电路第二章 系统硬件电路2.1多功能打铃系统总体框图。 图2-1 系统框图打铃系统模块组成框图如图2-1所示,该模块由七段式数码管模块、蜂鸣器驱动模块和按钮控制模块三部分组成。且三部分都通过at89c51来统一控制管理。2.2 各硬件模块的使用和性能介绍2.2.1单片机的使用和其性能介绍一,单片机的端口和使用连接在at89c51的端口xtal1和端口xtal2分别连接晶体振荡器的两端。而xtal1是构成片内振荡器的反相放大器的输入端,xtal2是构成片内振荡器的输出端。晶体振荡器的作用是产生原始的时钟频率。经过频率放大器的放大或缩小后就成了我们系统所需要的各种不同频率。在晶振的另外两个端口分别连接30pf的电容然后接地。rst端口是复位端,它连接一个保护电阻然后连接地。当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。ea端口连接一个给定的电源然后在和复位端口rst之间连接10pf的电容,该连接可以允许外部访问。单片机的p1.0到p1.3端口连接外部的按键控制,分别为s1、s2、s3、和s4。在每个开关与给定的电源之间接一个10k的保护电阻。防止电流过大,从而保护电路。端口p3.7连接一个三极管的基极,电源连接在集电极,在三极管的发射极连接一个蜂鸣器。p0.0p0.7这八个端口分别引出三组接口,一组接口连接respack-8排阻器,另外两组分别连接两组led显示器的abcdefg和dp接口。二,单片机的性能介绍 at89c51是一种带4k字节闪烁可编程可擦除只读存储器的低电压,高性能cmos8位微处理器,俗称单片机。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的at89c51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。引脚说明: vcc:供电电压。 p0口:p0口为一个8位漏级开路双向i/o口,每脚可吸收8ttl门电流。当p1口的管脚第一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash编程时,p0 口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。 p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,p1口缓冲器能接收输出4ttl门电流。p1口管脚写入1后,被内部上拉为高,可用作输入,p1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1口作为第八位地址接收。 p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲器可接收,输出4个ttl门电流,当p2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2口输出其特殊功能寄存器的内容。p2口在flash编程和校验时接收高八位地址信号和控制信号。 p3口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3口将输出电流(ill)这是由于上拉的缘故。p3口也可作为at89c51的一些特殊功能口,如下表所示: 口管脚 备选功能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(外部数据存储器读选通)p3口同时为闪烁编程和编程校验接收一些控制信号。89c51各部分引脚图如图2-2所示: p1.0 1 40 vcc p1.1 2 39 p0.0 p1.2 3 38 p0.1 p1.3 4 37 p0.2 p1.4 5 36 p0.3 p1.5 6 35 p0.4 p1.6 7 34 p0.5 p1.7 8 33 p0.6 rst/vpd 9 32 p0.7 rxd p3.0 10 31 ea/vpp txd p3.1 11 30 ale/-p int0 p3.2 12 29 psen int1 p3.3 13 28 p2.7 t0 p3.4 14 27 p2.6 t1 p3.5 15 26 p2.5 wr p3.6 16 25 p2.4 rd p3.7 17 24 p2.3 x2 18 23 p2.2 x1 19 22 p2.1 gnd 20 21 p2.0 图2-2 89c51引脚图 rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。 ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。为使该模块化自动打铃系统具有更加方便和灵活性,我们对系统的硬件做了精心设计。2.2.2蜂鸣器驱动模块和硬件设计该打铃系统采用的是压电式蜂鸣器。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5-15v直流工作电压),多谐振荡器起振,输出1.52.5khz的音频信号,阻抗匹配器推动压电蜂鸣片发声。本设计中的蜂鸣器驱动模块用到了蜂鸣器(speaker)、三极管、100欧姆的电阻等器件。将蜂鸣器的一端连接三极管的发射极,蜂鸣器的另一端直接与地相连。三极管的基极通过100欧姆的电阻接在单片机的p3.7引脚,三极管的集电极接+5v的电源。其电路图如下图所示。电流和电压等信号会经过共发射极放大。如图2-3所示。图2-3蜂鸣器驱动电路图2.2.3 七段式数码管驱动模块和硬件设计采用动态扫描方式,通过一组单片机端口p0.0p0.7驱动并联在一起的led发光管的共阳端,led发光管的另一脚接通用i/o口。利用单片机的p2.0p2.7端口控制这八个数码管的亮灭。该方法能驱动较多的led,控制方式较灵活,而且节省单片机的资源。 led数码管显示器内部有七个条形发光二极管和一个小圆点发光二极管组成,其结果如2-4图所示。comabcdefg图2-4 七段数码显示管因而它的控制原理和发光二极管的控制原理是相同的。根据各管接线的形式,可分成共阴极型和共阳极型。本系统设计使用的是共阳极型。其八个接口对应的字形如表2-1。表2-1 数码管字型码表显示字形dpgfedcba共阴极字型码共阳极字型码0001111110x3f0xc01000001100x060xf92010110110x5b0xa43010011110x4f0xb04011001100x660x995011011010x6d0x926011111010x7d0x827000001110x070xf88011111110x7f0x809011011110x6f0x90a011101110x770x88b011111000x7c0x83c001110010x390xc6d010111100x5e0xa1e011110010x790x86f011100010x710x8e2.2.4按键控制驱动模块和设计按键模块共有四个按键,分别为s1、s2、s3、s4。其中s1连接p1.0端口,通过按钮s1可以选择调整的位,选择调整小时或分钟或秒等。s2按键可以在选择位的基础上增加数值并且长按s2可以快速增加数值。s3按键主要的功能在于对于选定的位可以减小该位上的数值,长按可以快速减小该位上的数值。s4按键的功能可以强制打铃和强制关闭打铃,以应对突发的状况例如时钟出错或者打铃设定时间出错的特殊情况等。按键s1到s4的四个按钮的一端分别接地,另一端接单片机一个端口的四个引脚分别从p1.0到p1.3。在按键的闸门处分别通过电阻连接电源。在按钮没按下去的时候,电压为高电平。当某一个按钮按下的时候,其对应的引脚就由高电平变成低电平,然后通过单片机扫描读取引脚的电平来判断按钮是否按下。2.3 系统硬件电路图系统主要硬件电路作为驱动整个打铃系统的电路又分为七段数码显示电路和蜂鸣器驱动电路。由显示七段数码显示电路和蜂鸣器驱动电路组成的系统硬件主要电路如图2-5所示图2-5 系统硬件电路图该系统通过按钮控制(系统使用4只按键,3只按键用来调整时间,另一只为强制打铃按钮;调整选择键set_key:p1.0通过选择键选择调整位,选中位闪烁;增加键add_key:p1.1按一次使选中位加1;减少键dec_key:p1.2按一次使选中位减1;如果长按add_key或dec_key,识别后则进行调时快进,此时停止闪烁)。at89c51的计时和定时,在七段数码管上显示出来(实现24小时制电子钟,8位数码管显示,显示时分秒),再通过蜂鸣器 (beep:p3.7)来实现打铃。- 10 -第三章 系统软件设计第三章 系统软件设计at89c51中的软件程序是使led发光管系统工作的核心部分,在系统的软件设计中我们也用了模块化设计这一思路,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。3.1系统软件的主要内容系统软件设计由三个程序模块组成:蜂鸣器打铃程序模块,七段显示管显示程序模块,按键程序模块。3.2主程序流程设计 主程序初始化,并开放中断,然后执行中断服务程序。实现24小时制电子钟,8位数码管显示,显示时分秒显示格式:23-59-59(小时十位如果为0则不显示)到预定时间启动蜂鸣器模拟打铃,蜂鸣器beep:打铃方式分起床、熄灯铃和上、下课铃两种系统使用4只按键,3只按键用来调整时间,另一只为强制打铃按钮调整选择键set_key:p1.0;通过选择键选择调整位,选中位闪烁增加键add_key:p1.1;按一次使选中位加1减少键dec_key;p1.2;按一次使选中位减1,如果长按add_key或dec_key,识别后则进行调时快进,此时停止闪烁。主程序流程设计图,如图3-1所示 图 3-1 主程序流程设计图如图3-1所示主程序开始初始化后,就跳转到中断服务程序,如正常走时,则往下进行打铃时间的比较,继续向下执行对打铃的判断程序;如不正常走时,则直接转到显示程序。这以后,继续执行按键的检测,若有键按下,则取值打铃;反之,则返回到中断服务程序的开始继续执行。主程序清单见附录一。- 12 -第四章 系统调试与测试结果分析第四章 系统调试与测试结果分析4.1系统调试本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试。先对硬件模块中的七段式数码管模块、蜂鸣器驱动模块以及按键控制按钮模块调试,然后在实验室中进行软件模块化调试,最后将各模块组合后进行整体测试。4.1.1硬件调试对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。结果显示包括七段式数码管模块、蜂鸣器驱动模块以及按键控制按钮模块在内的硬件都能正常运行。4.1.2软件调试 软件调试采用单片机仿真器wave6000l及微机,将编好的程序进行调试,主要是检查语法错误。经过修改等过程之后,软件程序测试证明可以正常运行。4.1.3硬件软件联调 将调试好的硬件和软件进行联调,主要调试系统的实现功能。在proteus软件上,仿真效果较好。4.2仿真结果 此系统的仿真效果很好,能实现设计要求和目的所规定的内容。下面是两幅仿真结果图4-1和4-2所示:图4-1 proteus仿真图 图4-2 proteus仿真图- 15 -第五章 汇编程序与器材仪表第五章 汇编程序与器材仪表5.1 汇编程序beep equ p3.7 ;定义蜂鸣器(电铃)控制信号输出口 org 0000h ;程序入口地址 ljmp start org 000bh ;定时器0中断入口地址 ljmp timer_0 org 0100h;/*程序开始,初始化*/ start: setb beep ;关闭蜂鸣器(电铃) setb 48h ;使用一个bit位用于调时闪烁标志 setb 47h ;使用一个bit位用于产生脉冲用于调时快进时基 clr 45h ;关闭响铃方式1标志 clr 44h ;关闭响铃方式2标志 mov r1,#0 ;调整选择键功能标志:0正常走时、1调时、2调分、3调秒 mov 20h,#00h ;用于控制秒基准时钟源的产生 mov 21h,#00h ;清零秒寄存器 mov 22h,#00h ;清零分寄存器 mov 23h,#00h ;清零时寄存器 mov 24h,#00h ;用于控制调时闪烁的基准时钟的产生 mov r2,#00h ;强制打铃标志 mov r3,#00h ;强制打铃时长标志 mov ip,#02h ;ip,ie初始化 mov ie,#82h mov tmod,#01h ;设定定时器0工作方式1 mov th0,#3ch mov tl0,#0b0h ;赋定时初值,定时50ms setb tr0 ;启动定时器0 mov sp,#40h ;重设堆栈指针;/*主程序*/ main: cjne r1,#00h,main1 ;是否为正常走时状态 lcall bijiao1 ;调用起床、熄灯打铃比较子程序 lcall bijiao2 ;调用上、下课打铃比较子程序 lcall daling1 ;调用响铃方式1执行子程序 lcall daling2 ;调用响铃方式2执行子程序 lcall daling3 main1: lcall display ;调用显示子程序 lcall key_scan ;调用按键检测子程序 jz main ;无键按下则返回重新循环 lcall set_key ;调用选择键处理子程序 jb 46h,main ;如果已进行长按调整(调时快进),则不再执行下面的单步调整 lcall add_key ;调用增加键处理子程序 lcall dec_key ;调用减少键处理子程序 lcall daling_key ;处理强制打铃/强制关闭铃声键 ljmp main ;重新循环 ;/*定时中断服务程序*/ timer_0: push acc push psw ;保护现场 mov th0,#3ch mov tl0,#0b0h ;重新赋定时初值 cpl 47h ;产生脉冲用于调时快进时基 inc 24h mov a,24h cjne a,#10,add_time ;产生0.5秒基准时钟,用于调时闪烁 cpl 48h ;取反调时闪烁标志位 mov 24h,#00hadd_time: inc 20h mov a,20h cjne a,#20,reti1 ;产生1秒基准时钟 mov 20h,#00h ;一秒钟时间到,清零20h cjne r2,#01h,add_m inc r3 add_m: mov a,21h add a,#01h da a ;作十进制调整 mov 21h,a cjne a,#60h,reti1 mov 21h,#00h ;一分钟到 mov a,22h add a,#01h da a mov 22h,a cjne a,#60h,reti1 mov 22h,#00h ;一小时到 mov a,23h add a,#01h da a mov 23h,a cjne a,#24h,reti1 mov 23h,#00h ;到24点,清零小时 reti1: pop psw pop acc ;恢复现场 reti ;中断返回;/*显示处理*/ display: mov a,21h ;秒 anl a,#0fh mov 2fh,a ;转换出秒个位,存入2fh mov a,21h anl a,#0f0h swap a mov 2eh,a ;转换出秒十位,存入2eh jb 46h,min ;如果长按按键(调时快进),则跳过闪烁处理 cjne r1,#3,min ;如果r1为3,闪烁秒位待调整 jb 48h,min mov 2fh,#0ah ;使该位为10,查表得到使该位不显示的输出 mov 2eh,#0ahmin: mov a,22h ;分 anl a,#0fh mov 2dh,a ;转换出分个位,存入2dh mov a,22h anl a,#0f0h swap a mov 2ch,a ;转换出分十位,存入2ch jb 46h,hour ;如果长按按键(调时快进),则跳过闪烁处理 cjne r1,#2,hour ;如果r1为2,闪烁分位待调整 jb 48h,hour mov 2dh,#0ah ;使该位为10,查表得到使该位不显示的输出 mov 2ch,#0ahhour: mov a,23h ;时 anl a,#0fh mov 2bh,a ;转换出时个位,存入2bh mov a,23h anl a,#0f0h swap a mov 2ah,a ;转换出时十位,存入2ah jb 46h,disp ;如果长按按键(调时快进),则跳过闪烁处理 cjne r1,#1,disp ;如果r1为1,闪烁时位待调整jb 48h,disp mov 2bh,#0ah ;使该位为10,查表得到使该位不显示的输出 mov 2ah,#0ah;/*数码管动态扫描显示*/disp: mov dptr,#table mov a,2fh movc a,a+dptr mov p0,a clr p2.7 lcall delay setb p2.7 ;显示秒个位 mov a,2eh movc a,a+dptr mov p0,a clr p2.6 lcall delay setb p2.6 ;显示秒十位 mov a,#40h mov p0,a clr p2.5 lcall delay setb p2.5 ;显示“-” mov a,2dh movc a,a+dptr mov p0,a clr p2.4 lcall delay setb p2.4 ;显示分个位 mov a,2ch movc a,a+dptr mov p0,a clr p2.3lcall delay setb p2.3 ;显示分十位 mov a,#40h mov p0,a clr p2.2 lcall delay setb p2.2 ;显示“-” mov a,2bh movc a,a+dptr mov p0,a clr p2.1 lcall delay setb p2.1 ;显示时个位 mov dptr,#table1 ;该位使用table1以消除前置0 mov a,2ah movc a,a+dptr mov p0,a clr p2.0 lcall delay setb p2.0 ;显示时十位 ret ;/*按键检测子程序*/ key_scan: clr 46h ;关闭长按调整(调时快进)标志 mov p1,#0ffh ;将p1口设置成输入状态 mov a,p1 cpl a anl a,#0fh ;p1口低4位连接4个按键,只判断该4位 jz exit_key ;无键按下则返回 lcall delay ;延时去抖动 mov a,p1 ;重新判断 cpl a anl a,#0fh jz exit_key ;键盘去抖动 mov r5,a ;临时将键值存入r5 mov r4,#00h ;用于控制调时快进速度 ;设置为00h是为了在进入长按处理前加长延时区分用户的长按与短按,防止误快进 loop: ;进入长按处理 lcall display ;使长按时显示正常 mov a,p1 cpl a anl a,#0fh jb 47h,loop1 inc r4 ;调时快进间隔时间基准加1loop1: cjne r1,#03h,loop2 ;如果调秒时长按,则不处理 ljmp loop3loop2: cjne r4,#99h,loop3 mov r4,#70h ;确认用户长按后,重新设定起始值,加快调时快进速度 setb 46h ;长按调整(调时快进)标志 lcall add_key lcall dec_keyloop3: jnz loop ;等待键释放 mov a,r5 ;输出键值 ret exit_key: ret;/*延时子程序*/delay: mov r7,#150 djnz r7,$ ret;/*选择键处理子程序*/ set_key: cjne r5,#01h,exit ;选择键键值 inc r1 ;调整选择功能标志加一 setb beep cjne r1,#4,exit mov r1,#0 mov 24h,#00h ;调时闪烁基准清零 ret;/*增加键处理子程序*/ add_key: cjne r5,#02h,exit ;增加键键值 cjne r1,#01h,next1 ;选择键功能标志为1,调时,否则跳出 mov a,23h add a,#01h da a mov 23h,a cjne a,#24h,exit mov 23h,#00hnext1: cjne r1,#02h,next2 ;选择键功能标志为2,调分,否则跳出 mov a,22h add a,#01h da a mov 22h,a cjne a,#60h,exit mov 22h,#00hnext2: cjne r1,#03h,exit ;选择键功能标志为3,调秒,否则跳出 mov 21h,#00h ;如增加键按下直接清零秒 ret;/*减少键处理子程序*/ dec_key: cjne r5,#04h,exit ;减少键键值 cjne r1,#01h,next3 ;选择键功能标志为1,调时,否则跳出 mov a,23h add a,#99h da a mov 23h,a cjne a,#99h,exit mov 23h,#23h next3: cjne r1,#02h,next4 ;选择键功能标志为2,调分,否则跳出 mov a,22h add a,#99h da a mov 22h,a cjne a,#99h,exit mov 22h,#59hnext4: cjne r1,#03h,exit ;选择键功能标志为3,调秒,否则跳出 mov 21h,#00h ;如较少键按下直接清零秒 ret;/*强制响铃键处理子程序*/ daling_key: cjne r5,#08h,exit ;选择键键值 jnb 45h,lp1 ;判断是否正在响铃 clr 45h retlp1: jnb 44h,lp2 clr 44h retlp2:mov r2,#01h ret;/*万用返回程序*/ exit: ret;/*数码管字形编码表*/table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h ;字形显示编码table1: db 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h ;小时位的十位数编码,该位如果为0则不显示;/*打铃时间对比程序(起床、熄灯)*/bijiao1: mov a,23h cjne a,#00h,b0 mov a,22h cjne a,#01h,b0 ;6:00到 setb 45h ;开启响铃方式1 retb0: mov a,23h cjne a,#22h,exit_1 mov a,22h cjne a,

温馨提示

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

评论

0/150

提交评论