您好,欢迎来到九壹网。
搜索
您的当前位置:首页电子音乐闹钟的设计与仿真

电子音乐闹钟的设计与仿真

来源:九壹网
本科毕业设计题目电子音乐闹钟的设计与仿真摘要

电子音乐闹钟在日常生活中具有很广泛的应用。本课题设计了一个基于单片机控制的电子音乐闹钟,从硬件和软件两个方面对系统进行了详细设计。硬件系统主要包括单片机主控模块、显示模块、按键模块和音乐播放模块。其中单片机模块采用ATC51,显示模块采用简单实用的数码管,音乐播放利用扬声器发声控制。系统能够准确地显示时、分、秒信息,通过按键实现时间调整和闹钟时间的设置,能够定时播放预先设置的电子音乐。软件方面基于模块化编程思想,开发环境采用KeilC51。最后利用硬件仿真软件Proteus构建硬件仿真平台,对系统进行了功能验证。仿真结果充分说明系统设计是完全可行的。关键词:单片机;电子音乐闹钟;LED数码管;按键

ABSTRACT

Electronicmusicalarmclockhasawiderangeofapplicationsinourdailylife.Thistopichasdesignedabasedonsinglechipmicrocomputercontrolelectronicmusicalarmclock,fromtwoaspectsofhardwareandsoftwareofthesystemhascarriedonthedetaileddesign.HardwaresystemmainlyincludestheSCMcontrolmodule,displaymodule,keymoduleandmusicplaybackmodule.TheATC51singlechipmicrocomputermodule,displaymoduleadoptsthesimpleandpracticaldigitaltube,musicplaybackusingspeakervoicecontrol.Systemisabletoaccuratelydisplayhours,minutesandseconds,throughindependentkeyimplementationtimeadjustmentandthealarmtimeSettings,canplayapresetelectronicmusicregularly.Softwarebasedonthemodularprogrammingideas,developmentenvironmentKeilC51.FinallyusinghardwareemulationsoftwareProteussimulationplatformbuildinghardware,thesystemfunctionalverification.Thesimulationresultsfullyshowsystemdesigniscompletelyfeasible.

Keywords:Singlechipmicrocomputer;Electronicmusicalarmclock;LEDdigitaltube;Separatebutton

目录

1引言...................................................................................................................................1

1.1研究目的和意义.....................................................................................................11.2本系统主要研究的内容.........................................................................................1

2方案的选择和论证.....................................................................................................1

2.1单片机型号的选择.................................................................................................12.3显示器的选择.........................................................................................................22.4计时部分的选择.....................................................................................................22.5单片机播放音乐原理.............................................................................................3

2.5.1音调的确定...................................................................................................32.5.2音乐节拍的产生.........................................................................................3

3电子音乐闹钟系统详细设计.................................................................................4

3.1系统功能方框图.....................................................................................................43.2硬件详细设计.........................................................................................................5

3.2.1ATC51单片机简介..................................................................................53.2.2晶振电路.......................................................................................................63.2.3复位电路.......................................................................................................73.2.4键盘电路的设计...........................................................................................73.2.5显示电路.......................................................................................................83.2.7显示驱动模块...............................................................................................83.2.8发音电路模块...............................................................................................93.3软件详细设计.........................................................................................................9

3.3.1主程序设计...................................................................................................93.3.2定时器定时模块.........................................................................................103.3.3闹钟模块.....................................................................................................113.3.4计时模块.....................................................................................................113.3.5键盘扫描模块.............................................................................................133.3.6播放音乐模块.............................................................................................14

4系统调试.......................................................................................................................15

4.1软件介绍................................................................................................................15

4.1.1PROTEUSISIS软件介绍.........................................................................154.1.2KEILC51软件介绍...................................................................................154.2利用Proteus和Keil进行联合调式...................................................................15

5仿真结果.......................................................................................................................176结论.................................................................................................................................18参考文献............................................................................................................................19致附

谢.................................................................................................................................20录.................................................................................................................................21

安徽财经大学管理科学与工程学院本科毕业设计

1引言

