音乐发生器.docx
- 文档编号:11545118
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:14
- 大小:177.31KB
音乐发生器.docx
《音乐发生器.docx》由会员分享,可在线阅读,更多相关《音乐发生器.docx(14页珍藏版)》请在冰豆网上搜索。
音乐发生器
目录
一、需求分析1
1.1课程设计题目1
1.2课程设计任务和要求1
1.3课程设计环境1
1.4实验资源配置1
二、概要设计2
2.1设计内容2
2.2电路原理框图2
2.3实验元件清单2
2.4音乐乐曲的音高和节拍3
三、详细设计4
3.1硬件设计4
3.1.1可编程定时/计数器82534
3.1.2可编程并行接口82555
3.1.3功放器件LM3866
3.1.4实验电路搭建7
3.2软件设计8
3.2.1程序流程图8
3.2.2参考程序清单9
四、测试与操作说明12
4.1测试与操作12
4.2操作13
五、课程设计总结与体会13
六、致谢13
一、需求分析
1.1课程设计题目
本课程设计题目为:
音乐发生器设计
1.2课程设计任务和要求
设计与制作一个音乐发生器
要求:
1.能演奏一首完整的歌曲,同组成员歌曲不得相同;2.在演奏歌曲时,同时伴有彩灯(LED)闪烁;3.能演奏3首以上歌曲,并采用界面对话框形式来选择演奏的歌曲。
任务:
1.进行音乐发生器硬件电路设计,画出电路原理图、PCB图或元器件布线图;
2.安装或焊接元器件;
3.进行音乐发生器程序设计(采用ASM或CPP语言);
4.系统联调,提交符合上述二种以上要求的系统设计。
1.3课程设计环境
1.PC兼容机
2.Windows操作系统
3.MFID多功能微机实验平台(含PCI总线驱动板)或多功能实训平台
4.MF2KI集成开发环境
5.面包板或外设功能模块板
6.安装或焊接工具
1.4实验资源配置
1.电源:
机内供电;
2.I/O端口地址:
8255A的4个端口地址分配为,PA口=300H,PB=301H,PC=302H,控制口=303H;8253的4个端口地址分配为,T0=304H,T1=305H,T2=306H,命令口=307H。
4DIP地址开关全部为ON。
3.元器件:
外设功能模块中包含74LS245,74LS08,功放级LM386A,LED8个,排阻1个,电阻和电容若干以及喇叭SPK。
4.软件资源:
MF集成开发环境与工具软件(Windows2000/98版)。
二、概要设计
2.1设计内容
利用开发实验平台和自制的音乐发生器模块板进行硬件连接,利用MF集成开发环境进行音乐发生器控制程序设计,调试,直至听到正常的乐曲。
当控制程序执行时便开始演奏歌曲,并于屏幕上显示歌曲名称。
另外歌曲演奏的过程中LED跟随闪亮,歌曲结束或者按任意键停止演奏,退出程序执行。
2.2电路原理框图
2.3实验元件清单
序号
元器件名称
型号
数量
1
芯片
(1)74LS45
1
(2)74LS138
1
(3)8255
1
(4)8253
1
(5)LM386
1
(5)74ls08
1
2
发光二极管
¢5
8
3
排阻
8*150n
1
4
电阻
(1)10k
3
(2)4.7K
2
10Ω1/8W
5
电容
470uf20v
2
6
嗽叭
0.58n
1
7
导线
1扎
2.4音乐乐曲的音高和节拍
音高是指每个音符发声的高低,即音符的频率。
节拍是指每个音符发声的长短,即音符持续的时间,也就是延时。
音符12345671234567ⅰ
频率131147165175196220247262294330349392440494523
表2.4—1音符-频率对照表
表2.4—2音符-延时对照表
音符
全音符
二分音符
四分音符
八分音符
时间
1760ms
880ms
440ms
220ms
倍数
32
16
8
4
三、详细设计
3.1硬件设计
3.1.1可编程定时/计数器8253
8253用来实现将频率信号送进喇叭SPK而发声。
8253是可编程的定时/计数器,它是24脚双列直插式芯片,+5V电源供电,每个芯片内部有3个独立的计数器(计数通道),每个计数器都有自己的时钟输入CLK、技术输出OUT和门控制信号GATE。
通过编程选择计数器和设置工作方式,计数器既可作计数器用,也可作定时器用,故称定时/计数器,记作T/C。
其引脚分布图见下图:
在实验中设置一个数组,用以存储要演奏的乐曲的频率段,程序运行时,边读取频率边计算送入8253的计数初值,接下来就可以将8253输出端OUT形成的频率段送入扬声器中来发出各种频率声音。
对于延时控制,将采用软件中设置延时数组来实现。
3.1.2可编程并行接口8255
实验中要跟踪乐曲演奏情况,这里我们借助于8255A数据口的传送数据的功能实时将LED闪亮的信息送入LED。
8255A是可编程并行接口,它具有两个8位(A口和B口)和两个4位(C口高/低4位)。
C口作为数据口输入输出时,是4位一起行动,A口和B口只作输入/输出的数据口用,它们是8位一起行动。
它是一个单+5V电源供电,40个引脚的双列直插式组件,其外部引线如图所示
设计中采用的是8255A芯片PB口的8位来传输的。
接着连接到74LS245芯片,借助74LS245将音乐信息发至8个LED(LED上还需要接限流电阻)。
3.1.3功放器件LM386
在电子电路中,信号得到放大后最终是要以一定功率大小输出给负载,因此输出级往往由功率放大电路组成,它给负载提供足够大的信号功率。
如图3.1.3—1所示。
本实验中的功放任务由LM386A来完成,其连接如图3.1.3—2所示。
LM386A是一种设计用于低压应用的电路。
增益内部设定为20以保持外部元件最少,但是在管脚1和管脚8之间增加外部电阻和电容可使增益提高,可高到200。
3.1.4实验电路搭建
图3.1.4音乐发生器电路图
按照电路图用电线连接所有元器件。
布局原则:
a、元器件在面包板上均匀分布;b、按从左到右的顺序依次布局输入、输出部分的元器件;c、使所用到的连接电线最少;d、地线和电源线分别接至面包板的上下边缘,电路中的接地和接电源部分皆由面包板边缘处接出。
3.2软件设计
3.2.1程序流程图
3.2.2参考程序清单
#include
#include
#include
#include
#ifdef__cplusplus
#define__CPPARGS...
#else
#define__CPPARGS
#endif
shortintnFreq[3][100]={
//美酒加咖啡
{
196,165,196,220,262,294,330,392,392,440,
330,294,262,330,294,294,330,392,330,294,
262,220,262,196,220,262,220,196,165,196,
220,262,196,196,165,196,220,262,294,330,
294,262,294,330,294,330,392,440,392,330,
294,262,294,294,330,392,330,294,262,220,
196,220,262,294,330,392,294,196,330,294,
262,262,294,330,392,294,196,330,294,262,0
},
//一分钱
{
392,523,440,523,392,330,392,294,330,392,
330,392,440,523,392,440,392,330,392,262,
330,294,330,294,262,294,330,440,392,330,
392,440,392,523,440,392,330,392,294,392,
294,330,294,262,0
},
//婚礼进行曲,频率为原来1/2
{
392,523,523,523,392,587,494,523,
392,523,698,698,659,587,523,494,523,587,
392,523,523,523,266,587,494,523,
392,523,659,784,659,523,494,587,659,523,
698,659,587,440,440,440,494,523,587,
698,659,587,440,440,440,494,523,523,0
}
};
shortintnTimeDelay[3][100]={
//美酒加咖啡延时,这里的8表示一拍
{
12,4,4,4,4,4,32,8,4,4,
4,4,4,4,32,12,4,8,8,4,
4,2,2,4,16,8,4,4,4,4,
4,4,32,8,4,4,8,8,4,2,
2,4,4,16,4,4,4,4,4,4,
4,4,32,12,4,8,8,4,4,4,
4,16,4,4,4,4,4,4,4,4,
32,4,4,4,4,4,4,4,4,32
},
//一分钱
{
8,8,4,4,8,4,4,4,4,16,
4,4,4,4,4,4,4,4,4,8,
4,16,4,4,4,4,16,4,4,
4,4,16,4,4,4,4,4,4,8,
4,4,4,4,16
},
//婚礼进行曲延时
{
8,6,2,12,8,6,2,12,
8,4,4,8,4,2,8,6,2,12,
8,6,2,12,8,6,2,12,
8,6,2,8,6,2,8,6,2,12,
8,4,4,8,8,8,6,2,12,
8,4,4,8,8,8,6,2,16
}
};
constunsignedlongCLK=1193180;//声明时钟频率
constunsignedcharINTR=0X1C;//声明中断号
shortint*pFreq;//声明音频指针
shortint*pTimeDelay;//声明延时指针
voidinterrupt(*oldhandler)(__CPPARGS);
voidinterrupthandler(__CPPARGS)
{
(*pTimeDelay)--;//延时点数减一
oldhandler();//调用原例程
}
intPlaying(void);
voidmain(void)
{
printf("nowplaymusic!
\n");
printf("strikeESCtoexit\n");
Playing();
}
intPlaying(void)
{
oldhandler=getvect(INTR);//保存原中断向量
setvect(INTR,handler);//装载新中断向量
outportb(0x303,0x90);
outportb(0x303,0x0c);
//置pc6=0禁止8253通道2的gate引脚<置PC5=0>
outportb(0x303,0x00);
//置pc0=0禁止74LS08
outportb(0x307,0xb6);
//初始化8253<选择计数器2,先写低,再写高,方式3方波发生器,二进制初值写入>
//这里默认播放第一首,可以调整下标换
pFreq=nFreq[0];//取歌曲的第一个音频
pTimeDelay=nTimeDelay[0];//取歌曲的第一个时延
while(*pFreq&&!
kbhit())
{
outportb(0x306,(unsignedchar)(CLK/*pFreq%256));
//先送低字节(CLK/*pFreq为要减的次数)
outportb(0x306,(unsignedchar)(CLK/*pFreq/256));
//再送高字节
//以上置8253通道2的计数初值
outportb(0x303,0x01);//<置PC0=1>
outportb(0x303,0x0d);
//<置PC6=1,既让定时器2开始工作>结果是扬声器打开开扬声器
while(*pTimeDelay){};//等待延时到
outportb(0x303,0x0c);//
outportb(0x303,0x00);//
pFreq++;//获取下一个音频
pTimeDelay++;//获取下一个延时
}//歌曲结束或按了任意键
outportb(0x303,0x0c);
outportb(0x303,0x00);//再次关闭扬声器
setvect(INTR,oldhandler);//恢复原中断向量
return0;
}
四、测试与操作说明
4.1测试与操作
1.准备元器件;
2.按照自己设计得到的电路图连线;
3.打开软件平台MF2KI内的音乐发生器运转程序(事先设计好的);
4.观察是否得到预期效果。
4.2操作
1.分析算法,画流程图;
2.设计编写程序;
3.通过测试,观察是否成功。
最后,将硬件连接和软件编程结合起来测试
五、课程设计总结与体会
六、致谢
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐 发生器