for(t2=0;t2<8000;t2++);
通过改变t的值就可以唱出不同节拍的音乐。
表2所示为不同曲调下的1/4和1/8节拍的时间设定。
如果单片机要实现播放音乐,那么必须在程序设计中要考虑到节拍,节拍数和节拍码的对照表如表3所示。
表2各调节拍的时间设定
曲调值(1/8节拍)
DELAY
曲调值(1/4节拍)
DELAY
调4/4
62ms
调4/4
125ms
调3/4
94ms
调3/4
185ms
调2/4
125ms
调2/4
250ms
表3节拍数与节拍码的对照
节拍码
节拍数
节拍码
节拍数
1
1/4拍
1
1/8拍
2
2/4拍
2
1/4拍
3
3/4拍
3
3/8拍
4
1拍
4
1/2拍
5
1.25拍
5
5/8拍
6
1.5拍
6
3/4拍
8
2拍
8
1拍
A
2.25拍
A
1.25拍
C
3拍
C
1.5拍
F
3.75拍
3电子音乐闹钟系统详细设计
3.1系统功能方框图
根据设计需求分析,系统主要包括以下几个模块:
微处理器模块、单片机最小系统、数码管显示模块、按键模块以及扬声器发声模块,具体方框图如图3.1所示。
图3.1系统功能方框图
下面从硬件和软件两个方面对系统进行详细设计。
3.2硬件详细设计
3.2.1AT89C51单片机简介
AT89C51是这几年我国非常流行的单片机,AT89C51是一种高性能、低电压的CMOS单片机,它的片内包含4kbytes可重复擦写的FLASH只读程序存储器,同时还有128bytes的随机存取数据的存储器。
由ATMEL公司开发生产,在8051、8751的基础上增强了许多特性。
如时钟频率更高,运行速度更快。
是嵌入式微控制器,与嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,功耗和成本下降,可靠性提高。
AT89C51是一种高效的微控制器,为很多嵌入式控制系统提供了质优价廉的方案。
它可以满足多方面的性能需求。
AT89C51采用了高性能的处理器结构,指令执行时间较短。
P0口是开路型漏极双向输入输出口,也即数据、地址复用口。
P1口可作输入口,因其自带有上拉电阻的双向输入输出口。
P2口也是带有上拉电阻的双向输入输出口。
P3口也是一个双功能口,当作为通用I/O口外,P3口还可以工作于专用功
图3.2.1AT89C51单片机
能,P3口在输入方面多了一个缓冲器,P3口无须再加上拉电阻。
其电源正负极分别接在40和20引脚上。
3.2.2晶振电路
晶振电路是构成单片机的最小系统,单片机必须在时钟的驱动下才能进行工作。
单片机系统里都有晶振,在单片机里晶振的作用非常大,全称晶体振荡器。
反相放大器的输入端为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个独立按键和上拉电阻实现对闹钟时间的设定。
其分别接在单片机的P1^1、P1^2、P1^3、P1^4引脚上,如图3.2.4所示。
图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所示。
图3.2.674HC138功能引脚图图3.2.7蜂鸣器发音电路
3.2.7发音电路模块
蜂鸣器是一种常用的电子器件,在很多的场合都有广泛的应用,一般用来发出报警或者提示的声音。
在本系统中,利用蜂鸣器进行闹钟音乐的播放。
其控制端一端接在P3口的P3.7引脚上,另一端接地。
具体电路如图3.2.7所示。
3.3软件详细设计
3.3.1主程序设计
主程序部分采用程序设计的模块化思想设计,模块化设计的优点是效率高,其模块相对独立,便于修改。
在执行程序时,主程序只需要调用子程序就可完成相应的功能。
主程序流程图如图3.3.1所示。
图3.3.1主程序流程图
3.3.2定时器定时模块
电子音乐闹钟设计中主要使用定时器T0,利用中断进行时间的增加,进而实现计时功能。
其流程图如图3.3.2所示。
图3.3.2定时程序流程图
3.3.3闹钟模块
判定有没有到达闹钟设定时间是通过将闹钟设定时间与当前时间进行对比来确定是否进行闹铃。
其程序流程图如图3.3.3所示。
图3.3.3闹钟程序流程图
3.3.4计时模块
计时函数部分,主要是通过单片机定时器中断进行的,当单片机产生一次中断,counter=20时,说明1秒时间到,然后把counter清0,把秒sec加1。
以此类推,然后再依次判断分钟和小时。
计时模块流程图如图3.3.4所示。
图3.3.4计时流程图
3.3.5键盘扫描模块
图3.3.5键盘扫描流程图
此部分主要是通过判断counter在不同值时通过调用加1、减1子函数对时间和闹钟的时、分、秒进行设置。
在闹钟设置时,按下key1时钟停止,进入闹钟设置模式,key2用来选择时、分、秒的设定,按一下设置秒、两下设置分、三下设置时,key3用来选择加,key4用来选择减,设定好了之后再次按下key1即可完成闹钟时间设定,时间正常走。
3.3.6播放音乐模块
当当前时间与所设的闹钟时间相等时,调用曲目,查找相应的音符,音符的高四位(即音频)装入T0,音符的低四位(即节拍)装入节拍单元。
T0开始计数,从P3.7输出脉冲信号,播放音乐。
音乐播放结束,返回主程序。
播放音乐流程图如图3.3.7所示。
Y
图3.3.7播放音乐流程图
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所示。
然后运行系统,进行功能仿真。
仿真调试的过程比较慢,一般要经过调试、修改代码、再调试,直到达到预期目标为止。
一般调试可采用分模块进行。
图4.2.1硬件原理图
图4.2.2程序加载窗口
5仿真结果
本设计为简易电子音乐闹钟,主要完成如下功能。
1.系统上电即开始计时,显示时间12:
23:
45,如果需要显示不同时间只用修改sec、min、hour即可,具体见程序。
2.四个独立按键用来控制闹钟,按下key1时钟停止,进入闹钟设置模式,key2用来选择时、分、秒的设定,按一下设置秒、两下设置分、三下设置时,key3用来选择加,key4用来选择减,设定好了之后再次按下key1即可完成闹钟时间设定,时间正常走。
3.当当前时间和设定时间一样时,闹钟开始播放歌曲“世上只有妈妈好”,播放完毕后继续运行,如果需要在此设定只用重复步骤2即可。
运行系统后,时间显示效果图如图5.2所示。
图5.2硬件仿真图
调整闹钟时间仿真效果图如图5.3所示。
图5.3调整后的时间
6结论
本课题设计了一个基于单片机控制的电子音乐闹钟。
从硬件和软件2个方面分别对系统进行了详细设计。
利用Proteus仿真软件搭建硬件平台对设计的系统进行了功能仿真。
通过仿真效果,充分验证了系统设计的可行性,达到了系统设计的预期目标。
仿真系统操作简单,运行较稳定。
但系统功能还不够完善,需要改进的地方主要包括以下几点:
1、系统只能显示时间信息的时、分、秒,而且运行一段时间后,存在一定的误差,需要经常进行时间的校正。
改进方法是采用专用的时钟芯片,如DS1302,不仅可以显示时、分、秒信息,还可以显示年、月、日、星期几等信息,而且时间误差较小,无需经常校正。
2、系统存储器内只存储了一手歌曲的相关数据,未能实现闹钟音乐的选择设置。
改进方法是增加音乐歌曲的数目,如果数据较多,可考虑外扩存储器实现。
3、系统显示信息较少,因此采用的是数码管显示。
如果增加更多的显示信息,可考虑采用液晶显示器。
参考文献
[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]AT89S51,8-bitMicrocontrollerwith4KBIn-SystemProgrammableFlash
[15]Intel.MicrocontrollerHandbook.1988
[16]C程序设计(第三版),谭浩强著,清华大学出版社
致谢
毕业设计终于接近尾声了,首先要感谢我的导师陈老师,他指导我各个模块的设计和论文写作的框架。
这次毕业设计及论文写作的时间不算很长,毕业设计是自己独立完成的,设计开始时就对任务进行了按时分工,每天都要按时完成任务,这样才能为顺利完成好毕业设计提供时间基准。
由于毕业设计是我独立进行的设计,刚开始时,心里十分茫然,不知从何入手,通过陈老师的指导,在论文的写作过程中,我不仅对所学过的理论知识有了更深入的理解,而且我的操作能力也有了可喜的进步。
我认为理论知识无论学得再好再透,毕竟是抽象的,在没用于实践前是毫无意义可言的,而四年的学习中我所缺少的就是理论和实践的密切结合。
毕业设计则恰恰像一场及时雨,让我通过亲身学习学会如何把理论知识应用于实践。
给了我充分的锻炼机会。
受益匪浅!
谢谢老师!
附录
//名称:
简易电子音乐闹钟
//版本:
V1.0
#include
#include
#defineFOSC11059200
#defineN50//N为定时时间,Nms
#defineTH1_RES(65536-N*FOSC/12/1000)/256
#defineTL1_RES(65536-N*FOSC/12/1000)%256
sbitspeaker=P3^7;//蜂鸣器接口定义
sbitBIT0=P2^0;//数码管位选接口
sbitBIT1=P2^1;
sbitBIT2=P2^2;
//
unsignedcharTimer0_H,Timer0_L,time;
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;
//共阴数码管码表
u