1.1研究目的和意义目的:设计一个电子闹钟,该闹钟可由使用者自己校准时间并根据需要在规定的时间发出音乐提醒使用者,防止遗忘时间。

意义:电子音乐闹钟在生活中很常见,有了它,使得我们忙碌的生活不在枯燥,也不用担心会错过什么重要的事。随着现在生活压力的增大,失眠现象已经很普遍,特别是当第二天有重要事情的时候,老是怕睡过而导致人们睡不好,有了电子闹钟,我们再也不用担心这种事会发生了,而是能好好地睡到闹钟闹醒的那一刻,如果再加上那么一段美妙的音乐,这样,我们会伴随柔和的音乐而起床。所以,电子音乐闹钟给人们的生活带来了极大的方便。于是,研究这样一个电子音乐闹钟有着非常现实的意义。

1.2本系统主要研究的内容本设计主要研究用proteus和keil协同仿真一个电子音乐闹钟,主要包括硬件电路详细设计和软件详细设计两方面。其中硬件电路部分可分为四个模块:键盘模块;②显示模块;③计时模块;④音乐播放模块。软件部分则应做到程序的准确、简单、可读性强。最后通过硬软件的结合实现电子音乐闹钟的精确计时、闹钟设置和播放音乐功能。

2方案的选择和论证

2.1单片机选择通过分析多种单片机,认为ATC51是比较适合做电子音乐闹钟的芯片,器件采用ATMEL高密度非易失存储器制造技术制造,与MCS-51指令集和输出管脚相兼容。单片机的可擦除只读存储器可以反复擦除1000次以上,其寿命较长,使用更方便。再者他的数据保留时间可达10年。ATC51是一种高效微控制器,是最好的选择。

1

安徽财经大学管理科学与工程学院本科毕业设计

2.2按键的选择方案一:矩阵式键盘。为了节省I/O口,通常将按键排列成矩阵形式。虽然电路连接复杂,但是提高了I/O口的利用率,在修改时钟或设置闹铃时间时可以直接从键盘输入,快捷、方便。如果选择此方案,软件编程较复杂,适用于需很多个按键的场合。

方案二:式按键。式按键是直接用I/O口线构成单个按键电路,一个按键单独占用1根I/O线。虽然会给布线带来诸多不便,但程序设计简单,适合用于按键较少的场合。如果系统中的键较少,就可以使用式按键,因此,此方案适用于按键较少的情况。如果使用该方案,无论从硬件还是软件方面实现起来都比较方便,所以我选择方案二。

2.3显示器的选择方案一:液晶显示器。此显示器体积小,便于携带;并且液晶显示器可视面积大。其缺点为此显示器的亮度和对比度不是很好,并且寿命有限,驱动电路复杂,使用起来更麻烦。

方案二:数码管显示器。数码管的驱动电路简单,并且在亮度、可视角度和刷新速率等方面,都更具优势。LED寿命长,背光功耗低、更环保,它不含有害金属汞,免去了对人体对环境的损害;第三、LED背光让显示器显得更轻薄,LED采用发光二极管,不需要复杂的光路设计,实现真正的光源平面化,所以显示器也能节省很多空间。如果选择了此方案,那么在夜间看时间的时候就非常方便。其缺点是耗电量较大。综合考虑,数码管使用起来较为方便,因此我选择用数码管做显示器。

2.4计时部分的选择DS1302时钟芯片,大可以实现计时功能,而且系统不怕掉电且时间精确。它采用备份电池供电,在系统断电时仍可以工作。实时时钟芯片的这些优点,使得它广泛应用于需要显示时间的场合,但这种芯片比较贵,况且,设计本系统目的是为了学习单片机程序的编写和调试,因此采用了软件编程的方法来计时而没有采用价格较高的时钟芯片。

2

安徽财经大学管理科学与工程学院本科毕业设计

2.5单片机播放音乐原理一般情况下,用单片机蜂鸣器来演奏音乐基本都是单音频率,不像专用乐器那样能演奏多种音色的音乐。所以音调和节拍是该设计要了解的两个概念。音调表示了一个音符的频率有多高,节拍表示了一个音符能唱多久。

