音乐提示定时器单片机课程设计.docx

上传人:b****2 文档编号:95080 上传时间:2023-04-28 格式:DOCX 页数:23 大小:144.04KB
下载 相关 举报
音乐提示定时器单片机课程设计.docx_第1页
第1页 / 共23页
音乐提示定时器单片机课程设计.docx_第2页
第2页 / 共23页
音乐提示定时器单片机课程设计.docx_第3页
第3页 / 共23页
音乐提示定时器单片机课程设计.docx_第4页
第4页 / 共23页
音乐提示定时器单片机课程设计.docx_第5页
第5页 / 共23页
音乐提示定时器单片机课程设计.docx_第6页
第6页 / 共23页
音乐提示定时器单片机课程设计.docx_第7页
第7页 / 共23页
音乐提示定时器单片机课程设计.docx_第8页
第8页 / 共23页
音乐提示定时器单片机课程设计.docx_第9页
第9页 / 共23页
音乐提示定时器单片机课程设计.docx_第10页
第10页 / 共23页
音乐提示定时器单片机课程设计.docx_第11页
第11页 / 共23页
音乐提示定时器单片机课程设计.docx_第12页
第12页 / 共23页
音乐提示定时器单片机课程设计.docx_第13页
第13页 / 共23页
音乐提示定时器单片机课程设计.docx_第14页
第14页 / 共23页
音乐提示定时器单片机课程设计.docx_第15页
第15页 / 共23页
音乐提示定时器单片机课程设计.docx_第16页
第16页 / 共23页
音乐提示定时器单片机课程设计.docx_第17页
第17页 / 共23页
音乐提示定时器单片机课程设计.docx_第18页
第18页 / 共23页
音乐提示定时器单片机课程设计.docx_第19页
第19页 / 共23页
音乐提示定时器单片机课程设计.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

音乐提示定时器单片机课程设计.docx

《音乐提示定时器单片机课程设计.docx》由会员分享,可在线阅读,更多相关《音乐提示定时器单片机课程设计.docx(23页珍藏版)》请在冰点文库上搜索。

音乐提示定时器单片机课程设计.docx

音乐提示定时器单片机课程设计

第1章课程设计的要求、目的

1.1课程设计的要求

音乐提示定时器要求通过设计4个按键设置现在想要倒数的时间:

K1--可调整倒数时间为1-60分钟,能够实现时间可调;K2—设置倒数计时时间为5分钟,显示为“0500”;K3—设置倒数计时时间为10分钟,显示为“1000”;K4—设置倒数计时时间为20分钟,显示为“2000”;一旦按键后则开始倒计时,当计时为0则演奏一曲音乐,而且可循环播放,可随时人为停止;内定倒数计时时间为5分钟,显示为0500。

1.2课程设计的目的

(1)加深对基础知识的理解,进一步熟悉和掌握单片机的结构及工作原理。

(2)掌握单片机的接口技术及相关外围芯片的外特性,控制方法。

明确原理图中所使用的元器件功能及在图中的作用,各器件的工作过程及顺序。

(3)通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。

(4)通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。

了解程序设计总体功能及结构,对各子模块的功能以及各子模块之间的关系有较详细的描述。

(5)通过完成一个包括电路设计和程序开发的完整过程,通过实际操作,将理论用于实践,提高对本课程的实际运用能力,在设计的过程中发现问题、解决问题,掌握更多的知识。

第2章总体设计方案

2.1总体方案的选择

本课题要求以单片机为核心设计一个音乐提示定时器,具备倒数计时、时间设置、音乐演奏等功能。

设计20分钟、10分钟、5分钟的设置开关或按键,例如20分钟,显示为“20.00”,内定倒数计时时间为5分钟,显示为05.00(开机状态)。

一旦按键后则开始倒计时,当计时为0则演奏一曲音乐,而且可循环播放,可随时停止。

根据题目要求,音乐定时系统由核心处理模块、数码管显示模块、音乐模块、及倒计时模块等组成。

通过对P2口的查询,实现不同时间的设定和调整,系统晶振为11.0592MHz,利用单片机的RESET管脚作为系统开关。

利用查询方式设定倒计时时间。

进行总体设计前需先设计出各子功能模块的程序,并进行调试,各子模块调试成功后,再用一定的连接方法把各子程序连接起来,再次进行调试,直至正确可以实现总体功能为止。

2.2总体方案的说明

通过计算某一音频周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用单片机定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O口反相,然后重复计时此半周期时间再对I/O口反相,这样就能在此I/O口上得到此频率的脉冲,再结合中断延时程序,程序中节拍控制是通过调用延时子程序DELAY的次数来实现,产生音乐。

