电子音乐闹钟的设计与仿真_第1页
电子音乐闹钟的设计与仿真_第2页
电子音乐闹钟的设计与仿真_第3页
电子音乐闹钟的设计与仿真_第4页
电子音乐闹钟的设计与仿真_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

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

2、系统设计是完全可行的。关键词:单片机;电子音乐闹钟;LED数码管;独立按键 ABSTRACTElectronic music alarm clock has a wide range of applications in our daily life. This topic has designed a based on single chip microcomputer control electronic music alarm clock, from two aspects of hardware and software of the system has carried on the

3、 detailed design. Hardware system mainly includes the SCM control module, display module, key module and music playback module. The AT89C51 single chip microcomputer module, display module adopts the simple and practical digital tube, music playback using speaker voice control. System is able to acc

4、urately display hours, minutes and seconds, through independent key implementation time adjustment and the alarm time Settings, can play a preset electronic music regularly. Software based on the modular programming ideas, development environment Keil C51. Finally using hardware emulation software P

5、roteus simulation platform building hardware, the system functional verification. The simulation results fully show system design is completely feasible.Key words: Single chip microcomputer; Electronic music alarm clock; LED digital tube; Separate button目 录 1 引言11.1 研究目的和意义11.2 本系统主要研究的内容12 方案的选择和论证

6、12.1 单片机型号的选择12.3 显示器的选择22.4 计时部分的选择22.5 单片机播放音乐原理32.5.1 音调的确定32.5.2 音乐节拍的产生33 电子音乐闹钟系统详细设计43.1 系统功能方框图43.2 硬件详细设计53.2.1 AT89C51 单片机简介53.2.2 晶振电路63.2.3 复位电路73.2.4 键盘电路的设计73.2.5 显示电路83.2.7 显示驱动模块83.2.8 发音电路模块93.3 软件详细设计93.3.1 主程序设计93.3.2 定时器定时模块103.3.3 闹钟模块113.3.4 计时模块113.3.5 键盘扫描模块133.3.6 播放音乐模块144

7、系统调试154.1 软件介绍154.1.1 PROTEUS ISIS 软件介绍154.1.2 KEIL C51 软件介绍154.2 利用Proteus和Keil进行联合调式155 仿真结果176 结论18参考文献19致 谢20附 录21 安徽财经大学管理科学与工程学院本科毕业设计1 引言1.1 研究目的和意义 目的:设计一个电子闹钟,该闹钟可由使用者自己校准时间并根据需要在规定的时间发出音乐提醒使用者,防止遗忘时间。意义:电子音乐闹钟在生活中很常见,有了它,使得我们忙碌的生活不在枯燥,也不用担心会错过什么重要的事。随着现在生活压力的增大,失眠现象已经很普遍,特别是当第二天有重要事情的时候,老是

8、怕睡过而导致人们睡不好,有了电子闹钟,我们再也不用担心这种事会发生了,而是能好好地睡到闹钟闹醒的那一刻,如果再加上那么一段美妙的音乐,这样,我们会伴随柔和的音乐而起床。所以,电子音乐闹钟给人们的生活带来了极大的方便。于是,研究这样一个电子音乐闹钟有着非常现实的意义。 1.2 本系统主要研究的内容本设计主要研究用proteus和keil协同仿真一个电子音乐闹钟,主要包括硬件电路详细设计和软件详细设计两方面。其中硬件电路部分可分为四个模块:键盘模块;显示模块;计时模块;音乐播放模块。软件部分则应做到程序的准确、简单、可读性强。最后通过硬软件的结合实现电子音乐闹钟的精确计时、闹钟设置和播放音乐功能。

9、2 方案的选择和论证2.1 单片机选择通过分析多种单片机,认为AT89C51 是比较适合做电子音乐闹钟的芯片,器件采用ATMEL 高密度非易失存储器制造技术制造,与MCS-51 指令集和输出管脚相兼容。单片机的可擦除只读存储器可以反复擦除1000次以上,其寿命较长,使用更方便。再者他的数据保留时间可达10年。AT89C51 是一种高效微控制器,是最好的选择。2.2 按键的选择方案一:矩阵式键盘。为了节省I/O口,通常将按键排列成矩阵形式。虽然电路连接复杂,但是提高了I/O口的利用率,在修改时钟或设置闹铃时间时可以直接从键盘输入,快捷、方便。如果选择此方案,软件编程较复杂,适用于需很多个按键的场