2.5.1音调的确定

音调主要是通过频率来确定的,我们可以根据音调表查出各个音符所对应的相应频率,接下来就需要用51单片机发出相应的频率即可,主要方法就是使用定时器定时中断,将蜂鸣器对应I/O口来回取反就行了。下面我举个例子说明一下怎么确定一个频率对应的定时器的定时值。

例如标准音高A:频率f=440Hz,其对应的周期为:T=1/f=1/440=2272μs,那么单片机上对应蜂鸣器的I/O口来回取反的时间应为:t=T/2=2272/2=1136μs,也就是清零、置位在一个周期内完成.音符与节拍数的关系如表1所示。

表1音符与节拍数的关系

音符x--(全音符)x-(二分音符)X(四分音符)X(八分音符)X(十六分音符)x·(附点四分音符)

节拍数4拍2拍1拍1/2拍1/4拍1.5拍

音符

x·(附点八分音符)x·(附点十六分音符)000(三分休止符)00(二分休止符)0(四分休止符)0(八分休止符)

节拍数3/4拍3/8拍休止3拍休止2拍休止1拍休止1/2拍

2.5.2音乐节拍的产生

一般情况下,如果一首乐曲没有说明,一拍的时长大约400ms到500ms之间,我们可以通过软件延时的方法来延时这么长时间。