利用P2.3、P2.4、P2.5管脚,对应开关K2、K3、K4,分别启动不同的倒计时程序5分钟、10分钟、20分钟。

通过查询方式对P3.2管脚进行查询,进入1到60分钟的时间调整程序。

P0引脚作为显示输出连至LED显示器,P2.0、P2.1、P2.2、P2.3为位选信号,控制不同位的数码管。

程序中使用定时器T0方式1来产生歌谱中各音符对应频率的音频脉冲,由P3.7通放大输出,,1拍为748ms。

确定了设计思路后,就可以具体设计了。

先编写程序,然后加入硬件进行调试。

第3章系统方框图与工作原理

3.1系统设计框图

3.2基本工作原理

音乐的产生主要是通过单片机的I/O口输出高低不同的脉冲信号来控制蜂鸣器发音。

要想产生音频脉冲信号,需要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用单片机定时器计时这个半个周期时间,每当计时到后就将输出脉冲的I/O口反相,然后重复计时此半周期时间再对I/O口反相,这样就能在此I/O口上得到此频率的脉冲。

通常,利用单片机的内部定时器0,工作在方式1下,改变计数初值TH0和TL0来产生不同频率。

对于音乐的节拍,每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍。

如果1拍为0.4S,1/4拍为0.1S,只要设定延迟时间就可求得节拍的时间。

假设1/4拍为1DELAY,那么1拍应为4DELAY,以此类推。

所以只要求得1/4拍的DELAY,其余的节拍就是它的倍数。

总而言之,一首乐曲是由音阶和节拍两大要素构成。

一首乐曲演奏的原理是:

不同音阶分别对应不同的频率,发出不同的音调,而节拍则控制发出音调时间的长短;若将乐曲的音调连续发出,并使其按相应的节拍变化,即可演奏一首乐曲。

根据这一特点,我们采用单片机辅以相应的接口来设计音乐播放器[3]。

第4章各单元硬件设计及说明

4.1单片机的选择

单片机/EA管脚始终接高电平,单片机复位方式采用按键电平触发复位,通过计算可知单片机频率为11.0592MHz时,计时误差最小,精度越高,因此内部时钟频率设为11.0592MHz。

ST89C51系列与MCS-51系列单片机相比,有两大优势:

第一,片内程序存储器采用闪速存储器,使程序的写入更方便;第二,提供了更小尺寸的芯片,使整个硬件电路的体积更小。

它以较小的体积、良好的性能价格比倍受青睐。

本次课程设计采用89C51单片机。

4.2复位电路

复位电路

根据应用的要求,复位操作有两种基本形式:

上电复位和上电或开关复位。

当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。

如果RST持续为高电平,单片机就处于循环复位状态。

上电复位要求接通电源后,自动实现复位操作。

电容C13和电阻R19对电源十5V来说构成微分电路。

上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用,不用图中电阻R19,也能达到上电复位的操作功能。

要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。

由于电容C13的充电和反相门的作用,使RST持续一段时间的高电平。

当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。

本系统的复位电路采用上电复位。

RET按键可以选择专门的复位按键,也可以选择轻触开关。

4.3晶振电路

 

晶振电路

单片机工作的时间基准是由时钟电路控制的。

在单片机的XTAL1和XTAL2两个管脚,接一只晶振及两只电容就构成了单片机的时钟电路。

电路中,电容器C14和C15对振荡频率有微调作用,通常的取值范围为30PF左右。

石英晶体选择12MHZ就可以。

本次设计应用的电压有+5V。

220V交流电源经变压器,整流,滤波后分别进入芯片7805,产生+5V,这些电源的具体应用情况如下:

+5V电源:

单片机及外围电路所用电源

+9V电源:

压电喇叭所用电源

4.4音乐播放电路

蜂鸣器有长声有短声两种,可以根据需要进行选择,通过软件编程控制。

在程序里可以设计不同的歌曲来通过播放器进行播放,所以,在这个设计里,是可以有不同的铃声的。

第5章器件说明

5.1单片机

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,

1.主要特性:

·与MCS-51兼容

·4K字节可编程闪烁存储器

.寿命:

1000写/擦循环

.数据保留时间:

10年

·全静态工作:

0Hz-24Hz

·三级程序存储器锁定

·128*8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

2.振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。

该反向放大器可以配置为片内振荡器。

石晶振荡和陶瓷振荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

3.芯片擦除:

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。

在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

5.2LED显示器

LED显示器

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

第6章软件设计与说明

6.1定时显示子程序

6.2系统软件设计方案的确定

根据设计要求,首先要确定软件设计方案,即确定该软件应该完成哪些功能;其次是规划这些功能需要分成多少个功能模块,以及每一个程序模块的具体任务是什么。