10、合。 方案二:独立式按键。独立式按键是直接用I/O口线构成单个按键电路,一个按键单独占用1根I/O线。虽然会给布线带来诸多不便,但程序设计简单,适合用于按键较少的场合。如果系统中的键较少,就可以使用独立式按键,因此,此方案适用于按键较少的情况。如果使用该方案,无论从硬件还是软件方面实现起来都比较方便,所以我选择方案二。2.3 显示器的选择 方案一:液晶显示器。此显示器体积小,便于携带;并且液晶显示器可视面积大。其缺点为此显示器的亮度和对比度不是很好,并且寿命有限,驱动电路复杂,使用起来更麻烦。 方案二:数码管显示器。数码管的驱动电路简单,并且在亮度、可视角度和刷新速率等方面,都更具优势。LED

11、寿命长,背光功耗低、更环保,它不含有害金属汞,免去了对人体对环境的损害; 第三、LED背光让显示器显得更轻薄,LED采用发光二极管,不需要复杂的光路设计,实现真正的光源平面化,所以显示器也能节省很多空间。如果选择了此方案,那么在夜间看时间的时候就非常方便。其缺点是耗电量较大。综合考虑,数码管使用起来较为方便,因此我选择用数码管做显示器。2.4 计时部分的选择DS1302时钟芯片,大可以实现计时功能,而且系统不怕掉电且时间精确。它采用备份电池供电,在系统断电时仍可以工作。实时时钟芯片的这些优点,使得它广泛应用于需要显示时间的场合,但这种芯片比较贵,况且,设计本系统目的是为了学习单片机程序的编写和

12、调试,因此采用了软件编程的方法来计时而没有采用价格较高的时钟芯片。2.5 单片机播放音乐原理一般情况下,用单片机蜂鸣器来演奏音乐基本都是单音频率,不像专用乐器那样能演奏多种音色的音乐。所以音调和节拍是该设计要了解的两个概念。音调表示了一个音符的频率有多高,节拍表示了一个音符能唱多久。2.5.1 音调的确定音调主要是通过频率来确定的,我们可以根据音调表查出各个音符所对应的相应频率,接下来就需要用51单片机发出相应的频率即可,主要方法就是使用定时器定时中断,将蜂鸣器对应I/O口来回取反就行了。下面我举个例子说明一下怎么确定一个频率对应的定时器的定时值。例如标准音高A : 频率f = 440 Hz,

13、 其对应的周期为:T = 1/ f = 1/440 =2272s ,那么单片机上对应蜂鸣器的I/O 口来回取反的时间应为: t = T/2 = 2272/2 = 1136 s ,也就是清零、置位在一个周期内完成. 音符与节拍数的关系如表1所示。表1 音符与节拍数的关系音符节拍数音符节拍数x-(全音符)4拍x·(附点八分音符)3/4拍x-(二分音符)2拍x·(附点十六分音符)3/8拍X(四分音符)1拍000(三分休止符)休止3拍X(八分音符)1/2拍00(二分休止符)休止2拍X(十六分音符)1/4拍0(四分休止符)休止1拍x·(附点四分音符)1.5拍 0(八分休止符

14、)休止1/2拍 2.5.2 音乐节拍的产生一般情况下,如果一首乐曲没有说明,一拍的时长大约400ms到500ms之间 ,我们可以通过软件延时的方法来延时这么长时间。 for(t1 = 0; t1 < t; t1+) for(t2 = 0; t2 < 8000; t2+); 通过改变t的值就可以唱出不同节拍的音乐。 表2所示为不同曲调下的1/4和1/8节拍的时间设定。如果单片机要实现播放音乐,那么必须在程序设计中要考虑到节拍,节拍数和节拍码的对照表如表3所示。表2 各调节拍的时间设定曲调值(1/8节拍)DELAY曲调值(1/4节拍)DELAY调4/462ms调4/4125ms调3/4