for(t1=0;t1for(t2=0;t2<8000;t2++);

通过改变t的值就可以唱出不同节拍的音乐。

3

安徽财经大学管理科学与工程学院本科毕业设计

表2所示为不同曲调下的1/4和1/8节拍的时间设定。

如果单片机要实现播放音乐,那么必须在程序设计中要考虑到节拍,节拍数和节拍码的对照表如表3所示。

表2各调节拍的时间设定

曲调值(1/8节

拍)调4/4调3/4调2/4

62ms94ms125ms

调4/4调3/4调2/4

125ms185ms250ms

DELAY

曲调值(1/4节拍)

DELAY

表3节拍数与节拍码的对照

节拍码1234568ACF

节拍数1/4拍2/4拍3/4拍1拍1.25拍1.5拍2拍2.25拍3拍3.75拍

节拍码1234568AC

节拍数1/8拍1/4拍3/8拍1/2拍5/8拍3/4拍1拍1.25拍1.5拍

3电子音乐闹钟系统详细设计

3.1系统功能方框图根据设计需求分析,系统主要包括以下几个模块:微处理器模块、单片机最小系统、数码管显示模块、按键模块以及扬声器发声模块,具体方框图如图3.1所示。

4

安徽财经大学管理科学与工程学院本科毕业设计

晶振

ATC51段码驱动

6位数码管

复位

位码驱动

按键

蜂鸣器

图3.1系统功能方框图

下面从硬件和软件两个方面对系统进行详细设计。

3.2硬件详细设计3.2.1ATC51单片机简介

ATC51是这几年我国非常流行的单片机,ATC51是一种高性能、低电压的CMOS单片机,它的片内包含4kbytes可重复擦写的FLASH只读程序存储器,同时还有128bytes的随机存取数据的存储器。由ATMEL公司开发生产,在8051、8751的基础上增强了许多特性。如时钟频率更高,运行速度更快。是嵌入式微控制器,与嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,功耗和成本下降,可靠性提高。ATC51是一种高效的微控制器,为很多嵌入式控制系统提供了质优价廉的方案。它可以满足多方面的性能需求。ATC51采用了高性能的处理器结构,指令执行时间较短。

5

安徽财经大学管理科学与工程学院本科毕业设计

P0口是开路型漏极双向输入输出口,也即数据、地址复用口。P1口可作输入口,因其自带有上拉电阻的双向输入输出口。P2口也是带有上拉电阻的双向输入输出口。P3口也是一个双功能口,当作为通用I/O口外,P3口还可以工作于专用功

图3.2.1ATC51单片机

能,P3口在输入方面多了一个缓冲器,P3口无须再加上拉电阻。其电源正负极分别接在40和20引脚上。

3.2.2晶振电路

晶振电路是构成单片机的最小系统,单片机必须在时钟的驱动下才能进行工作。单片机系统里都有晶振,在单片机里晶振的作用非常大,全称晶体振荡器。反相放大器的输入端为XTAL1,即19引脚,输出端为XTAL2,即18引脚。在XTAL1和XTAL2两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。晶振电路如图3.2.2所示。

6

安徽财经大学管理科学与工程学院本科毕业设计

图3.2.2晶振电路

3.2.3复位电路

一个单片机系统至少有单片机芯片、电源、晶体振荡器,还需要有能使单片机复位的电路。复位电路分上电复位和手动按键复位两种,电路如图3.2.3所示。

图3.2.3复位电路

3.2.4键盘电路的设计

键盘电路采用4个按键和上拉电阻实现对闹钟时间的设定。其分别接在单片机的P1^1、P1^2、P1^3、P1^4引脚上,如图3.2.4所示。

7

安徽财经大学管理科学与工程学院本科毕业设计

图3.2.4键盘输入电路

3.2.5显示电路

此为六个七段共阳数码管,1、2、3、4、5、6表示数码管位控制管脚,分别接在74HC138的15、14、13、12、11、10引脚上,实现对6位数码管位的选择;a、b、c、d、e、f、g,就是数码管的段码输入,分别接在单片机P0口的P0.0~P0.6引脚。显示电路如图3.2.5所示。

图3.2.5数码管显示电路

3.2.6显示驱动模块

74HC138是一款高速CMOS器件,适合内存地址解码或数据路由应用。可接受3位加权地址输入(A,B,C),在高性能存贮器系统中,这种译码器可提高译码效率。所以采用74HC138来驱动位码,段码由上拉电阻驱动。其三位地址输入1、2、3引脚分别接在单片机P2口的21、22、23引脚上。具体电路如图3.2.6所示。

8

安徽财经大学管理科学与工程学院本科毕业设计

图3.2.674HC138功能引脚图图3.2.7蜂鸣器发音电路

3.2.7发音电路模块

蜂鸣器是一种常用的电子器件,在很多的场合都有广泛的应用,一般用来发出报警或者提示的声音。在本系统中,利用蜂鸣器进行闹钟音乐的播放。其控制端一端接在P3口的P3.7引脚上,另一端接地。具体电路如图3.2.7所示。

3.3软件详细设计3.3.1主程序设计

主程序部分采用程序设计的模块化思想设计,模块化设计的优点是效率高,其模块相对,便于修改。在执行程序时,主程序只需要调用子程序就可完成相应的功能。主程序流程图如图3.3.1所示。

9

安徽财经大学管理科学与工程学院本科毕业设计

开始

初始化

闹铃判断

显示时间

键盘扫描图3.3.1主程序流程图

3.3.2定时器定时模块

电子音乐闹钟设计中主要使用定时器T0,利用中断进行时间的增加,进而实现计时功能。

其流程图如图3.3.2所示。

T0中断

闹铃时间到?N显示时间

Y

闹铃

按键扫描

重装计数值

中断返回

图3.3.2定时程序流程图

10

安徽财经大学管理科学与工程学院本科毕业设计

3.3.3闹钟模块

判定有没有到达闹钟设定时间是通过将闹钟设定时间与当前时间进行对比来确定是否进行闹铃。其程序流程图如图3.3.3所示。

主程序

闹铃时间到

闹铃音乐响起

显示时间

闹铃结束

图3.3.3闹钟程序流程图

3.3.4计时模块

计时函数部分,主要是通过单片机定时器中断进行的,当单片机产生一次中断,counter=20时,说明1秒时间到,然后把counter清0,把秒sec加1。以此类推,然后再依次判断分钟和小时。计时模块流程图如图3.3.4所示。

11

安徽财经大学管理科学与工程学院本科毕业设计

图3.3.4计时流程图

12

安徽财经大学管理科学与工程学院本科毕业设计

3.3.5键盘扫描模块

开始

键盘扫描

有无键按下?

Y

Key2键按键次数选择时分秒

N

Key3加,key4减调整时间

时间继续

图3.3.5键盘扫描流程图

此部分主要是通过判断counter在不同值时通过调用加1、减1子函数对时间和闹钟的时、分、秒进行设置。在闹钟设置时,按下key1时钟停止,进入闹钟设置模式,key2用来选择时、分、秒的设定,按一下设置秒、两下设置分、三下设置时,key3用来选择加,key4用来选择减,设定好了之后再次按下key1即可完成闹钟时间设定,时间正常走。

13

安徽财经大学管理科学与工程学院本科毕业设计

3.3.6播放音乐模块

当当前时间与所设的闹钟时间相等时,调用曲目,查找相应的音符,音符的高四位(即音频)装入T0,音符的低四位(即节拍)装入节拍单元。T0开始计数,从P3.7输出脉冲信号,播放音乐。音乐播放结束,返回主程序。

播放音乐流程图如图3.3.7所示。

开始

时间与闹钟相等

调入曲目,装入相应字符

查找音频装入T0,节拍装入节拍单元

T0计数,从P3.7输出脉冲信号

节拍单元是否为0

Y返回主程序图3.3.7播放音乐流程图

14

安徽财经大学管理科学与工程学院本科毕业设计

4系统调试

4.1软件介绍4.1.1PROTEUSISIS软件介绍

Proteus软件是英国Labcenter公司出版的EDA工具软件。目前,Proteus仿真系统支持的主流单片机有ARM7(LPC21xx)、8051/52系列、AVR系列等,它支持第三方软件开发、编译。Proteus主要由ISIS和ARES两部分组成,ISIS主要用于原理图设计及与电路原理图的交互仿真。Proteus的ISIS是一款专业的单片机软件仿真系统,ProteusISIS是Proteus软件的核心,具有高质量的原理图,良好的用户界面,自动走线,层次设计,总线支持等特性。该软件具有数字电路仿真、模拟电路仿真等,ISIS提供的ProteusVSM实现了混合式的SPICE电路仿真,他将高级图表应用,单片机仿真,第三方程序与调试环境有机结合,可以完成原理图设计、电路分析与仿真及单片机程序仿真、测试及验证。并且有各种虚拟仪器。

4.1.2KEILC51软件介绍

KeilC51是德国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效快速的特点。KEILC51软件提供了丰富的库函数和功能强大的集成开发调试工具,全windows界面。

4.2利用Proteus和Keil进行联合调式根据前面的硬件详细设计,利用Proteus构建硬件平台,具体原理图如4.2.1所示。在Keil开发环境中完成软件代码的编写。首先新建立工程,选择目标器件,再新建文件编写软件代码,对工程文件进行编译,得到二进制文件(*.hex)。最后将该二进制文件烧到单片机芯片内部。具体程序加载过程如图4.2.2所示。然后运行系统,进行功能仿真。仿真调试的过程比较慢,一般要经过调试、修改代码、再调试,直到达到预期目标为止。一般调试可采用分模块进行。

15

安徽财经大学管理科学与工程学院本科毕业设计

图4.2.1硬件原理图

图4.2.2程序加载窗口

16

安徽财经大学管理科学与工程学院本科毕业设计

5仿真结果

本设计为简易电子音乐闹钟,主要完成如下功能。

1.系统上电即开始计时,显示时间12:23:45,如果需要显示不同时间只用修改sec、min、hour即可,具体见程序。

2.四个按键用来控制闹钟,按下key1时钟停止,进入闹钟设置模式,key2用来选择时、分、秒的设定,按一下设置秒、两下设置分、三下设置时,key3用来选择加,key4用来选择减,设定好了之后再次按下key1即可完成闹钟时间设定,时间正常走。

3.当当前时间和设定时间一样时,闹钟开始播放歌曲“世上只有妈妈好”,播放完毕后继续运行,如果需要在此设定只用重复步骤2即可。

运行系统后,时间显示效果图如图5.2所示。

图5.2硬件仿真图

调整闹钟时间仿真效果图如图5.3所示。

17

安徽财经大学管理科学与工程学院本科毕业设计

图5.3调整后的时间

6结论

本课题设计了一个基于单片机控制的电子音乐闹钟。从硬件和软件2个方面分别对系统进行了详细设计。利用Proteus仿真软件搭建硬件平台对设计的系统进行了功能仿真。通过仿真效果,充分验证了系统设计的可行性,达到了系统设计的预期目标。仿真系统操作简单,运行较稳定。但系统功能还不够完善,需要改进的地方主要包括以下几点:

1、系统只能显示时间信息的时、分、秒,而且运行一段时间后,存在一定的误差,需要经常进行时间的校正。改进方法是采用专用的时钟芯片,如DS1302,不仅可以显示时、分、秒信息,还可以显示年、月、日、星期几等信息,而且时间误差较小,无需经常校正。

2、系统存储器内只存储了一手歌曲的相关数据,未能实现闹钟音乐的选择设置。改进方法是增加音乐歌曲的数目,如果数据较多,可考虑外扩存储器实现。

3、系统显示信息较少,因此采用的是数码管显示。如果增加更多的显示信息,可考虑采用液晶显示器。

18

安徽财经大学管理科学与工程学院本科毕业设计

参考文献

[1]潘永雄.新编单片机原理与应用.西安电子科技大学出版社,2002

[2]张友德,赵志英,涂时亮.单片机微型机原理应用与实验.复旦大学出版社,2000[3]周航慈、朱兆优、李跃忠.智能仪器原理与设计.北京航空航天大学出版社,2005[4]江秀汉.可编程序控制器原理及应用(第二版).西安电子科技大学出版社,2003[5]沈庆阳、郭庭吉.单片机实践与应用.清华大学出版社,2002年

[6]窦振中.单片机外围器件实用手册存储器分册.北京航空航天大学出版社,1998[7]单片机C语言程序设计实训100例,彭伟编著[8]高卫东,51单片机原理与实践(C语言版)[9]李建忠.单片机原理及运用.西安电子科技大学出版社,

2001

[10]吴金戎、沈庆阳.8051单片机实践与应用.清华大学出版社,2001[11]何立民.MCS51系列单片机应用系统设计.北京航空航天大学出版社,1999[12]李荣正、陈学军.PIC单片机实验教程.北京航空航天大学出版社,2006[13]张义和、陈敌北.例说8051.人民邮电出版社,2006

[14]ATS51,8-bitMicrocontrollerwith4KBIn-SystemProgrammableFlash[15]Intel.MicrocontrollerHandbook.1988

[16]C程序设计(第三版),谭浩强著,清华大学出版社

19

安徽财经大学管理科学与工程学院本科毕业设计

致谢

毕业设计终于接近尾声了,首先要感谢我的导师陈老师,他指导我各个模块的设计和论文写作的框架。

这次毕业设计及论文写作的时间不算很长,毕业设计是自己完成的,设计开始时就对任务进行了按时分工,每天都要按时完成任务,这样才能为顺利完成好毕业设计提供时间基准。由于毕业设计是我进行的设计,刚开始时,心里十分茫然,不知从何入手,通过陈老师的指导,在论文的写作过程中,我不仅对所学过的理论知识有了更深入的理解,而且我的操作能力也有了可喜的进步。

我认为理论知识无论学得再好再透,毕竟是抽象的,在没用于实践前是毫无意义可言的,而四年的学习中我所缺少的就是理论和实践的密切结合。毕业设计则恰恰像一场及时雨,让我通过亲身学习学会如何把理论知识应用于实践。给了我充分的锻炼机会。受益匪浅!

谢谢老师!

20

安徽财经大学管理科学与工程学院本科毕业设计

附录

//名称:简易电子音乐闹钟//版本:V1.0#include#include#define#define#define#definesbitsbitsbitsbit//

unsignedcharTimer0_H,Timer0_L,time;

FOSCN50

11059200

//N为定时时间,Nms

(65536-N*FOSC/12/1000)/256

(65536-N*FOSC/12/1000)%256

//蜂鸣器接口定义//数码管位选接口

TH1_RESTL1_RESspeaker=P3^7;BIT0BIT1BIT2

=P2^0;=P2^1;=P2^2;

unsignedcharsec=45,min=23,hour=12;//用来初始化系统时间

unsignedchartemp_sec=45,temp_min=23,temp_hour=12;//用来保存设定闹钟之前的时间

unsignedchartargetsec=0,targetmin=0,targethour=0;//闹钟目标时间unsignedintcounter=0;//定时器计数变量/****闹钟时间设定标志***1:设定秒2:设定分3:设定时

***********************/unsignedcharadjust_select=0;

21

安徽财经大学管理科学与工程学院本科毕业设计

//共阴数码管码表unsignedchar

codedseg_code[]={0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xa7,0xa2,0x86,0x8e};

unsignedunsignedunsignedunsignedunsignedunsigned

charcharcharcharcharchar

a[6]={0,0,0,0,0,0};//用来保存每一位分解的值dis_aa=0;key_flag=0;clock_flag=0;first_flag=0;

music_flag=0;//闹钟时间到播放音乐标志变量

unsignedcharcodeFREQH[]={

//低音

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//中音0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF};unsignedcharcode

FREQL[]={

//低音//高音//超高音

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,

0x77,

0xA2,

0xB6,

0xDA,

0xFA,

//高音0x16};

//超高音

//--------------------------------------//世上只有妈妈好,表中数据根据世上只有妈妈好乐谱简谱编写而等unsignedcharcode6,2,2,

5,2,1,

sszymmh[]={3,2,2,

5,2,2,

1,3,2,

6,2,1,

5,2,1,

//一个音符有三个数字。第一个为第几个音、中为第几个八度、最后一个为时长(以半拍为单位)。

6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,

22

安徽财经大学管理科学与工程学院本科毕业设计

6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0};//--------------------------------------

//-----半拍延时函数---------------------------------voiddelay(unsignedchart){

unsignedchart1;unsignedlongt2;

for(t1=0;t1//双重循环,共延时t个半拍

for(t2=0;t2<8000;t2++);//延时期间,可进入T0中断去发音300-500ms

TR0=0;}

//-------单音演奏函数-------------------------------voidsong(){

TH0=Timer0_H;TR0=1;delay(time);}

//定时器初始化函数voidTimer1_inital(){

TMOD=0x11;

//定时器0和定时器1都工作在模式1:16位TH1TL1TR1EA

=TH1_RES;=TL1_RES;=1;=1;

23

//关闭T0,停止发音

}

安徽财经大学管理科学与工程学院本科毕业设计

ET1

ET0=1;}