6.3音乐定时常数的确定

产生音乐通过单片机的I/O口输出高低不同的脉冲信号来控制蜂鸣器发音。

利用AT89C52单片机的内部定时器0,工作在方式1下,改变计数初值TH0和TL0来产生不同的频率。

若单片机采用12MHz晶振,要产生频率为587Hz的音频脉冲时,其音频脉冲信号的周期T=1/587=1703.577us,约1704us,半周期的时间852us,因此只要今计数器计数=852us/1us=852,在每计数852次时将I/O口反相,就可得C调中音Re。

计数脉冲值与频率的关系如下:

N=Fi/2/Fr

式中:

N—计数值

Fi—机器频率。

晶体振荡器为12MHz时,内部计时一次为1us,故其频率为1MHz

Fr—想要产生的频率

所以定时常数(计数值T)的求法:

T=65536-N=65536-Fi/2/Fr

例如,设Fi=1MHz,求低音Do(262Hz)、中音Do(523Hz)和高音Do(1046Hz)的计数初值。

解:

T=65536-N=65536-Fi/2/Fr=65536-500000/Fr

低音Do的T=65536-500000/262=63628

中音Do的T=65536-500000/523=64580

高音Do的T=65536-500000/1046=65058

C调各音符频率与计数值T的关系

音符

频率(Hz)

半周期(ms)

简谱码T值

定时值(H)

简谱码T值

定时值(D)

低1Do

262

1.90

F894H

62628

低2Re

294

1.70

F95CH

63835

低3Mi

330

1.51

FA1AH

64021

低4Fa

349

1.43

FA6AH

64103

低5So

392

1.28

FB00H

64260

低6La

440

1.14

FB8CH

64400

低7Si

494

1.01

FC0EH

64524

中1Do

523

0.95

FC4AH

64580

中2Re

587

0.85

FCAEH

64684

中3Mi

659

0.76

FD08H

64777

中4Fa

698

0.72

FD30H

64820

中5So

784

0.64

FD80H

64896

中6La

880

0.57

FDC6H

64966

中7Si

988

0.51

FE02H

65030

高1Do

1046

0.47

FE2AH

65058

高2Re

1175

0.42

FE5CH

65110

高3Mi

1318

0.38

FE84H

65157

高4Fa

1397

0.36

FE98H

65178

高5So

1568

0.32

FEC0H

65217

高6La

1760

0.28

FEE8H

65252

高7Si

1967

0.25

FF06H

65283

第7章调试步骤、结果、使用说明

P2.4接开关K1,P2.5接开关K2,P2.6接开关K3,P2.7口接开关K4,P1.7口接起动按钮K5,当按下K1,倒计时时间加一分钟,可选择1到60分钟的定时;按下K2,计时时间为5分钟;按下K3,计时时间为10分钟;按下K4,计时时间为20分钟;按下起动按钮K5,定时器开始计时,再次按下,停止计时。

同时利用P2.0、P2.1、P2.2、P2.3作为位选管脚,从P0口输出代码至LED显示器,设计消影功能和显示延时程序实现动态显示。

当计时结束时跳转到音乐产生子程序。

当需要音乐停止时,按下复位按钮STOP,音乐即停止,显示器显示内定的倒计时时间0500

 

第8章设计总结

学校每次课程设计都能让我全身心投入,废寝忘食也不为过,因为我始终觉得实践才能让我们成长。

同时还能学到很多专业知识,加深对课本内容的理解,虽然会遇到很多困难,却总能得到收获。

课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

如今电子行业已经慢慢取代手工业了,而单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。

因此作为电子信息工程专业的学生来说掌握单片机的开发技术是十分重要的。

我的题目是音乐提示定时器的设计,对于我们这些工科学生来说,这是一次小小的锻炼。

因为平时老师的细心教导,和自己也自学过单片机,所以这次课程设计还算简单。

但是这次课程设计我还是学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。

不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中发现了自己的不足之处,以及对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机C语言掌握得不够熟练等。

这次课程设计通过自己的努力,同学的帮助,还有老师的辛勤指导下,最终顺利完成了。

谢谢老师!

 

附录:

程序清单

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharpre_time;//时钟标志

uchartime,tz,tz1;//tz调整标志,tz调整所在位

charfen1,fen,miao1,miao;//时钟

ucharshu,ding;

ucharl;

sbitADDR0=P1^0;

sbitADDR1=P1^1;

sbitADDR2=P1^2;

sbitADDR3=P1^3;

sbitENLED1=P1^4;

 

sbitSPK=P1^2;

sbitk1=P3^2;

sbitk2=P3^3;

sbitk3=P3^4;