15、94ms调3/4185ms调2/4125ms调2/4250ms 表3 节拍数与节拍码的对照节拍码节拍数节拍码节拍数11/4拍11/8拍22/4拍21/4拍33/4拍33/8拍41拍41/2拍51.25拍55/8拍61.5拍63/4拍82拍81拍A2.25拍A1.25拍C3拍C1.5拍F3.75拍3 电子音乐闹钟系统详细设计3.1 系统功能方框图 根据设计需求分析,系统主要包括以下几个模块:微处理器模块、单片机最小系统、数码管显示模块、按键模块以及扬声器发声模块,具体方框图如图3.1所示。 AT89C51 复位 晶振6位数码管 段码驱动 位码驱动 按键 蜂鸣器图3.1 系统功能方框图下面从硬件和

16、软件两个方面对系统进行详细设计。3.2 硬件详细设计3.2.1 AT89C51 单片机简介 AT89C51是这几年我国非常流行的单片机, AT89C51是一种高性能、低电压的CMOS单片机,它的片内包含4k bytes可重复擦写的FLASH只读程序存储器,同时还有128 bytes的随机存取数据的存储器。由ATMEL公司开发生产,在8051、8751的基础上增强了许多特性。如时钟频率更高,运行速度更快。是嵌入式微控制器,与嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,功耗和成本下降,可靠性提高。AT89C51是一种高效的微控制器,为很多嵌入式控制系统提供了质优价廉的方案。它可以

17、满足多方面的性能需求。AT89C51 采用了高性能的处理器结构,指令执行时间较短。P0口是开路型漏极双向输入输出口,也即数据、地址复用口。P1口可作输入口,因其自带有上拉电阻的双向输入输出口。P2口也是带有上拉电阻的双向输入输出口。P3口也是一个双功能口,当作为通用I/O口外,P3口还可以工作于专用功图3.2.1 AT89C51单片机能,P3口在输入方面多了一个缓冲器,P3口无须再加上拉电阻。其电源正负极分别接在40和20引脚上。 3.2.2 晶振电路 晶振电路是构成单片机的最小系统,单片机必须在时钟的驱动下才能进行工作。单片机系统里都有晶振,在单片机里晶振的作用非常大,全称晶体振荡器。反相放

18、大器的输入端为XTAL1,即19引脚,输出端为XTAL2,即18引脚。在XTAL1和XTAL2两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。晶振电路如图3.2.2所示。 图3.2.2 晶振电路3.2.3 复位电路一个单片机系统至少有单片机芯片、电源、晶体振荡器,还需要有能使单片机复位的电路。复位电路分上电复位和手动按键复位两种,电路如图3.2.3所示。 图3.2.3 复位电路3.2.4 键盘电路的设计键盘电路采用4个独立按键和上拉电阻实现对闹钟时间的设定。其分别接在单片机的P11、P12、P13、P14引脚上,如图3.2.4所示。 图 3.2.4 键盘输入电路 3.2.5 显示电路此为

19、六个七段共阳数码管,1、2、3、4、5、6表示数码管位控制管脚,分别接在74HC138的15、14、13、12、11、10引脚上,实现对6位数码管位的选择;a、b、c、d、e、f、g,就是数码管的段码输入,分别接在单片机P0口的P0.0P0.6引脚。显示电路如图3.2.5所示。 图3.2.5 数码管显示电路3.2.6 显示驱动模块 74HC138是一款高速CMOS器件,适合内存地址解码或数据路由应用。可接受3位加权地址输入(A,B,C),在高性能存贮器系统中,这种译码器可提高译码效率。所以采用74HC138来驱动位码,段码由上拉电阻驱动。其三位地址输入1、2、3引脚分别接在单片机P2口的21、

20、22、23引脚上。具体电路如图3.2.6所示。 图3.2.6 74HC138功能引脚图 图3.2.7 蜂鸣器发音电路 3.2.7 发音电路模块 蜂鸣器是一种常用的电子器件,在很多的场合都有广泛的应用,一般用来发出报警或者提示的声音。在本系统中,利用蜂鸣器进行闹钟音乐的播放。其控制端一端接在P3口的P3.7引脚上,另一端接地。具体电路如图3.2.7所示。3.3 软件详细设计3.3.1 主程序设计主程序部分采用程序设计的模块化思想设计,模块化设计的优点是效率高,其模块相对独立,便于修改。在执行程序时,主程序只需要调用子程序就可完成相应的功能。主程序流程图如图3.3.1所示。 开始 初始化 闹铃判断