//数码管显示延时函数

voidDelayXus(unsignedintn){

unsignedint

m,j;

=1;

//开T0中断

for(m=0;m//数码管显示函数void{

for(dis_aa=0;dis_aa<6;dis_aa++)

{

P0=~dseg_code[a[dis_aa]];switch(dis_aa){

case5:BIT2=0;BIT1=0;BIT0=0;break;case4:BIT2=0;BIT1=0;BIT0=1;break;case3:BIT2=0;BIT1=1;BIT0=0;break;case2:BIT2=0;BIT1=1;BIT0=1;break;case1:BIT2=1;BIT1=0;BIT0=0;break;case0:BIT2=1;BIT1=0;BIT0=1;break;default:break;}

DelayXus(5);

BIT2=1;BIT1=1;BIT0=1;//必须加上用来消影,如

果不加则扫描乱的一塌糊涂

}

24

refresh()

安徽财经大学管理科学与工程学院本科毕业设计

}

//时间计算函数,用来求解时、分、秒每一位的值void{

a[0]=sec%10;

a[1]=sec/10;a[2]=min%10;a[3]=min/10;a[4]=hour%10;a[5]=hour/10;

}

//按键扫描函数,返回扫描结果unsignedchar{

unsignedcharkey;if(P1!=0xff){

DelayXus(5);if(P1!=0xff){key=P1;return}

return0xff;

noteveryexitpathreturnsavalue警告

}

