闹钟系统设计
分析智能闹钟APP的设计与实现

分析智能闹钟APP的设计与实现智能闹钟APP是集成了闹钟、天气、音乐等功能的应用程序,能够为用户提供更便捷、智能化的起床方式。
下面就智能闹钟APP的设计与实现进行分析。
一、设计思路智能闹钟APP的设计思路主要包括以下几个方面:1.功能设计智能闹钟APP应该包括一系列的基础功能,如设定闹钟、设置闹钟铃声、关闭闹钟等;同时还应该考虑用户的实际需求,拓展更多的功能,如查询天气、播放音乐等。
2.用户界面设计用户界面设计直接影响用户体验。
智能闹钟APP应该采用简洁、直观的UI设计,方便用户快速操作。
3.推送机制推送机制是智能闹钟APP的关键设计之一,需要考虑到用户的使用习惯、闹钟提醒的准确性等因素,保证闹钟提醒的及时性和有效性。
二、实现方法1.闹钟设置模块闹钟设置模块是智能闹钟APP的核心功能。
当用户进入该模块时,应该能够轻松地对闹钟时间、铃声、重复等进行设定,方便用户自由搭配。
2.天气查询模块天气查询模块主要负责查询用户所在地区的实时天气情况,并进行推送。
这个模块需要注意的是,天气数据的精确性和及时性。
3.音乐播放模块音乐播放模块用于在用户未停止闹钟提醒时播放音乐,使用户更快地从睡梦中醒来。
在该模块中,应该提供多种音乐供用户选择,同时还应该考虑到版权问题。
推送机制的实现需要综合考虑多种因素。
其中,最重要的是闹钟提醒的准确性和及时性。
在该模块中,可以使用推送服务或后台服务等方式来保证闹钟的准确推送。
三、总结智能闹钟APP的设计与实现需要考虑到用户需求、应用场景、技术实现等多方面因素。
只有在尽可能满足用户需求的同时,才能打造出一款人性化、易用的APP。
同时,为了保证用户体验,开发团队需要在实现过程中注重细节,尽可能完善各项功能和细节。
单片机闹钟设计程序报告

单片机闹钟设计程序报告1. 引言闹钟作为人们日常生活中的常用物品,不仅有叫醒人们起床的功能,还可以作为提醒的工具。
随着科技的进步,单片机闹钟逐渐取代了传统的机械闹钟,成为人们生活中不可或缺的一部分。
本报告旨在介绍一个基于单片机的简单闹钟设计程序。
2. 设计方案本设计方案使用了单片机和数码管作为主要硬件,通过对单片机的编程,实现了闹钟的基本功能,包括时间设置、闹钟时间设置、闹钟触发、蜂鸣器报警等。
2.1 硬件设计硬件方面,本设计基于某型号的单片机和数码管。
单片机通过相关的引脚与数码管相连,通过控制引脚的电平来显示不同的数字。
2.2 软件设计软件方面,本设计使用C语言编程实现。
主要的功能包括获取当前时间、显示时间、设置时间、设置闹钟时间、闹钟触发检测、蜂鸣器报警等。
3. 程序实现3.1 初始化设置在程序的开始部分,需要对单片机进行初始化设置。
包括设置引脚的输入输出模式、设置计时器、设置中断等。
3.2 时间显示为了实现时间显示的功能,我们需要通过单片机的计时器来不断获取当前时间,并将其转换为时、分、秒的格式。
然后通过数码管显示出来。
3.3 时间设置通过给单片机的某个引脚接入按钮,实现时间设置功能。
当按钮被按下时,单片机进入时间设置模式。
此时,用户可以通过另外的按钮来逐个调整时、分、秒的数值。
3.4 闹钟时间设置类似于时间设置,闹钟时间设置也需要通过按钮来实现。
用户可以按下对应的按钮来设置闹钟的时、分,设置完毕后,单片机会将设置的时间保存起来。
3.5 闹钟触发检测在每一次时间显示的循环中,程序都会检测当前时间是否与闹钟时间相符。
如果相符,则触发闹钟,蜂鸣器开始报警。
3.6 蜂鸣器报警通过单片机的一个输出引脚,连接到蜂鸣器,实现蜂鸣器的报警功能。
当闹钟触发时,单片机会给对应的引脚输出一个高电平,从而使蜂鸣器发声。
4. 总结通过对单片机闹钟设计程序的实现,我们成功实现了闹钟的基本功能,包括时间设置、闹钟时间设置、闹钟触发、蜂鸣器报警等。
毕业设计闹钟系统设计

