基于51单片机的简易音乐播放器Word文件下载.docx
《基于51单片机的简易音乐播放器Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的简易音乐播放器Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
三:
系统硬件设计
3.1系统框图
51单片机
AT89C51
按键键盘
音频输出
3.251单片机产生音符原理
MCS-5l单片机有两个定时器/计数器。
系统使用定时器/计数器0产生方波。
定时器/计数器l刖用于记录音符的时长,即按键持续的时问。
定时器/计数器0的工作方式是l,即为16位定时器/计数器。
16位定时器/计数器被赋予一个初值,并开始记数。
当记数溢出,产生中断后,中断服务程序将与蜂鸣器连接的引脚电平置反,并且对定时器/计数器再赋初值,重新开始记效。
之后产生中断,引脚电平再被置反,如此周而复始,在引脚上就能产生一个频率与定时初值有关的方波信号。
而定时初值与音符频率有关,相应频率的确定,可参照12平均律,相邻两个半音A和B的频率之间的关系为:
A=B122[1]。
定时器/计数器l的作用为记录音符的时长,工作方式为l,即16位定时器/计数器。
在12MHZ的晶体振荡器F,单片机的机器周期为l“S。
本系统中,定时器/计数器l以10ms的时长为l定时单位,记录音符持续了多少个定时单位,如此,使用一个unmgnedchar型变量既可以记录2.55s的时长,这在用于记录一般弹奏的音符时是足够的。
而若一个音符的时长超过2.55S,则程序将在数组该位记满时强制跳转,并复制此音符信息至教组下一位来记录该音符剩余的时长,实现一种。
无缝连接”。
如此以来,在存储空间允许的情况下,系统允许记录任意时长的音符。
音乐是由音符和时长组成,单片机将一连串音符和时长的时间序列以两组对应的敬组的形式保存起来,也就是保存了一段音乐[2]。
四系统软件设计
4.1单片机产生音符过程:
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这
样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。
就可在P1.0引脚上得到此频率的脉冲。
利用STC89C52的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式(如式2-1所示)是:
N=fi÷
2÷
fr
式中,N是计数值;
fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);
fr是想要产生的频率。
其计数初值T的求法如下:
T=65536-N=65536-fi÷
例如:
设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。
fr=65536-1000000÷
fr=65536-500000/fr
低音DO的T=65536-500000/262=63627
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1046=65059
4.2程序编写流程图
开始
P1.0=0
键盘扫描是否有键被按下?
并检测确定按键
执行输出电路,
读相应程序
进行放歌
五:
调试过程
5.1软件仿真调试
软件仿真调试主要是针对单片机部分进行调试。
在软件运行前,先确保电路中连线正确,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。
在这部分调试中主要通过目测,用来完成检测电路中是否存在断路或者短路情况等。
在确保软件仿真电路正常,无异常情况(断路或短路)方可进行软件运行,在本次设计中,主要检测单片机的程序功能是否正确在理论上编写的程序是否可以实现。
确保自己的电路板在理论上是可实现的。
5.2实物调试过程:
1.先确保电路板是否每条铜线支路都是导通的才能进行下一步调试
2.在检测好每条通路没有断路的的情况下还要排除短路的情况,因为在焊接时会有可能将焊锡丝掉到两根铜线之间。
3.将下好程序的单片机安装好后上电检测单片机的主要管脚电压值以确定单片机是否正常工作。
4.在所有上诉步骤都正确的情况下,要是功能为实现就要考虑软件编写是否正确。
5.3本次出现的一些问题以及解决方法
1.电路断线情况比较多,是由于腐蚀和转印的过程出现了一些问题
2.开始设计的时候在每个按键的之路上添加一个红色二极管作为指示功能,但未考虑到编写的程序是按键扫描过程是检测单片机引脚是否为低电平,当加了一个二极管的时候会产生一个管压降,导致引脚不能产生低电平。
所以该指示灯不能直接加到引脚处。
六:
体会:
通过从理论到实际实物的制作能够让我们结合自己所学去应用到
实际的电路设计中去。
让我们能够发现一些课堂中学习的不足然后结合实践巩固一些单片机的控制以及内部的一些功能使用;
比如对T0定时器以及外部中断的程序控制。
我们应该多通过实践来学习和巩固自己一些知识点。
七:
附录
7.1系统原理图:
7.2程序:
#include<
REG51.H>
#defineucharunsignedchar
sbitbeepIO=P3^7;
sbitkey_1=P1^0;
sbitkey_2=P1^1;
sbitkey_3=P1^2;
sbitkey_4=P1^3;
sbitkey_5=P1^4;
sbitkey_6=P1^5;
sbitkey_7=P1^6;
sbitkey_8=P1^7;
ucharm,n;
ucharcodeT[49][2]={{0,0},
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},
{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},
{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}
};
ucharcodemusic1[][2]={{0,4},
{27,4},{19,4},{19,4},{27,4},{26,4},{26,2},{27,2},{24,8},
{22,4},{17,4},{24,4},{22,4},{19,16},
{15,4},{12,4},{12,4},{15,4},{17,8},{19,8},
{26,6},{26,2},{26,4},{24,4},{24,4},{19,4},{19,8},
{27,4},{19,4},{19,4},{27,4},{26,4},{26,2},{27,2},{24,6},{24,2},
{15,4},{12,4},{12,4},{15,4},{17,8},{19,8},{19,6},{19,2},{19,4},{17,4},{14,4},{14,4},{14,4},{7,4},{12,24},
{0xFF,0xFF}};
ucharcodemusic2[][2]={{0,4},
{23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,16},{16,4},{19,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{19,4},{14,24},
{23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,24},{16,4},{19,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{19,4},{21,24},
{23,4},{26,4},{26,16},{26,4},{28,4},{26,4},{23,24},{21,4},{23,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{16,2},{19,2},{19,24},{0,20},
{26,4},{26,4},{28,4},{31,4},{30,4},{30,4},{28,4},{23,4},{21,4},{21,4},{23,16},{0,4},{23,4},{23,4},{26,4},{28,8},{28,12},{16,4},{23,4},{21,4},
{21,24},{23,4},{26,4},{26,4},{23,4},{26,8},{0,4},{31,8},{30,4},{28,4},{30,4},{23,8},{0,4},{28,4},{28,4},{30,4},{28,4},{26,4},{23,4},{21,8},{23,4},{21,4},{23,4},{26,16},
ucharcodemusic3[][2]={{0,4},
{16,12},{23,16},{21,4},{23,4},{21,4},{19,12},{0,8},{19,4},{19,4},{19,4},{18,4},{16,8},{14,4},{16,16},{0,16},