应用单片机设计的电子闹钟的论文终极版.doc
题 目 基于单片机的电子闹钟设计 1英文题目 The electronic clockdesign based on MCU 摘 要单片机自 20 世纪问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、开展很快。而 51 单片机是各单片机中最为典型和最具代表性的一种。本文设计以 AT89S51 芯片为核心。辅以必要的外围电路。设计了一个构造简单,功能齐全的电子时钟,它由 5v 直流电源供电。在硬件方面 ,除了 cpu 外使用六个七段 LED 数码管来进展显示,LED 采用的是动态扫描显示 ,使用 74s14 芯片进展驱动。通过 LED 能够比拟准确显示时、分。两个简单的按键实现对时间的调整。软件方面采用汇编语言编程。整个电子时钟系统能完成时间的显示、调整、定时闹钟和复位等功能。 选用单片机最小系统应用程序,添加比拟程序、时间调整程序及蜂鸣程序,通过时间比拟程序触发蜂鸣,实现闹钟功能,完成设计所需的软件环境。介绍并使用 keil 单片机模拟调试软件,测试程序的可行性。【关键词】单片机技术;AT89S51;液晶驱动;电子闹钟AbstractAbstractBecase of its extremely high performance-price ratio,the single-chip puter(SCC) has been paid great attention to ever since it came to in 1970 of 20th century ,and has gained an extensive applicable field and fast development .This design ,adopting AT89S51 chip as the core part with some necessary peripheral circuits, is a simple electronic clock which uses 5v DC as the power supply .in hardware aspect .beside the CPU ,six seven-segment LED digi-tubes are used for display ,which work in a dynamically scanning display mode and driven by74SL14 chip .the LED can accurately indicate hour and minute and two bottons can be used to adjust the time .while in the softwar aspect ,the programming language is assembly language . the whole electronic clock system has functions of time display ,adjustment ,bell-setting and reset ,etc.Choose the smallest SCM system applications, ,add parison procedures ,times to adjust procedures and faint buzzing procedures, as through relatively faint buzzing trigger procedures to achieve alarm clock function ,.pleted design needs of the software environment.【KeyKey wordswords】technologyof the one-chip puter;AT89S51; the liquid crystal is driven; Electronic alarm clock目目 录录前言前言 1 1第一章第一章 概概论论 2 211 概述.2111 51 电子闹钟开展趋势 2112 本课题研究的主要容.212 电子闹钟简介.3121 开发的目的和意义.3122 51 电子闹钟的优点.3123 51 电子闹钟的特点.3第二章系统方案的设计第二章系统方案的设计 4 421 系统概述 4211 系统功能描述 .4212 系统方案确实定.4213 系统设计思路与步骤 522 芯片根本工作原理及其应用 5221 AT89S51 简介 6222 引脚介绍.6223 电源 7224 存储器 7225 应用 723LM386 简介 8231LM386 介绍 8232 LM386特点8第三章系统的设计第三章系统的设计 8 831 系统硬件设计.8311 单片机系统的设计 9312 按键电路的设计 9313 复位电路的设计 10314 显示电路的设计 1232 系统软件的设计 13321 软件设计 13322 整个系统软件局部的总体设计 33第四章系统的调试和性能分析第四章系统的调试和性能分析 3 33 341 系统的调试方法 33411 输入按键的调试 34412 复位电路的调试 34413 显示电路的调试 34414 整个系统的联调 3442 系统的性能分析 34第五章结论第五章结论 3 36 6参考文献参考文献 3737辞辞 3838前前 言言20 时间末,电子技术获得了飞速的开展。在其推动下,现在电子产品几乎渗透了社会的各个领域有力地推动了社会生产力的开展和社会信息化程度的提高。同时也使现代电子产品性能的进一步提高,产品更新换代的节奏也越来越快。时间对人们来说总是那么的珍贵,工作的忙碌和繁杂性容易使人忘记当前的时间。所以提醒人们当前的时间是那么的重要,而钟表的数字化带给人们的生活带来了极大的便利,并且大扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、定时播送、甚至各种定时电气的自动启动等。所有的这些都以钟表的数字化为根底的。因此,研究数字钟及扩大其应用,有着非常的意义。 数字钟表通过数字电路实现时、分、秒的显示。数字显示的计时装置,广泛应用于个人家庭、车站码头、办公室等公共场所。多功能数字钟的应用非常的普遍。由单片机作为数字时钟的核心控制器,通过它的时钟信号来实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。通过键盘可以进展校时、定时等功能。使出设备显示器可以用液晶显示技术和数码管来显示。本系统利用单片机来实现具有计时、校时等功能的数字时钟,是以单片机AT89C51 单片机为核心元件同时采用 LED 数码管显示器动态显示时、分、秒的现代计时装置。另外具有校时功能和定时功能,利用单片机实现的数字时钟具有编程灵活,便于功能的。扩大等优点。第一章 概论11 概论电子闹钟在科学技术高度开展的今天,千家万户都少不了它,所以很多家庭个人都需要有一个电子闹钟,为人们提供报时方便,但普通电子闹钟不够方便实用。本文给出了一种以 51 芯片电子闹钟设计方法,从而给人们带来更为方便的工作与生活。111 51 电子闹钟开展趋势现代的快节奏生活给人们的精神上带来了很大压力。如何排解或缓解这些压力已经成为很多人关心的问题。单片机电子闹钟是具发前闹钟创新性的系统,它代表了时代的开展趋势。2007 年,无论从国外行业开展趋势,还是从闹钟市场准入的要求来看,节能、环保、创新都已成为中国家电企业无法回避的大问题。在原材料价格不断上涨、下游渠道商实力膨胀、价格战越来越剧烈、行业利润日趋微薄的背景下,日前,中国的电子闹钟在节能化、环保化、创新型转变过程中,正进展新一轮闹钟赛跑。目前,国专业 51 电子闹钟厂家的数量正在迅速增长。51 电子闹钟市场在未来的三五年会高速增长,新技术、新产品也会不断出现并投入应用。112 本课题研究的主要容设计一个 51 电子闹钟:1能随意设定走时起始时间。 212 小时24 小时两种制式可选,以适应不同的需要。3能指示秒节奏,即秒指示4采用交直流供电电源。与石英钟不同的是,电子钟一般采用数码管等显示介质,因而必须以交流供电为主,以直流电源为后备辅助电源,并能自动切换。该设计主要包括:按键、 显示程序单元局部。AT89S51 单片机芯片、74HC245 驱动 LED 显示电路,集成电路 74HC245 和 LM386 各 1 个。12 电子闹钟简介121 开发的目的和意义目的: 设计一个 51 电子闹钟的,该闹钟可由使用者自己设定一个时间,假设想设置闹铃,应先按下复位按键,然后长时间按下设置按键,第一个数码管会显示C,然后变为00-00-00,此时进入闹铃设置状态,设置方法跟上面一样,闹铃设置完后,下一步要设置当前时间,调整方法跳到第一步。这样设置好后,她就能按照主人的意思,定时的把你闹醒啦!意义:电子闹钟已经是现代生活中经常用到的工具之一,传统的电子闹钟只是机械控制,另外,体积也很大,又不美观也不实用.而现在我设计的电子闹钟是用单片机做的.只要简单的设置好后,她就能按照主人的意思,定时的把你闹醒啦!也能给人们的生活带来方便。122 51 电子闹钟的优点1 、简单好用、美观、体积小、实用。2 、用电量少、电压低,节能、环保、创新。按键、 显示程序单元局部。AT89S51 单片机芯片、 74HC245 驱动 LED显示电路。外接 3 个按钮组成键盘,AT89S51 为 51 核。另外,AT89S51 本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。数码管作为一种主动显示器件,具有亮度高、价格廉价等优点,而且市场上也有专门的时钟显示组合数码管。51 电子闹钟的用途:我设计的电子闹钟是用单片机做的.只要简单的设置好后,她就能按照主人的意思,定时的把你闹醒啦!也能给人们的生活、工作学习带来方便。123 51 电子闹钟的特点1.帮助您排解或缓解那些来自现实生活的压力2.数码管作为一种主动显示器件,亮度高、价格廉价等,显示数字清晰。3.简单好用,可任意设 24 式时间。4.使用 LED 发光,省电,灯泡寿命长。第二章 系统方案的设计21 系统概述211 系统功能描述本系统是利用AT89S51为51核,集成电路74HC245和LM386各1个.制作完成一个电子闹钟,该设计中采用液晶显示或数码管显示,因此,本时钟采用数码管显示方式。充分表达系统的简易性。使我们了解简易闹钟的设计方法,并自己动手设计电路和编写实现闹钟功能的程序。简易闹钟要实现以下功能:1、能正确显示闹钟的走时2、可以进展当前时间的设置3、可以设置闹钟时间,并在时间到时发出响声。整个系统的任务要求:(1输入数字按键的功能。保证数字的输入。(2复位电路的功能。所有时间回到初始化状态,用于启动设定时间参数对时或定闹 ;(3显示电路的功能。当输入数字时显示 24 小时时间功能。 (4闹铃功能 设置好闹铃时间后.能按设置好的时间准时闹铃。212 系统方案确实定根据以上各模块并结合显示屏的功能及元器件材料的情况,决定采用AT89S51 为 51 核显示设计方案。213 系统设计思路与步骤先进展系统的整体规划确定整个系统的功能,然后按照每个功能的具体要求,进展各个模块的实物设计并逐个调试,待全部通过后,进展整个系统的联调,最终实现一个完整的系统,并制成印刷线路板。整个系统的设计步骤如下:在单片机最小系统的根底上,完成按键电路和复位电路的设计。完成显示电路、数字按键、复位电路。具有 3 个功能按键:1.在复位后的待机状态下,用于启动设定时间参数对时或定闹 ;2.在设定时间参数状态而且不是设定最低位即分个位的状态下,用于完毕当前位的设定,当前设定位下移;3.在设定最低位分个位的状态下,用于完毕本次时间设定。+1 键,用于对当前设定位编辑位进展加 1 操作,根据 1224 小时工作模式和正在编辑的当前位的含义时十位、时个位、分十位、分个位自动进展数据的上限和下限判断。例如,对 12 小时制,小时的十位只能是 0、1,如果当前值为 0,那么按1 键后为 1,再按1 键那么又回复到 0。把以上各个模块联结起来,整体调试功能。整个系统的原理框图如图 2-1 所示图 2-1 整个系统的原理图22 芯片根本工作原理及其应用2 22 21 1 AT89S51AT89S51 简介简介AT89S51 是一个低功耗,高性能 CMOS 8 位单片机,片含 4k BytesISP(In-system programmable)的可反复擦写 1000 次的 Flash 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术制造,兼容标准 MCS-51 指令系统及80C51 引脚构造,芯片集成了通用 8 位中央处理器和 ISP Flash 存储单元,功能强大的微型计算机的 AT89S51 可为许多嵌入式控制应用系统提供高性价比的解决方案。按键与按钮电路复位等辅助电路位数码管显示电路闹铃声光指示电路电源系统222 引脚介绍AT89S51 具有如下特点:40 个引脚,4k Bytes Flash 片程序存储器,128 bytes 的随机存取数据存储器RAM ,32 个外部双向输入/输出I/2口,5 个中断优先级 2 层中断嵌套中断,2 个 16 位可编程定时计数器,2 个全双工串行通信口,看门狗WDT电路,片时钟振荡器。图 2-2 引脚图 此外,AT89S51 设计和配置了振荡频率可为 0Hz 并可通过软件设置省电模式。空闲模式下,CPU 暂停工作,而 RAM 定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存 RAM 的数据,停顿芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有 PDIP、TQFP 和 PLCC 等三种封装形式,以适应不同产品的需求。主要功能特性:1.兼容 MCS-51 指令系统2.32 个双向 I/O 口3.2 个 16 位可编程定时/计数器4.全双工 UART 串行中断口线 5.2 个外部中断源6.中断唤醒省电模式7.看门狗WDT电路8.灵活的 ISP 字节和分页编程 9.4k 可反复擦写(1000 次ISP Flash ROM工作电压11.时钟频率 0-33MHz 12.128x8bit 部 RAM13.低功耗空闲和省电模式 14.3 级加密位15.软件设置空闲和省电功能 16.双数据存放器指针223 电源89S51 有很宽的工作电源电压,电源围宽达 45.5V.224 存储器89S51 支持 ISP 在线可编程写入技术!串行写入、速度更快、稳定性更好,烧写电压也仅仅需要 4 至 5V 即可.225 应用就目前中国市场的情况来看,89S51 有很大的市场。其原因有以下几点:1AT89S51 设计和配置了振荡频率可为 0Hz 并可通过软件设置省电模式;2AT89S51 是一个低功耗,高性能 CMOS 8 位单片机;3芯片集成了通用 8 位中央处理器和 ISP Flash 存储单元,功能强大的微型计算机的 AT89S51 可为许多嵌入式控制应用系统提供高性价比的解决方案。 4同时该芯片还具有PDIP、TQFP 和 PLCC 等三种封装形式,以适应不同产品的需求。23 LM386 简介LM386 是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益置为 20。但在 1 脚和 8 脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在 6V 电源电压下,它的静态功耗仅为 24mW,使得 LM386 特别适用于电池供电的场合。专为低损耗电源所设计的功率放大器。231 LM386 介绍LM386 适用于电脑、仪器、汽车电子、电源、通信、开关电源等电子产品.232 LM386 特点静态功耗低,约为4mA,可用于电池供电。 工作电压围宽,4-12V or 5-18V。 外围元件少。 电压增益可调,20-200。 低失真度。第三章 系统的设计一个完整的系统,离不开硬件和软件的设计。硬件与软件各有所长,如何合理的安排软硬件的任务是系统设计的第一步。31 系统硬件设计系统硬件的设计可以根据系统的各个功能,把整个系统划分成假设干个模块,分别对这些模块来进展设计,然后在通过单片机程序来实现对各个硬件模块功能的调度。本系统涉及到的硬件模块有:按键电路、复位电路、显示电路。311 单片机系统的设计 单片机最小应用系统实际上就是一个置程序存储器的单片机,可由单片机芯片,配以必要的外部器件构成,这些外部功能器件无法集成到芯片部,主要有按键电路、显示电路等。图 3-1 单片机系统图312 按键电路的设计作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说当我们按下一个按键时,总希望某个命令只执行一次。而在按下的过程中不要有干扰进来,因为在按下的过程中,一旦有干扰过来可能造成误触发过程,因此我们在设计按键电路的时候应注意不要有干扰进来以用在焊接时应注意:独立式按键。如果设置过多按键,将会占用较多 I/O 口,而且会给布线带来不便,因此,此方案适用于按键较少的情况。如果选择此方案,由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单。1执锡补焊时应按照从左到右,由上到下的顺序,防止检查时漏检或焊接时漏修。2焊接时要经常清洗烙铁头,防止烙铁头的杂物造成虚焊、针孔、加焊等不良发生。3不要在基板上给烙铁头加焊锡,生产过程中不能抖锡、敲锡、甩锡,防止焊锡渣、焊锡、珠掉到基板上面。4在压件或拆件时要先在线路板的铜箔面上加焊锡,要求均匀加热,防止松香失效或铜箔翘皮造成线路破坏。考虑到电路不要复杂性,因而设计成 3 个按键,一个为复位,其它 2 个为按数字时间的按键和确定设好的时间确定.后 2 个按键要接 89C2051 端.假设想设置闹铃,应先按下复位按键,然后长时间按下设置按键,第一个数码管会显示C,然后变为00-00-00,此时进入闹铃设置状态,设置方法跟上面一样,闹铃设置完后,下一步要设置当前时间,调整方法跳到第一步。1在复位后的待机状态下,用于启动设定时间参数对时或定闹 ;2在设定时间参数状态而且不是设定最低位即分个位的状态下,用于完毕当前位的设定,当前设定位下移;3在设定最低位分个位的状态下,用于完毕本次时间设定。键,用于对当前设定位编辑位进展加 1 操作,根据 1224 小时工作模式和正在编辑的当前位的含义时十位、时个位、分十位、分个位自动进展数据的上限和下限判断。例如,对 12 小时制,小时的十位只能是 0、1,如果当前值为 0,那么按1 键后为 1,再按1 键那么又回复到 0。313 复位电路的设计目前为止,单片机复位电路主要有四种类型:1微分型复位电路;2积分型复位电路;3比拟器型复位电路;4看门狗型复位电路。另外,Maxim 等公司也推出了专用于复位的专用芯片复位电路的根本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。单片机目前已被广泛地应用于家电、医疗、仪器仪表、工业自动化、航空航天等领域。市场上比拟流行的单片机种类主要有 Intel 公司、Atmel 公司和 Philip公司的 8051 系列单片机,Motorola 公司的 M6800 系列单片机,Intel 公司的MCS96 系列单片机以及 Microchip 公司的 PIC 系列单片机。无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了死机、程序走飞等现象,这主要是单片机的复位电路设计不可靠引起的。图 1 是一个单片机与大功率 LED 八段显示器共享一个电源,并采用微分复位电路的实例。在这种情况下,系统有时会出现一些不可预料的现象,如无规律可循的死机、程序走飞等。而用仿真器调试时却无此现象发生或极少发生此现象。又如图 2 所示,在此图中单片机复位采用另外一种复位电路。在此电路的应用中,用户有时会发现在关闭电源后的短时间再次开启电源,单片机可能会工作不正常。这些现象,都可认为是由于单片机复位电路的设计不当引起的。图 3-2 复位电路图314 显示电路的设计就时钟而言,通常可采用液晶显示或数码管显示。由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块字符或点阵 ,一般多采用并行接口,对微处理器的接口要求较高,占用资源多。另外,89C2051 本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。数码管作为一种主动显示器件,具有亮度高、价格廉价等优点,而且市场上也有专门的时钟显示组合数码管。基于 AT89S51 单片机的控制系统包括四局部:数据采集、控制系统、时钟电路、语音录音电路和报音提示信息电路。用数码管作为显示器。数码管的驱动电路简单,使用方便,如果选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。其缺点是功耗较大。由于数码管使用起来较为方便,在夜间看时间也很方便,因此我们选择了数码管作为显示器.发音局部: 用软件方法产生方波输出,通过三极管放大后驱动蜂鸣器发音,这样就可以省去硬件振荡电路,降低本钱。32 系统软件的设计系统软件的设计方法与硬件设计的方法是一样的,也是根据系统的各个功能,划分成各个子模块,分别对每个模块来进展设计,然后在通过各个模块之间的调用来实现整个系统的功能。系统软件局部的设计模块有:按键电路的软件设计、复位电路的软件设计、显示电路的软件设计共 3 个模块。发音局部:用软件方法产生方波输出,通过三极管放大后驱动蜂鸣器发音,这样就可以省去硬件振荡电路,降低本钱。 电源:如果是用电池供电,就比拟方便携带,但是本系统,采用了数码管作为显示器,功耗较大,需要经常更换电池。况且,本系统的体积较大,即使使用电池供电也不能随身携带,因此,用电池供电不大适宜,所以用外部稳压电源来供电。321 软件设计软件功能:1检测按键。当系统检测到某个案件被按下时,转到相应子程序处理,可实现校时、设定闹铃时间的功能。(2) 显示。系统通过调用显示子程序,可将显示缓冲区里的容通过动态扫描方式输出到数码管显示器。(3) 计时。系统通过中断和软件计数器可产生秒信号。每到1s,系统将会调整时间存储单元的容,从而实现计时功能。(4) 比拟。每当秒存储单元的容为0时,系统通过调用比拟子程序可判断当前时间是否符合闹铃条件,假设符合,那么调用发音子程序使蜂鸣器发出闹铃声音。(5) 产生音频方波输出。系统通过软件产生音频方波输出使蜂鸣器发声,这样可以省去硬件振荡电路。(6) 拆分。为了提高存储单元的利用率,本系统将时间数据压缩成压缩BCD码后再送入显存才能显示。(7) 合并。为了提高修改时间的速度,可先对现存容逐位修改,然后调用合并子程序把显存容合并后送入指定存储单元。(8) 设定。系统进入设定状态后,可通过按设定键改变闪亮位位置和按+或-键来加1或减1闪亮位容,从而到达报时和设定闹铃时间的目的。 流程图设计:图3-3 T0中断效劳程序流程图图3-4 电路流程图软件设计:;定义变量S1EQUP3.4;按键JIAEQUP3.5SECLEQU24H;各个显示单元SECHEQU25HHENGXIANEQU26HMINULEQU27HMINUHEQU28HHENGEQU29HHOURLEQU2AHHOURHEQU2BHSECONDEQU2DH ;秒变量单位COUNTEQU2EH ;溢出中断计数器SETFLAGEQU20HHHEQU00H ;移位时用到的单元HLEQU01HMHEQU02HMLEQU03HWARNSLEQU2FHWARNSHEQU30HWARNMLEQU32H;报警分低位WARNMHEQU33H;报警分高位WARNHLEQU35H;报警时低位WARNHHEQU36H;报警时高位WARNTEQU37H;已设定闹铃时间标志WARNINGBIT 0CH ;闹铃标志WARNSETTEDBIT 0DH ;已设定闹铃时间标志;误差修正TFIXBIT0EH ;开场修正标志NEQU60 ;误差值,单位:1/10s,默认为 0,即不修正;程序入口地址ORG0000H LJMPMAIN ORG000BH ;定时器 T0 溢出中断入口 LJMPTIMER0 ORG0030H;主程序MAIN:MOVSP,#60H;堆栈设置CLRTFIX ;误差开场修正标志初始化MOVCOUNT,#0LCALLSYS_INIT ;系统初始化LCALLT0_INIT ;定时器初始化LCALLSETTIME ;等待设置当前时间MAIN_0:MOVIE,#80H ;设置完后开场走时,启动定时器 T0SETBTR0 ;允许 T0 溢出中断LCALLDELAY10MSLCALLDISPLAY1;系统初始化子程序SYS_INIT:MOVIE,#00H ;关中断MOVR0,#20 ;清变量MOVR1,#10HMOVA,#00HSYS_0:MOVR0,AINC R0DJNZR1,SYS_0RET;定时器、串口初始化T0_INIT:MOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HRET;闹铃时间设定SETWARN:MOVWARNHH,#0MOVWARNHL,#0MOVWARNMH,#0MOVWARNML,#0MOVWARNSH,#0MOVWARNSL,#0MOVSETFLAG,#00SETBHHKAISHI_NAO:LCALLDISPLAYNEW1SETW_1:S1,LOOP3LCALLDELAY10MSS1,LOOP3JNB S1,$ML,LOOPW1MOVA,SETFLAG RLA ;当前位右移 l 位标志左移 1 位 MOV SETFLAG,A ;回存SJMP SET_W2LOOP3:LJMPSET_W2LOOPW1:LJMPKAISHI1SET_W2:LCALLDISPLAYNEW1JIA,SETW_1LCALLDELAY10MSJIA,SETW_1JNB JIA,$JNB HH,SHI_W2 ;为真,那么当前位灭INC WARNHHMOVA,WARNHHXRLA,#3JZSET_W1_1LJMPKAISHI_NAOSET_W1_1:MOVWARNHH,#0LJMPKAISHI_NAOSHI_W2:JNB HL,FEN_W1INC WARNHLMOVA,WARNHHCJNEA,#2,SHI_W2_1MOVA,WARNHLXRLA,#05H ;小时低位只能是 0-4JZSET_W21LJMPKAISHI_NAOSHI_W2_1:MOVA,WARNHLXRLA,#0AHJZSET_W21LJMPKAISHI_NAO SET_W21:MOVWARNHL,#0LJMPKAISHI_NAOFEN_W1:JNB MH,FEN_W2INC WARNMHMOVA,WARNMHXRLA,#6JZSET_W22LJMPKAISHI_NAOSET_W22:MOVWARNMH,#0LJMPKAISHI_NAOFEN_W2:INC WARNMLMOVA,WARNMLXRLA,#0AHJZSET_W23LJMPKAISHI_NAOSET_W23:MOVWARNML,#0LJMPKAISHI_NAO;设置时间闹铃扫描DISPLAYNEW1:MOVA,#0AHMOV31H,AMOV34H,AMOVR0,#2FHMOVR3,#0FEHPLAYNEW1:MOVA,R3MOVP2,AMOVA,R0MOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,ALCALLDELAY1MSINC R0MOVA,R3JNB ACC.7,LOOP2RLAMOVR3,ASJMPPLAYNEW1LOOP2:RET;时间调整SETTIME:MOVHOURH,#0MOVHOURL,#0MOVMINUH,#0 ;计时无保存,可能是闹铃没进去MOVMINUL,#0MOVSECH,#0MOVSECL,#0MOVSETFLAG,#00SETBHHPANLING:LCALLDISPLAYNEWS1,PANLINGLCALLDELAY100MSLCALLDELAY100MSLCALLDELAY100MSLCALLDELAY100MSLCALLDELAY100MSS1,KAISHI1LCALLDELAY10MS JNB S1,SETC_1 ;按住时间更长为设置闹铃,第一个数码管显示SETNAO:SETBWARNSETTEDLCALLSETWARNSETC_1:LCALLSETCKAISHI1:MOVHOURH,#0MOVHOURL,#0MOVMINUH,#0MOVMINUL,#0MOVSECH,#0MOVSECL,#0MOVSETFLAG,#00SETBHHKAISHI:LCALLDISPLAYNEWSET_1:S1,SET_2LCALLDELAY10MSS1,SET_2JNB S1,$ML,LOOP1MOVA,SETFLAG RLA ;当前位右移 l 位标志左移 1 位MOV SETFLAG,A ;回存SJMP SET_2LOOP1:LJMPMAIN_0SET_2:LCALLDISPLAYNEWJIA,SET_1LCALLDELAY10MSJIA,SET_1JNB JIA,$JNB HH,SHI_2 ;为真,那么当前位灭INC HOURHMOVA,HOURHXRLA,#3JZSET_1_1LJMPKAISHISET_1_1:MOVHOURH,#0LJMPKAISHISHI_2:JNB HL,FEN_1INC HOURLMOVA,HOURHCJNEA,#2,SHI_2_1MOVA,HOURLXRLA,#05H ;小时低位只能是 0-4JZSET_21LJMPKAISHISHI_2_1:MOVA,HOURLXRLA,#0AHJZSET_21LJMPKAISHI SET_21:MOVHOURL,#0LJMPKAISHIFEN_1:JNB MH,FEN_2INC MINUHMOVA,MINUHXRLA,#6JZSET_22LJMPKAISHISET_22:MOVMINUH,#0LJMPKAISHIFEN_2:INC MINULMOVA,MINULXRLA,#0AHJZSET_23LJMPKAISHISET_23:MOVMINUL,#0LJMPKAISHI;闹铃标志SETC:MOVP2,#7FHMOVP0,#39HJNB S1,SETCLJMPSETNAO;设置时间扫描DISPLAYNEW:MOVA,#0AHMOV29H,AMOV26H,AMOVR0,#24HMOVR3,#0FEHPLAYNEW:MOVA,R3MOVP2,AMOVA,R0MOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,ALCALLDELAY1MSINC R0MOVA,R3JNB ACC.7,LOOPRLAMOVR3,ASJMPPLAYNEWLOOP:RET;走时扫描DISPLAY1:MOVA,#0AHMOV29H,AMOV26H,AMOVR0,#24HMOVR4,#0FEHJNB P3.4,BAOHULCALLDELAY5PLAY:JNB WARNING,LINGJNB P3.5,QINGLING CPL P1.0LJMPLINGLCALLDELAY10MSLCALLDELAY10MSQINGLING:CLRWARNINGLING:LCALLDELAY10MSLCALLDELAY5MSJNB P3.4,BAOHUMOVA,R4MOVP2,AMOVA,R0MOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,ALCALLDELAY2MSINC R0MOVA,R4JNB ACC.7,DISPLAY1RLAMOVR4,ASJMPPLAYBAOHU:MOVP2,#0FFHLCALLDELAY100MSLCALLDELAY100MSLCALLDELAY100MSBAOHU1:JNB WARNING,BAOHU2LJMPLINGBAOHU2:JNB P3.4,PLAY1BAOHU:JNB P3.4,PLAYLCALLDELAY10MSP3.4,$LCALLDELAY10MSP3.4,PLAYLJMPBAOHU1PLAY1:LCALLDELAY10MSLCALLDELAY10MSLCALLDELAY10MSLCALLDELAY10MSP3.4,PLAYLJMPBAOHU1;计时TIMER0:PUSHACC;A 压栈保护MOVTH0,#3CH;100MS 定时常数MOVTL0,#0B0HINC COUNTMOVA,COUNTTFIX,T0_00XRLA,#10SJMPT0_01T0_00:XRLA,#NT0_01:JZT0_1POPACCRETIT0_1:CLRTFIXMOVCOUNT,#00HINC SECONDMOV A,SECONDCPL P1.1CPL P1.2XRLA,#2JZT0_2_1POPACCRETIT0_2_1:MOVSECOND,#00HCPL P1.1INC SECLMOVA,SECLXRLA,#0AHJZT0_2_2POPACCRETIT0_2_2:MOVSECL,#00HINC SECHMOVA,SECHXRLA,#06HJZT0_2POPACCRETIT0_2:MOVSECH,#00HINC MINULMOVA,MINULXRLA,#0AHJZT0_3LJMPADJUSTT0_3:MOVMINUL,#00HINC MINUHMOVA,MINUHXRLA,#06JZT0_30LJMPADJUSTT0_30:MOVMINUH,#00HINC HOURL ;小时低位+1(即变化了),那么还要判断高位是否进位判断小 ;时高位,如为 0,1,那么小时低位可以到 9,否那么,只能 03MOVA,HOURHCJNEA,#2,T0_300MOVA,HOURLXRLA,#04JZT0_4 ;如为 3 那么转LJMPADJUST ;时或分改变均要进展闹铃判断T0_300:MOVA,HOURLXRLA,#0AHJZT0_4 ;如为 3 那么转LJMPADJUST ;时或分改变均要进展闹铃判断T0_4:MOVHOURL,#00 ;高位进展处理INC HOURHMOVA,HOURHXRLA,#03 ;判断高位是否到 3JZT0_40LJMPADJUSTT0_40:MOVHOURH,#00H ;到 3,那么做回 0 处理(24 小时制中时高位只能是2) ;时分发生改变时,必须进展闹铃判断ADJUST:WARNSETTED,ADJUST_1 ;如果没设定闹铃,那么不判断POPACCRETIADJUST_1:MOVA,HOURH ;否那么,与设定闹铃时间比拟XRLA,WARNHHJNZ ADJUST_2MOVA,HOURLXRLA,WARNHLJNZ ADJUST_2MOVA,MINUHXRLA,WARNMHJNZ ADJUST_2MOVA,MINULXRLA,WARNMLJNZ ADJUST_2 ;一致,那么设置闹铃标志SETBWARNING;设置开场闹铃标志POPACCRETIADJUST_2:CLRWARNING ;清闹铃标志POPACC ;否那么,不设置闹铃标志RETI;按键判断子程序TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40HTABLE1:DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH;延时子程序DELAY10MS:MOVR6,#20 D2:MOVR7,#248 DJNZR7,$DJNZR6,D2RETDELAY5MS:MOVR6,#10 D4:MOVR7,#248 DJNZR