课程设计课程设计任务书课程EDA技术课程设计题目闹钟系统的设计主要内容、基本要求、主要参考资料等主要内容:设计并制作一个带闹钟功能的24小时计时器。
它包括以下几个组成部分:1、显示屏,由4 个七段数码管组成,用于显示当前时间(时:分)或设置的闹钟时间;2、数字键,实现‘0’—‘9’的输入,用于输入新的时间或新的闹钟时间;3、TIME(时间)键,用于确定新的时间设置;4、ALARM(闹钟)键,用于确定新的闹钟时间设置,或显示已设置的闹钟时间;5、扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声基本要求:1、计时功能:这是本计时器设计的基本功能,每隔一分钟计时一次,并在显示屏上显示当前时间。
2、闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。
3、设置新的计时器时间:用户用数字键输入新的时间,然后按"TIME"键确认。
在输入过程中,输入数字在显示屏上从右到左依次显示。
例如,用户要设置新的时间12:34,则按顺序输入“1”,“2”,“3”,“4”,与之对应,显示屏上依次显示的信息为:“1”,“12”,“123”,“1234"。
如果用户在输入任意几个数字后较长时间内,例如5 s,没有按任何键,则计时器恢复到正常的计时显示状态。
主要参考资料:[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.[2] 康华光主编.电子技术基础模拟部分. 北京:高教出版社,2006.[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限2011.3.11指导教师专业负责人一、总体设计思想1.基本原理数字闹钟电路的基本结构由两个60进制计数和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。
秒计数器的技术时钟CLK为HZ的标准信号。
当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒得计时结果通过6个数码管来动态显示。
毕业设计(论文)-基于单片机的多功能钟控收音机的设计与实现--闹钟子系统的设计与实现[管理资料]
![毕业设计(论文)-基于单片机的多功能钟控收音机的设计与实现--闹钟子系统的设计与实现[管理资料]](https://img.taocdn.com/s3/m/93ab9c330c22590103029d9e.png)
基于单片机的多功能钟控收音机的设计与实现——闹钟子系统的设计与实现摘要收音机是现在生活中的一种娱乐工具,它可以扩展我们的知识面,丰富我们是日常生活。
但是现在的收音机仅仅只拥有收台、听台、存台的功能,功能上非常的单一,为了让收音机具有更强大的的功能,设计了这套基于单片机的多功能钟控收音机系统。
这套系统在传统的收音机上增加了时钟设置、温度测量、液晶显示以及闹钟设置多项功能。
本文主要论述了系统的方案设计,系统硬件设计包括硬件选型和硬件电路图;系统软件设计包括程序流程图设计和关键代码。
通过编写代码实现收音机节目的播放、音量调节、电台切换及节目的自动搜索、节目频点存储功能、时钟设置、温度测量、液晶显示以及闹钟功能。
且能够通过按键调整系统时钟,到达设定闹铃时间值可选择蜂鸣器响或开启收音机到指定频点。
该系统与传统的收音机系统相比较,具有结构简单,抗干扰能力强,测量精度高,使用方便的特点。
关键字:单片机;收音机;闹钟;液晶显示Based on SCM multi-function clock radio control design and realized ——Alarm subsystem of design and implementationAuthor:Li XinfangTutor:Yang BoAbstractThe radio is now in the life of the one kind of entertainment tool, it can expand our knowledge, enrich our daily life is. But now the radio only accept ,listen , save a function, the function is a single, in order to let the radio has more powerful function, the set design based on single chip microcomputer multifunctional clock radio control system. The system in the traditional radio increased the clock set, temperature measurement, liquid crystal display and alarm multiple functions. This paper discusses the design of the whole system, hardware design including hardware selection and hardware circuit diagram; System software design including program flowchart design and key code. By writing code realization of radio programs broadcast, volume adjustment, radio switch and programs to be automatic search, the program frequency memory function, clock set, temperature measurement, liquid crystal display and alarm clock function. And to be able to button to adjust the system clock, to set the alarm time value can choose a buzzer rang or open radio frequency to the specified. This system and the traditional radio system comparison, the structure is simple, strong anti-jamming ability, high accuracy, easy to use features.Key words: Single chip microcomputer; the radio; the alarm clock; liquid crystal display目录1 绪论 0 0研究的目的及意义 0本文结构 (1)2 系统方案设计 (2) (2) (2)收音机模块 (3)时钟模块 (3)温度模块 (3)显示模块 (3)闹钟模块 (3)按键模块 (4)3 系统硬件设计 (5) (5) (5)AT89S52单片机的引脚结构分析 (6)单片机最小系统设计图 (7)显示模块硬件电路设计 (7) (7)显示模块电路设计 (8)按键模块硬件电路设计 (8)时钟模块的硬件电路设计 (9) (9) (9) (10)存储模块硬件电路设计 (11) (11) (11)AT24C02电路设计 (12)打铃模块电路设计 (12)4 系统软件设计 (14)系统软件总体设计 (14)主控模块详细设计 (14)显示模块详细设计 (16)按键模块详细设计 (17)时钟模块详细设计 (18) (18)存储模块详细设计 (20) (21) (23)5系统的调试与实现 (25)C介绍 (25)6 结束语 (27)参考文献 (28)致谢 (29)1 绪论收音机一直在人们的生活娱乐中占有非常重要的地位。
自动打铃系统设计样本

<<综合课程设计>>自动打铃系统设计报告题目: 自动打铃系统专业: 电子信息工程年级:学号:学生姓名:联系电话:指引教师:完毕日期: 12月30日自动打铃系统摘要在现如今快节奏生活中, 人们对于时间规定越来越苛刻, 诸多时候需要对时间规划, 然后届时间点就要有时间提示, 这就必要用届时中提示装置, 亦可称为打铃装置。
打铃装置有诸各种, 例如手机打铃系统, 闹钟机械打铃系统, 广播打铃系统等等, 但是寻常生活中见得最多还是校园自动打铃系统。
在学校生活中, 每天上课都离不开打铃系统使用。
打铃器可觉得上下课学生和教师们提供时间提示, 有助于师生对上课和学习合理安排。
同事也可以作为一种提示学生作息时间时间表, 让教师和学生均有一种规律科学时间安排。
因而, 打铃系统核心某些也是时钟某些, 为系统提供时间基准。
本设计重要是针对合用于校园打铃系统规定, 其简介了一种基于单片机自动打铃系统设计办法, 系统以STC89C52单片机为控制器, 以DS1302时钟芯片为系统提供时间, 并在1602液晶显示屏上显示, 通过按键可以设定定期打铃时间和打铃间隔。
系统软件设计采用C语言来完毕, C语言语法简洁, 使用以便, 用于完毕软件设计非常以便。
核心词: 打铃器、STC89C52单片机、DS1302、LCD1602ABSTRACT. I.today'.fast-pace.life, peopl.ar.mor.an.mor.requirements, i.man.case.nee.tim.t.plan, an.the.t.poin.i.tim.wil.hav.tim.t.remind, e.t.remin.device, als.know.a.Bel.equipment.Bel.device.ther.ar.many, suc.a.phon.ringin.system, th.mechanica.Bel.alar.cloc.system, broadcas.th.Bel.System, an.s.on, bu.i.everyda.lif.u.t.th.schoo.bel.syste.automatically.I.schoo.life,e.i.clas.ever.day.Bel.ca.provid.reminde.o.student.an.teacher.t.an.fro.sc hool,e.a.a.aler.s tuden.hour.schedule, w.o.science...Accordingly, Bel.cloc.i.th.cor.par.o.th.system,provid..tim.referenc.fo.th.system.Designe.primaril.fo.th.Bel.Syste.requirement.appl.t.th.campus, an.introduce.a.automati.Bel.syste.base.o.single-chi.desig.methods,system.wit.STC89C5.single-chi.controller, DS130.provide.th.syste.tim.cloc.chip, i.160.an.displaye.o.th.LC.b.pressin.th.se.ringin.an.ringin.i.interval.o.tim.o..regula.basis.Syste.softwar plete, .languag.synta.i.simple, e, pletin..softwar.design.Key Words: t Bell, DS1302, collector, STC89C52 single-chip LCD1602目录摘要 ................................................................................................... 错误!未定义书签。
设计题目十七:带闹钟功能的24小时制闹钟系统的设计

设计题目十七:带闹钟功能的24小时制闹钟系统的设计
设计要求:
(1) 计时功能:这是本计时器设计的基本功能,每隔一分钟计时一次,并在显示屏上显示当前时间。
(2) 闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。
(3) 设置新的计时器时间:用户用数字键‘0’~‘9’输入新的时间,然后按 "TIME"键确认。
(4) 设置新的闹钟时间:用户用数字键“0”~“9”输入新的时间,然后按“ALARM ”键确认。
过程与(3)类似。
(5) 显示所设置的闹钟时间:在正常计时显示状态下,用户直接按下“ALARM ”键,则已设置的闹钟时间将显示在显示屏上。
参考设计思路:
图4-1 闹钟系统总体结构图
整个闹钟系统的总体结构图如图4-1所示,我们将整个系统分成:(1)用于键盘输入的缓冲器;(2)用于始终计数的计数器;(3)用于保存闹钟时间的寄存器;(4)用于显示的七段数码显示电路;(5)用于以上四部分协同工作的控制器。
其中七段数码显示电路又包含译码器和显示器电路。
然后按照项目需求设计每个小的模块,经编译仿真成功之后组装成最终产品。
U4U6U2U1。
基于单片机定时闹钟的设计

基于单片机定时闹钟的设计随着科技的快速发展,嵌入式系统已经深入到我们生活的各个角落。
其中,单片机以其高效性、灵活性和低成本性,广泛应用于各种设备的设计中。
本文将探讨如何基于单片机设计一个定时闹钟。
一、硬件需求1、单片机:选择一个适合你项目的单片机。
比如Arduino UNO,它具有丰富的IO口和易于使用的开发环境。
2、显示模块:为了能直观地展示时间,你需要一个LCD显示屏。
可以选择常见的16x2字符型LCD显示屏。
3、按键模块:用于设定时间和闹钟功能。
一般可以选择4个按键,分别代表功能设置、小时加、小时减和分钟加。
4、蜂鸣器:当到达设定时间时,蜂鸣器会发出声音提醒。
二、软件需求1、开发环境:你需要一个适用于你单片机的开发环境,例如Arduino IDE。
2、编程语言:一般使用C或C++进行编程。
3、程序设计:你需要编写一个程序来控制单片机,让其根据设定时间准时唤醒。
程序应包括初始化和设定时间的功能,以及到达设定时间后的闹钟提醒功能。
三、设计流程1、硬件连接:将单片机、显示模块、按键模块和蜂鸣器按照要求连接起来。
2、初始化:在程序中初始化所有的硬件设备。
3、时间设定:通过按键模块设定时间。
你需要编写一个函数来处理按键输入,并在LCD显示屏上显示当前时间。
4、闹钟提醒:在程序中加入一个计时器,当到达设定时间时,程序会唤醒并触发蜂鸣器发出声音。
5、循环检测:在主循环中不断检测时间是否到达设定时间,如果到达则触发闹钟提醒,然后继续检测。
四、注意事项1、时钟源:你需要一个稳定的时钟源来保证闹钟的准确性。
可以考虑使用网络时钟或者GPS模块。
2、功耗优化:如果你的设备需要长时间运行,那么需要考虑到功耗的问题,比如使用低功耗的单片机或者在不需要闹钟提醒的时候关闭蜂鸣器等。
3、人机交互:考虑增加更多的功能以满足用户的需求,如设置多个闹钟、调整闹钟的音量等。
4、安全性:保证设备的电源稳定,避免在突然断电的情况下数据丢失或设备损坏。
校园打铃系统设计

校园打铃系统设计引言近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
单片机技术起着不可忽视的作用并且在智能控制领域有着举足轻重的地位。
本设计就是利用Atmel 公司生产的单片机AT89S52芯片和AT24C02芯片,以及利用DS1302用作时钟芯片等功能)。
在以单片机为核心的基础上加上其外围设备实现的小的系统——自动打铃系统。
所谓的单片机小系统从系统的角度来定义就是完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。
硬件设计部分分别从各个功能电路进行阐述,包括电源电路、复位电路、时钟电路、红外遥控及显示电路。
软件部分分成了四个模块:初始化模块、时间显示模块、遥控按键设定模块、以及定时打铃模块。
初始化模块主要是对定时计数器的方式及初值的设定。
时间显示模块负责正确的显示当前时间。
按键设定模块主要是对时间的校准及设定。
定时打铃模块负责到时响铃功能。
也就是说系统的功能是硬件和软件两大部分共同合作完成。
1第1章系统总体设计作息时间控制钟系统概述设计一个校园打铃系统,使用的是24小时制。
要求在掉电状态下数据不丢失,可以设置多个打铃时间点,用红外线遥控按键设置同样的打铃时间,数字键输入设置内容,不只上、下键地调时。
于用的不是单片机内部的定时器,定时功能用的是外部时钟DS1302芯片,而DS1302芯片的精度取决于32768HZ晶振的精度,32768HZ晶振的精度小于%,所以整个系统的精确度高于%。
功能特点25路掉电不丢失数据的用户定时功能。
采用首创的忽略定时新概念,可以设置定时某项为忽略值,再配合多路定时项目使定时的内容自发挥,千变万化,能够适应各种的定时要求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东北石油大学课程设计课程 EDA技术课程设计题目闹钟系统的设计院系电子科学学院专业班级电子信息工程学生姓名王琢学生学号 080901140203 指导教师2011年3 月11日东北石油大学课程设计任务书课程EDA技术课程设计题目闹钟系统的设计专业电子信息工程姓名王琢学号080901140203主要内容、基本要求、主要参考资料等主要内容:设计并制作一个带闹钟功能的24小时计时器。
它包括以下几个组成部分:1、显示屏,由4 个七段数码管组成,用于显示当前时间(时:分)或设置的闹钟时间;2、数字键,实现…0‟—…9‟的输入,用于输入新的时间或新的闹钟时间;3、TIME(时间)键,用于确定新的时间设置;4、ALARM(闹钟)键,用于确定新的闹钟时间设置,或显示已设置的闹钟时间;5、扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声基本要求:1、计时功能:这是本计时器设计的基本功能,每隔一分钟计时一次,并在显示屏上显示当前时间。
2、闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。
3、设置新的计时器时间:用户用数字键输入新的时间,然后按"TIME"键确认。
在输入过程中,输入数字在显示屏上从右到左依次显示。
例如,用户要设置新的时间12:34,则按顺序输入“1”,“2”,“3”,“4”,与之对应,显示屏上依次显示的信息为:“1”,“12”,“123”,“1234"。
如果用户在输入任意几个数字后较长时间内,例如5 s,没有按任何键,则计时器恢复到正常的计时显示状态。
主要参考资料:[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.[2] 康华光主编.电子技术基础模拟部分. 北京:高教出版社,2006.[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限2011.3.11指导教师专业负责人2011年3月7日一、总体设计思想1.基本原理数字闹钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。
秒计数器的计数时钟CLK为1Hz的标准信号。
当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒的计时结果通过6个数码管来动态显示。
因此,通过模式选择信号KEY1、KEY2控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定闹钟分、时5个状态。
当数字闹钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,秒的进位, 分的进位;当数字闹钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字钟处于闹钟定时状态时,可以设定小时和分;当计时到所设定的时刻时,驱动扬声器,持续1分钟。
2.设计框图设定按键时钟1Hz 按键UpDN 时钟10Hz功能切换寄存器闹钟设定寄存器闹铃控制电路模式切换数据扫描技术字符译码扫描时钟320Hz数码显蜂鸣器时钟计数寄存器二、设计步骤和调试过程1、总体设计电路根据设计要求及端口设置,需要五个状态来实现:S0:表示电路初态即正常时钟计数状态,完成前面设计功能 (1) 的工作。
S1:接收键盘输入状态.在状态S0时用户按下数字键后进入此状态.在此状态下,显示屏上显示的是用户键入的数字。
S2:设置新的闹钟时间.在状态S1时用户按下ALARM键后进入此状态。
S3:设置新的计时器时间.在状态S1时用户按下TIME键后进入此状态。
S4:显示闹钟时间.在状态S0时用户直接按下ALARM键后进入此状态。
在此状态下,显示屏上显示的是所设置的闹钟时间.注意:在此状态下,用户按下ALARM键后,显示屏上保持显示闹钟时间,经过一段时间以后,再返回状态S0。
设计基本思想:(1) CLK为外部时钟信号,RESET为复位信号.(2) 当KEY为高电平(KEY= '1')时,表示用户按下数字键("0"~"9").(3) 当ALARM_BUTTON为高电平时,表示用户按下"ALARM"键.(4) 当TIME_BUTTON为高电平时,表示用户按下"TIME"键.(5) 当LOAD_NEW_A为高电平时,控制(闹钟时间寄存器)加载新闹钟时间值.(6) 当LOAD_NEW_C为高电平时,控制(时钟计数器)设置新的时间值.(7) 当SHOW_NEW_TIME为高电平时,控制(七段数码显示电路)显示新的时间值,即用户通过数字键输入的时间;否则,当SHOW_NEW_TIME为低电平时,根据SHOW_A信号的值控制显示当前时间或闹钟时间.2、模块设计和相应模块程序(1)顶层文件:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY clock ISPORT ( CLK12MHZ : IN STD_LOGIC;CLK8HZ : IN STD_LOGIC;SPKOUT : OUT STD_LOGIC;CLK : IN STD_LOGIC;KEY1 : IN STD_LOGIC;KEY2 : IN STD_LOGIC_VECTOR(1 DOWNTO 0);H1,H2,M1,M2,S1,S2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END;ARCHITECTURE one OF clock ISCOMPONENT shizhongPORT (clk : in std_logic;md1 : in std_logic;md2 : in std_logic_vector(1 downto 0);clken : out std_logic;h1,h2,m1,m2,s1,s2: out std_logic_vector(3 downto 0));END COMPONENT;COMPONENT NoteTabsPORT ( clk : IN STD_LOGIC;ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END COMPONENT;COMPONENT ToneTabaPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0);en : in std_logic);END COMPONENT;COMPONENT SpeakeraPORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);SpkS : OUT STD_LOGIC );END COMPONENT;SIGNAL Tone :STD_LOGIC_VECTOR (10 DOWNTO 0);SIGNAL ToneIndex :STD_LOGIC_VECTOR (3 DOWNTO 0);SIGNAL clken :STD_LOGIC;SIGNAL en :STD_LOGIC;BEGINu1 : Shizhong PORT MAP (clk=>CLK,md1=>KEY1,md2=>KEY2,clken=>en, h1=>h1,h2=>h2,m1=>m1,m2=>m2,s1=>s1,s2=>s2);u2 : NoteTabs PORT MAP (clk=>CLK8HZ, ToneIndex=>ToneIndex);u3 : ToneTaba PORT MAP (Index=>ToneIndex,Tone=>Tone,en=>en);u4 : Speakera PORT MAP (clk=>CLK12MHZ,Tone=>Tone, SpkS=>SPKOUT ); END;(2)时钟控制模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shizhong isport( clk: in std_logic;md1:in std_logic;md2:in std_logic_vector(1 downto 0);clken:out std_logic;h1,h2,m1,m2,s1,s2:out std_logic_vector(3 downto 0));end shizhong;architecture one of shizhong issignal hou1:std_logic_vector(3 downto 0);signal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal seth1:std_logic_vector(3 downto 0);signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0);signal setm2:std_logic_vector(3 downto 0);signal sec1:std_logic_vector(3 downto 0);signal sec2:std_logic_vector(3 downto 0);begin-----------------------------------------------小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") thenhou1<="0000";elsif hou1="0010"and hou2="0011"and md1='0'and md2="01" then--当时间为23点且处于校时状态时hou1<="0000";elsif (hou2="1001"and(min1="0101" and min2="1001")and (sec1="0101" and sec2="1001"))or (hou2="1001"and md1='0' and md2="01")thenhou1<=hou1+1;end if;end if;end process h110;-----------------------------------------------小时个位h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginif clk'event and clk='1' thenif (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") thenhou2<="0000";elsif hou2="1001"and(min1="0101" and min2="1001")and (sec1="0101" and sec2="1001") thenhou2<="0000";elsif (hou2="1001"and md1='0' and md2="01")or (hou1="0010"and hou2="0011") thenhou2<="0000";--md<='1';--elsif ((min1="0101" and min2="1001") and (sec1="0101" and sec2="1001"))or (md1='0' and md2="01") thenhou2<=hou2+1;--speak<=clk;--end if;end if;end process h220;-----------------------------------------------分钟十位m110:process(clk,min2,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif (min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") thenmin1<="0000";elsif min1="0101"and min2="1001"and (md1='0' and md2="00")then min1<="0000";elsif (min2="1001"and (sec1="0101" and sec2="1001"))or (min2="1001"and md1='0' and md2="00")thenmin1<=min1+1;end if;end if;--end if;end process m110;----------------------------------------------分钟个位m220:process(clk,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif min2="1001"and (sec1="0101" and sec2="1001")thenmin2<="0000";elsif min2="1001"and (md1='0' and md2="00")thenmin2<="0000";else if (sec1="0101" and sec2="1001") or(md1='0' and md2="00")thenmin2<=min2+1;end if;end if;end if;end process m220;---------------------------------------------秒十位s110:process(clk)beginif clk'event and clk='1' thenif (sec1="0101" and sec2="1001")thensec1<="0000";else if sec2="1001"thensec1<=sec1+1;end if;end if;end if;end process s110;--------------------------------------------秒个位s220:process(clk)beginif clk'event and clk='1' thenif sec2="1001" thensec2<="0000";else sec2<=sec2+1;end if;end if;end process s220;-------------------------------------------时间设置小时部分sethour1:process(clk,seth2)beginif clk'event and clk='1' thenif seth1="0010"and seth2="0011" thenseth1<="0000";elsif seth2="1001" thenseth1<=seth1+1;end if;end if;end process sethour1;sethour2:process(clk,md1,md2,seth1)beginif clk'event and clk='1' thenif (seth1="0010"and seth2="0011")or seth2="1001"thenseth2<="0000";elsif md1='1' and md2="00" thenseth2<=seth2+1;end if;end if;end process sethour2;-------------------------------------------时间设置分钟部分setmin1:process(clk,setm2)beginif clk'event and clk='1' thenif setm1="0101"and setm2="1001"thensetm1<="0000";elsif setm2="1001"thensetm1<=setm1+1;end if;end if;end process setmin1;setmin2:process(clk,md1,md2)beginif clk'event and clk='1'thenif setm2="1001"thensetm2<="0000";elsif md1='1' and md2="01"thensetm2<=setm2+1;end if;end if;end process setmin2;--------------------------------------------闹铃speaker:process(clk,hou1,hou2,min1,min2)beginif clk'event and clk='1'thenif seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 then clken<='1';else clken<='0';end if;end if;end process speaker;disp:process(md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1 ,setm2)beginif md1='0' then---------------计时时间显示和设置模式h1<=hou1;h2<=hou2;m1<=min1;m2<=min2;s1<=sec1;s2<=sec2;else -----------闹铃时间现实和设置模式h1<=seth1;h2<=seth2;m1<=setm1;m2<=setm2;s1<="1111";s2<="1111";end if;end process disp;end one;(3)乐曲演奏模块:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera ISPORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speakera ISSIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGINDivideCLK : PROCESS(clk)VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ;BEGINPreCLK <= '0'; -- 将CLK进行16分频,PreCLK为CLK的16分频IF Count4>11 THEN PreCLK <= '1'; Count4 := "0000";ELSIF clk'EVENT AND clk = '1' THEN Count4 := Count4 + 1;END IF;END PROCESS;GenSpkS : PROCESS(PreCLK, Tone)-- 11位可预置计数器VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0);BEGINIF PreCLK'EVENT AND PreCLK = '1' THENIF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS <= '1';ELSE Count11 := Count11 + 1; FullSpkS <= '0'; END IF;END IF;END PROCESS;DelaySpkS : PROCESS(FullSpkS)--将输出再2分频,展宽脉冲,使扬声器有足够功率发音VARIABLE Count2 : STD_LOGIC;BEGINIF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2;IF Count2 = '1' THEN SpkS <= '1';ELSE SpkS <= '0';END IF;END IF;END PROCESS;END;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs ISPORT (clk : IN STD_LOGIC;ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END;ARCHITECTURE one OF NoteTabs ISCOMPONENT MUSIC --音符数据ROMPORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END COMPONENT;SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);BEGINCNT8 : PROCESS(clk,Counter)BEGINIF Counter=138 THEN Counter <= "00000000";ELSIF (clk'EVENT AND clk = '1') THEN Counter <= Counter+1; END IF;END PROCESS;u1 : MUSIC PORT MAP(address=>Counter , q=>ToneIndex, inclock=>clk);END;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba ISPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0);en : IN STD_LOGIC);END;ARCHITECTURE one OF ToneTaba ISBEGINPROCESS(Index,en)BEGINIF en='0' THEN Tone<="11111111111";--使能信号ELSECASE Index IS -- 译码电路,查表方式,控制音调的预置数 WHEN "0000" => Tone<="11111111111" ;WHEN "0001" => Tone<="01100000101" ;WHEN "0010" => Tone<="01110010000" ;WHEN "0011" => Tone<="10000001100" ;WHEN "0101" => Tone<="10010101101" ;WHEN "0110" => Tone<="10100001010" ;WHEN "0111" => Tone<="10101011100" ;WHEN "1000" => Tone<="10110000010" ;WHEN "1001" => Tone<="10111001000" ;WHEN "1010" => Tone<="11000000110" ;WHEN "1100" => Tone<="11001010110" ;WHEN "1101" => Tone<="11010000100" ;WHEN "1111" => Tone<="11011000000" ;WHEN OTHERS => NULL;END CASE;END IF;END PROCESS;END;LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.altera_mf_components.all;ENTITY music ISPORT( address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END music;ARCHITECTURE SYN OF music ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0);COMPONENT altsyncramGENERIC (intended_device_family : STRING;width_a : NATURAL;widthad_a : NATURAL;numwords_a : NATURAL;operation_mode : STRING;outdata_reg_a : STRING;address_aclr_a : STRING;outdata_aclr_a : STRING;width_byteena_a : NATURAL;init_file : STRING;lpm_hint : STRING;lpm_type : STRING);PORT ( clock0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END COMPONENT;BEGINq <= sub_wire0(3 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (intended_device_family => "Cyclone",width_a => 4,widthad_a => 8,numwords_a => 256,operation_mode => "ROM",outdata_reg_a => "UNREGISTERED",address_aclr_a => "NONE",outdata_aclr_a => "NONE",width_byteena_a => 1,init_file => "data1.mif",lpm_hint => "ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=rom2",lpm_type => "altsyncram")PORT MAP ( clock0 => inclock,address_a => address,q_a => sub_wire0);END SYN;3、仿真及仿真结果分析本实验是以KEY2、KEY1为控制整个闹钟的校时,校分,校闹钟时、分,分别将KEY2[1],KEY2[0],KEY1,送到实验上的三个键,由这三个键来控制整个校时,校分,校闹钟时,校闹钟分的过程,加上分别连接的键叫A,B,C键,则当A=0,B=1,C=0时是对时钟进行校时,时个位和时十位会以二十四进制循环自动增加。