else

return0xff;

}

25

calcuate_time()

key_scan()

key;

//没有实际意义,只是为了消除

安徽财经大学管理科学与工程学院本科毕业设计

//按键处理函数,调用按键扫描函数

void{

key_handle()

unsignedchartemp2=0;

P1

//temp1不要初始化成一个static静态变量=0xff;

_nop_();_nop_();temp2=key_scan();if((temp2|0xfd)==0xfd){

adjust_select++;if(adjust_select==4)adjust_select=0;while((P1|0xfd)==0xfd);

}

if((temp2|0xfb)==0xfb){

switch(adjust_select){case1:

sec++;break;

case2:min++;break;case3:default:}

while((P1|0xfb)==0xfb);}

26

hour++;break;break;

安徽财经大学管理科学与工程学院本科毕业设计

if((temp2|0xf7)==0xf7){

switch(adjust_select){case1:

sec--;break;

case2:min--;break;case3:default:}

while((P1|0xf7)==0xf7);}

targetsectargetmin

=sec;//保留目标时间值=min;hour--;break;break;

targethour=hour;

}

/*******暂时用处不大******/void{

for(dis_aa=0;dis_aa<6;dis_aa++)

{

P0=~dseg_code[a[dis_aa]];switch(dis_aa){

case5:BIT2=0;BIT1=0;BIT0=0;break;case4:BIT2=0;BIT1=0;BIT0=1;break;case3:BIT2=0;BIT1=1;BIT0=0;break;case2:BIT2=0;BIT1=1;BIT0=1;break;case1:BIT2=1;BIT1=0;BIT0=0;break;case0:BIT2=1;BIT1=0;BIT0=1;break;

27

refresh1()

安徽财经大学管理科学与工程学院本科毕业设计

default:break;}

DelayXus(1);

BIT2=1;BIT1=1;BIT0=1;//必须加上用来消

影,如果不加则扫描乱的一塌糊涂

}

}