sbitk4=P3^5;

sbitdula=P2^6;//段锁存器

sbitwela=P2^7;//位锁存器

 

sbitk5=P2^0;

ucharcodeduanma[]=//段码列表(0-9)

{

0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90

};

ucharcodeweima[]=//位码列表(8个数码管)

{

0x80,0x40,0x20,0x10,

0x08,0x04,0x02,0x01

};

ucharcodesong[]={0X54,0XC4,0X12,0X32,0X34,0X52,0X52,0X52,0X52,0X42,0X32,0X34,

0XC1,0XC2,0X52,0XC2,0X12,0X32,0X34,0X11,0X12,0X31,0X12,0XC2,

0X78,0X72,0X52,0X52,0X42,0X32,0X42,0X52,0X11,0XC1,0XC4,0XC1,

0XC1,0XC1,0XC1,0X12,0X32,0X32,0X12,0X42,0X42,0X44,0XC2,0X12,

0X32,0X42,0X52,0X72,0X72,0X82,0X41,0X51,0X42,0X48,0X42,0X12,

0X3C,0X72,0X62,0X3C,0X72,0X62,0X3C,0X72,0X62,0x21,0x31,0x41,

0x51,0x61,0x71,0x81,0x91,0x61,0x71,0x81,0x91,0X3F,0X3F,0X54,

0XC2,0XC2,0X42,0XC2,0XC4,0X34,0X32,0X42,0X52,0XC2,0XC4,0XD2,

0XC2,0X12,0X22,0X38,0X12,0X22,0X32,0X42,0X48,0xFF};//

ucharyin[]={0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,

0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82,0xFD,0xC8,

0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x67,0xFE,0x85};

voidtimer0()interrupt3

{

TH1=yin[2*1];

TL1=yin[2*1+1];

SPK=!

SPK;

}

//  

//  

voiddelay187ms()

{

unsignedchari,j,k;

for(i=200;i>0;i--)

for(j=20;j>0;j--)

for(k=15;k>0;k--);

}

//  

//置对应音符频率数值

voidsing_song()

{

unsignedintdataj=0;

unsignedchardatai;

unsignedchardatak;

while(*(song+j)!

=0xFF)

{

k=*(song+j)&0x0F;

l=*(song+j)>>4;

TH1=yin[2*l];

TL1=yin[2*l+1];

TR1=1;

if((yin[2*l]==0xff)&&(yin[2*l+1]==0xff))

{

TR0=0;SPK=1;

}

for(i=k;i>0;--i)

{

delay187ms();

}

TR1=0;

j++;

}//

}//

//  

//  //延时函数

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}//

//  //时钟显示

voiddisplay(uintfen1,uintfen2,uintmiao2,uintmiao1)

{

P0=0xff;

wela=1;

P0=weima[3];

wela=0;

dula=1;

P0=duanma[fen1];

dula=0;

delay

(1);

P0=0xff;

wela=1;

P0=weima[2];

wela=0;

dula=1;

P0=duanma[fen2];

dula=0;

delay

(1);

P0=0xff;

wela=1;

P0=weima[1];

wela=0;

dula=1;

P0=duanma[miao2];

dula=0;

delay

(1);

P0=0xff;

wela=1;

P0=weima[0];

wela=0;

dula=1;

P0=duanma[miao1];

dula=0;

delay

(1);

TR0=0;

}

voidt0()interrupt1

{

TL0=(65536-50000)%256;

TH0=(65536-50000)/256;

shu++;

if(shu==20)

{

shu=0;

miao--;

if(miao==-1)

{

miao=9;

miao1--;

if(miao1==-1)

{

miao1=5;

fen--;

if(fen==-1)

{

fen=9;

fen1--;

if(fen1==-1)

{

fen1=5;

}

}

}

}

}

}

//主程序

voidmain()

{

shu=0;

TMOD=0X01;

TL0=(65536-50000)%256;

TH0=(65536-50000)/256;

ET0=1;//允许开T0定时器中断

ET1=1;

EA=1;//开总中断

TR0=0;//定时器0工作

///P3=0XFF;

//P2=0XFF;

//P1=0XFF;

//P0=0XFF;

miao=0;

miao1=0;

fen=5;

fen1=0;

ding=0;

while

(1)

{

display(fen1,fen,miao1,miao);

if(k1==0)

{

delay(20);

if(k1==0)

{

miao1=0;

miao=0;

fen++;

if(fen==10)

{

fen=0;

fen1++;

if(fen1==6)

{

fen1=0;

}

}

}

}

while(!

k1);

if(k2==0)

{

delay(20);

if(k2==0)

{

miao1=0;

miao=5;

f

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2