1、音乐发生器目录一、需求分析 11. 1 课程设计题目 11. 2 课程设计任务和要求 11. 3 课程设计环境 11. 4 实验资源配置 1二、概要设计 22. 1 设计内容 22. 2 电路原理框图 22. 3 实验元件清单 22. 4 音乐乐曲的音高和节拍 3三、详细设计 43. 1 硬件设计 43.1.1 可编程定时/计数器8253 43.1.2可编程并行接口8255 53.1.3功放器件LM386 63.1.4实验电路搭建 73. 2 软件设计 83.2.1程序流程图 83.2.2参考程序清单 9四、测试与操作说明 124. 1测试与操作 124. 2操作 13五、课程设计总结与体会
2、13六、致谢 13一、需求分析1. 1 课程设计题目本课程设计题目为:音乐发生器设计1. 2 课程设计任务和要求 设计与制作一个音乐发生器要求:1能演奏一首完整的歌曲,同组成员歌曲不得相同;2在演奏歌曲时,同时伴有彩灯(LED)闪烁;3能演奏3首以上歌曲,并采用界面对话框形式来选择演奏的歌曲。任务:1进行音乐发生器硬件电路设计,画出电路原理图、PCB图或元器件布线图;2安装或焊接元器件;3进行音乐发生器程序设计(采用ASM或CPP语言);4系统联调,提交符合上述二种以上要求的系统设计。1. 3 课程设计环境 1.PC兼容机 2Windows 操作系统3MFID多功能微机实验平台(含PCI总线驱
3、动板)或多功能实训平台4MF2KI集成开发环境 5面包板或外设功能模块板6安装或焊接工具1. 4 实验资源配置1.电源:机内供电;2.I/O端口地址:8255A的4个端口地址分配为,PA口300H,PB301H,PC302H,控制口303H;8253的4个端口地址分配为,T0304H,T1305H,T2306H,命令口307H。4DIP地址开关全部为ON。3.元器件:外设功能模块中包含74LS245,74LS08,功放级LM386A,LED 8个,排阻1个,电阻和电容若干以及喇叭SPK。4.软件资源:MF集成开发环境与工具软件(Windows2000/98版)。二、概要设计2. 1 设计内容利
4、用开发实验平台和自制的音乐发生器模块板进行硬件连接,利用MF集成开发环境进行音乐发生器控制程序设计,调试,直至听到正常的乐曲。当控制程序执行时便开始演奏歌曲,并于屏幕上显示歌曲名称。另外歌曲演奏的过程中LED跟随闪亮,歌曲结束或者按任意键停止演奏,退出程序执行。2. 2 电路原理框图2. 3 实验元件清单序号元器件名称型号数量1芯片(1)74LS451(2)74LS1381(3)82551(4)82531(5)LM 3861(5)74ls0812发光二极管583排阻8*150n14电阻(1)10k3(2)4.7K2101/8W5电容470uf 20v 2 6嗽叭0.58n17导线1扎2. 4
5、音乐乐曲的音高和节拍音高是指每个音符发声的高低,即音符的频率。节拍是指每个音符发声的长短,即音符持续的时间,也就是延时。音符 1 2 3 4 5 6 7 1 2 3 4 5 6 7 频率 131 147 165 175 196 220 247 262 294 330 349 392 440 494 523表2.41 音符-频率对照表表2.42 音符-延时对照表音符全音符二分音符四分音符八分音符时间1760ms880ms440ms220ms倍数321684三、详细设计3. 1 硬件设计3.1.1 可编程定时/计数器8253 8253用来实现将频率信号送进喇叭SPK而发声。8253是可编程的定时/
6、计数器,它是24脚双列直插式芯片,+5V电源供电,每个芯片内部有3个独立的计数器(计数通道),每个计数器都有自己的时钟输入CLK、技术输出OUT和门控制信号GATE。通过编程选择计数器和设置工作方式,计数器既可作计数器用,也可作定时器用,故称定时/计数器,记作T/C。其引脚分布图见下图: 在实验中设置一个数组,用以存储要演奏的乐曲的频率段,程序运行时,边读取频率边计算送入8253的计数初值,接下来就可以将8253输出端OUT形成的频率段送入扬声器中来发出各种频率声音。对于延时控制,将采用软件中设置延时数组来实现。3.1.2可编程并行接口8255实验中要跟踪乐曲演奏情况,这里我们借助于8255A
7、数据口的传送数据的功能实时将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在电子电路中,信号得到放大后最终是要以一定功率大小输出给负载,因此输出级往往由功率放大电路组成,它给负载
8、提供足够大的信号功率。如图3.1.31所示。本实验中的功放任务由LM386A来完成,其连接如图3.1.32所示。LM386A是一种设计用于低压应用的电路。增益内部设定为20以保持外部元件最少,但是在管脚1和管脚8之间增加外部电阻和电容可使增益提高,可高到200。3.1.4实验电路搭建图3.1.4 音乐发生器电路图按照电路图用电线连接所有元器件。布局原则:a、元器件在面包板上均匀分布;b、按从左到右的顺序依次布局输入、输出部分的元器件;c、使所用到的连接电线最少;d、地线和电源线分别接至面包板的上下边缘,电路中的接地和接电源部分皆由面包板边缘处接出。3. 2 软件设计3.2.1程序流程图3.2.
9、2参考程序清单#include /getvect(); setvect();#include /kbhit();#include /exit(0);#include /printf();#ifdef _cplusplus#define _CPPARGS .#else#define _CPPARGS#endifshort int nFreq3100= /美酒加咖啡 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
10、,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,
11、 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,
12、 440,494,523, 587, 698,659,587, 440,440, 440,494,523, 523,0 ;short int nTimeDelay3100= /美酒加咖啡延时,这里的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
13、,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 ;const unsigned long CLK = 1193180; / 声明时钟频率const unsigned cha
14、r INTR = 0X1C; / 声明中断号short int *pFreq; / 声明音频指针short int *pTimeDelay; / 声明延时指针void interrupt (*oldhandler)(_CPPARGS);void interrupt handler(_CPPARGS) (*pTimeDelay) - ; / 延时点数减一 oldhandler(); / 调用原例程int Playing(void);void main(void) printf(now play music!n); printf(strike ESC to exitn); Playing();in
15、t Playing(void) oldhandler = getvect(INTR); / 保存原中断向量 setvect(INTR, handler); / 装载新中断向量 outportb( 0x303, 0x90); / 初始化8255 outportb( 0x303, 0x0c); / 置pc6=0 禁止8253通道2的gate引脚 outportb( 0x303, 0x00); / 置pc0=0 禁止74LS08 outportb( 0x307, 0xb6); / 初始化8253 /这里默认播放第一首,可以调整下标换 pFreq = nFreq0; / 取歌曲的第一个音频 pTime
16、Delay = nTimeDelay0; / 取歌曲的第一个时延 while ( *pFreq & !kbhit() outportb( 0x306, (unsigned char)(CLK / *pFreq % 256); / 先送低字节(CLK/*pFreq为要减的次数) outportb( 0x306, (unsigned char)(CLK / *pFreq / 256); / 再送高字节 / 以上置8253通道2 的计数初值 outportb( 0x303, 0x01); / outportb( 0x303, 0x0d); / 结果是扬声器打开开扬声器 while ( *pTimeD
17、elay); /等待延时到 outportb( 0x303, 0x0c); / outportb( 0x303, 0x00); / pFreq+; / 获取下一个音频 pTimeDelay+; / 获取下一个延时 / 歌曲结束或按了任意键 outportb( 0x303, 0x0c); outportb( 0x303, 0x00); / 再次关闭扬声器 setvect(INTR,oldhandler); / 恢复原中断向量 return 0;四、测试与操作说明4. 1测试与操作1.准备元器件;2.按照自己设计得到的电路图连线;3.打开软件平台MF2KI内的音乐发生器运转程序(事先设计好的);4.观察是否得到预期效果。4. 2操作1.分析算法,画流程图;2.设计编写程序;3.通过测试,观察是否成功。最后,将硬件连接和软件编程结合起来测试五、课程设计总结与体会六、致谢
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1