21、 显示时间 键盘扫描图3.3.1 主程序流程图3.3.2 定时器定时模块 电子音乐闹钟设计中主要使用定时器T0,利用中断进行时间的增加,进而实现计时功能。其流程图如图3.3.2所示。 T0中断 显示时间 按键扫描 重装计数值 闹铃时间到? 闹铃 中断返回YN 图3.3.2 定时程序流程图3.3.3 闹钟模块判定有没有到达闹钟设定时间是通过将闹钟设定时间与当前时间进行对比来确定是否进行闹铃。其程序流程图如图3.3.3所示。 主程序 闹铃时间到闹铃音乐响起闹铃结束显示时间 图3.3.3 闹钟程序流程图3.3.4 计时模块计时函数部分,主要是通过单片机定时器中断进行的,当单片机产生一次中断,coun

22、ter=20时,说明1秒时间到,然后把counter清0 ,把秒sec加1。以此类推,然后再依次判断分钟和小时。计时模块流程图如图3.3.4所示。 图3.3.4计时流程图3.3.5 键盘扫描模块 键盘扫描Key3加,key4减调整时间有无键按下?Key2键按键次数选择时分秒NY时间继续开始图3.3.5 键盘扫描流程图此部分主要是通过判断counter 在不同值时通过调用加1、减1子函数对时间和闹钟的时、分、秒进行设置。在闹钟设置时,按下key1时钟停止,进入闹钟设置模式,key2用来选择时、分、秒的设定,按一下设置秒、两下设置分、三下设置时,key3用来选择加,key4用来选择减,设定好了之后

23、再次按下key1即可完成闹钟时间设定,时间正常走。3.3.6 播放音乐模块当当前时间与所设的闹钟时间相等时,调用曲目,查找相应的音符,音符的高四位(即音频)装入T0,音符的低四位(即节拍)装入节拍单元。T0开始计数,从P3.7输出脉冲信号,播放音乐。音乐播放结束,返回主程序。播放音乐流程图如图3.3.7所示。 开始 时间与闹钟相等 调入曲目,装入相应字符 查找音频装入T0,节拍装入节拍单元T0计数,从P3.7输出脉冲信号节拍单元是否为0返回主程序 Y图3.3.7 播放音乐流程图4 系统调试4.1 软件介绍4.1.1 PROTEUS ISIS 软件介绍Proteus软件是英国Labcenter

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

25、试环境有机结合,可以完成原理图设计、电路分析与仿真及单片机程序仿真、测试及验证。并且有各种虚拟仪器。4.1.2 KEIL C51 软件介绍 Keil C51是德国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效快速的特点。KEILC51软件提供了丰富的库函数和功能强大的集成开发调试工具,全windows界面。4.2 利用Proteus和Keil进行联合调式根据前面的硬件详细设计,利用Proteus构建硬件平台,具体原理图如4.2.1所示。在Keil开发环境中完成软件代码的编

26、写。首先新建立工程,选择目标器件,再新建文件编写软件代码,对工程文件进行编译,得到二进制文件(*.hex)。最后将该二进制文件烧到单片机芯片内部。具体程序加载过程如图4.2.2所示。然后运行系统,进行功能仿真。仿真调试的过程比较慢,一般要经过调试、修改代码、再调试,直到达到预期目标为止。一般调试可采用分模块进行。图4.2.1 硬件原理图 图4.2.2 程序加载窗口5 仿真结果本设计为简易电子音乐闹钟,主要完成如下功能。 1.系统上电即开始计时,显示时间12:23:45,如果需要显示不同时间只用修改sec、min、hour即可,具体见程序。2.四个独立按键用来控制闹钟,按下key1时钟停止,进入