//-----------主函数---------------------------voidmain(void){

unsignedchark,i=0;

time=1;PT0=1;PT1=0;

Timer1_inital();while(1)

{

if(P1!=0xff)

{

DelayXus(5);if(P1!=0xff){

if(P1==0xfe){

clock_flag++;if(clock_flag>=3)while(P1==0xfe);

28

clock_flag=0;

安徽财经大学管理科学与工程学院本科毕业设计

}

}}

calcuate_time();if(clock_flag==1){

if(first_flag==0){

temp_sec=sec;temp_min=min;temp_hour=hour;first_flag=1;}

key_handle();

}

elseif(clock_flag==2){secminhour

=temp_sec;=temp_min;=temp_hour;

clock_flag=0;first_flag=0;TR1=1;

}

if(clock_flag

//判断闹钟时间有没有到

{

if((sec==targetsec)&&(min==

targetmin)&&(hour==targethour))

{

29

==0)

安徽财经大学管理科学与工程学院本科毕业设计

music_flag=1;//准备播放音乐TR1=0;//暂时关闭时钟显示}}

if(music_flag==1)

{

while(time){

k=sszymmh[i]+7*sszymmh[i+1]-1;

Timer0_H=FREQH[k];

Timer0_L=FREQL[k];

time=sszymmh[i+2];

i+=3;song();

音符

refresh1();

}

TR1=1;}

}}

//发出一个

voidtimer0_int()interrupt1{

TR0=0;

speaker=!speaker;TH0=Timer0_H;

//T0中断程序,控制发音的音调

//先关闭T0//输出方波,发音//下次的中断时间

30

安徽财经大学管理科学与工程学院本科毕业设计

TL0=Timer0_L;//启动T0

TR0=1;timer1_int()interrupt3TH1

=TH1_RES;

TL1

=TL1_RES;

counter++;

if((clock_flag==0)||{

if(counter==20){

counter=0;sec++;if(sec==60){sec=0;min++;if(min==60){

min=0;hour++;if(hour==24){sec=0;

min

=0;

hour=0;}}}

31

==2))

}

void{

(clock_flag}

安徽财经大学管理科学与工程学院本科毕业设计

}}else

counter=0;refresh();

32

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务