27、闹钟设置模式,key2用来选择时、分、秒的设定,按一下设置秒、两下设置分、三下设置时,key3用来选择加,key4用来选择减,设定好了之后再次按下key1即可完成闹钟时间设定,时间正常走。3.当当前时间和设定时间一样时,闹钟开始播放歌曲“世上只有妈妈好”,播放完毕后继续运行,如果需要在此设定只用重复步骤2即可。 运行系统后,时间显示效果图如图5.2所示。 图5.2 硬件仿真图调整闹钟时间仿真效果图如图5.3所示。 图5.3 调整后的时间6 结论本课题设计了一个基于单片机控制的电子音乐闹钟。从硬件和软件2个方面分别对系统进行了详细设计。利用Proteus仿真软件搭建硬件平台对设计的系统进行了功能

28、仿真。通过仿真效果,充分验证了系统设计的可行性,达到了系统设计的预期目标。仿真系统操作简单,运行较稳定。但系统功能还不够完善,需要改进的地方主要包括以下几点:1、系统只能显示时间信息的时、分、秒,而且运行一段时间后,存在一定的误差,需要经常进行时间的校正。改进方法是采用专用的时钟芯片,如DS1302,不仅可以显示时、分、秒信息,还可以显示年、月、日、星期几等信息,而且时间误差较小,无需经常校正。2、系统存储器内只存储了一手歌曲的相关数据,未能实现闹钟音乐的选择设置。改进方法是增加音乐歌曲的数目,如果数据较多,可考虑外扩存储器实现。3、系统显示信息较少,因此采用的是数码管显示。如果增加更多的显示

29、信息,可考虑采用液晶显示器。参考文献1 潘永雄.新编单片机原理与应用. 西安电子科技大学出版社,20022 张友德,赵志英,涂时亮.单片机微型机原理应用与实验. 复旦大学出版社,20003 周航慈、朱兆优、李跃忠.智能仪器原理与设计. 北京航空航天大学出版社,20054 江秀汉.可编程序控制器原理及应用(第二版).西安电子科技大学出版社,20035 沈庆阳、郭庭吉.单片机实践与应用.清华大学出版社,2002年6 窦振中.单片机外围器件实用手册存储器分册.北京航空航天大学出版社,19987 单片机C语言程序设计实训100例,彭伟 编著8 高卫东 ,51单片机原理与实践 (C语言版)9 李建忠.单

30、片机原理及运用. 西安电子科技大学出版社, 2001 10 吴金戎、沈庆阳.8051单片机实践与应用.清华大学出版社 ,2001 11 何立民.MCS51系列单片机应用系统设计.北京航空航天大学出版社, 1999 12 李荣正、陈学军.PIC单片机实验教程. 北京航空航天大学出版社,200613 张义和、陈敌北.例说8051.人民邮电出版社,200614 AT89S51,8-bit Microcontroller with 4KB In-System Programmable Flash 15 Intel. Microcontroller Handbook.198816 C程序设计(第三版),

31、谭浩强 著,清华大学出版社 致 谢毕业设计终于接近尾声了,首先要感谢我的导师陈老师,他指导我各个模块的设计和论文写作的框架。这次毕业设计及论文写作的时间不算很长,毕业设计是自己独立完成的,设计开始时就对任务进行了按时分工,每天都要按时完成任务,这样才能为顺利完成好毕业设计提供时间基准。由于毕业设计是我独立进行的设计,刚开始时,心里十分茫然,不知从何入手,通过陈老师的指导,在论文的写作过程中,我不仅对所学过的理论知识有了更深入的理解,而且我的操作能力也有了可喜的进步。我认为理论知识无论学得再好再透,毕竟是抽象的,在没用于实践前是毫无意义可言的,而四年的学习中我所缺少的就是理论和实践的密切结合。毕

32、业设计则恰恰像一场及时雨,让我通过亲身学习学会如何把理论知识应用于实践。给了我充分的锻炼机会。受益匪浅!谢谢老师!附 录/ 名称: 简易电子音乐闹钟/ 版本: V1.0#include <reg52.h>#include<intrins.h>#define FOSC 11059200#define N 50/N为定时时间,Nms#define TH1_RES (65536 - N*FOSC/12/1000)/256#define TL1_RES (65536 - N*FOSC/12/1000)%256sbit speaker = P37; /蜂鸣器接口定义sbit BI

33、T0 = P20; /数码管位选接口sbit BIT1 = P21;sbit BIT2 = P22;/unsigned char Timer0_H, Timer0_L, time;unsigned char sec = 45,min = 23,hour = 12; /用来初始化系统时间unsigned char temp_sec = 45,temp_min = 23,temp_hour = 12;/用来保存设定闹钟之前的时间unsigned char targetsec = 0,targetmin = 0,targethour = 0;/闹钟目标时间unsigned int counter =

34、 0;/定时器计数变量/*闹钟时间设定标志* 1: 设定秒2:设定分3:设定时*/unsigned char adjust_select = 0; /共阴数码管码表unsigned char code dseg_code=0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xa7,0xa2,0x86,0x8e;unsigned char a6=0,0,0,0,0,0;/用来保存每一位分解的值unsigned char dis_aa = 0;unsigned char key_flag = 0;unsigned char

35、 clock_flag = 0;unsigned char first_flag = 0;unsigned char music_flag = 0;/闹钟时间到播放音乐标志变量unsigned char code FREQH = 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; /超高音 u

36、nsigned char code 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; /超高音 /-/世上只有妈妈好 ,表中数据根据世上只有妈妈好乐谱简谱编写而等 unsigned char code sszymmh = 6, 2, 2, 5, 2, 1, 3, 2, 2, 5,

37、 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,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,

38、5, 1, 6, 0, 0, 0;/-/-半拍延时函数-void delay(unsigned char t) unsigned char t1; unsigned long t2; for(t1 = 0; t1 < t; t1+) /双重循环, 共延时t个半拍 for(t2 = 0; t2 < 8000; t2+); /延时期间, 可进入T0中断去发音 300-500ms TR0 = 0; /关闭T0, 停止发音 /-单音演奏函数-void song() TH0 = Timer0_H; TR0 = 1; delay(time); /定时器初始化函数void Timer1_init

39、al() TMOD = 0x11; /定时器0和定时器1都工作在模式1:16位TH1 = TH1_RES;TL1 = TL1_RES;TR1 = 1;EA = 1;ET1 = 1; ET0 = 1; /开T0中断/数码管显示延时函数 void DelayXus(unsigned int n) unsigned int m,j; for(m=0;m<n;m+) for(j=0;j<120;j+); /数码管显示函数void refresh() for(dis_aa=0;dis_aa<6;dis_aa+) P0 = dseg_codeadis_aa;switch(dis_aa)

40、case 5: BIT2=0;BIT1=0;BIT0=0;break; case 4: BIT2=0;BIT1=0;BIT0=1;break; case 3: BIT2=0;BIT1=1;BIT0=0;break; case 2: BIT2=0;BIT1=1;BIT0=1;break; case 1: BIT2=1;BIT1=0;BIT0=0;break; case 0: BIT2=1;BIT1=0;BIT0=1;break; default:break;DelayXus(5);BIT2=1;BIT1=1;BIT0=1;/必须加上用来消影,如果不加则扫描乱的一塌糊涂 /时间计算函数,用来求解时

41、、分、秒每一位的值void calcuate_time() a0 = sec%10;a1 = sec/10;a2 = min%10;a3 = min/10;a4 = hour%10;a5 = hour/10;/按键扫描函数,返回扫描结果unsigned char key_scan() unsigned char key; if(P1 != 0xff) DelayXus(5); if(P1 != 0xff) key = P1; return key; return 0xff; /没有实际意义,只是为了消除not every exit path returns a value警告 else ret

42、urn 0xff;/按键处理函数,调用按键扫描函数void key_handle() unsigned char temp2 = 0; /temp1不要初始化成一个static静态变量P1 = 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) case 1: sec+;

43、 break; case 2: min+; break; case 3: hour+;break; default: break; while(P1|0xfb) = 0xfb); if(temp2|0xf7) = 0xf7) switch(adjust_select) case 1: sec-; break; case 2: min-; break; case 3: hour-;break; default: break; while(P1|0xf7) = 0xf7); targetsec = sec; / 保留目标时间值 targetmin = min; targethour = hour; /* 暂时用处不大 */void refresh1() for(dis_aa=0;dis_aa<6;dis_aa+) P0 = dseg_codeadis_aa;switch(dis_aa) case 5: BIT2=0;BIT1=0;BIT0=0;break; case 4:

温馨提示

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

评论

0/150

提交评论