1、SOPC乐曲演奏大作业综合实验 基于NiosII的乐曲演奏设计单 位:班 级:组 员: 指导老师:首 都 师 范 大 学2012年5月一.设计概述 3二设计要求 3三设计方案(总体设计原理、软件设计、硬件设计) 33.1总体设计原理 33.2 软件设计流程图 43.3硬件设计 8四实验环境 9五软件实验步骤 9六. 头文件 116.1 music.h 116.2 LCD.h 19七实验结果及分析 23八总结及遇到问题 24九思考题: 24一.设计概述 本设计基于SOPC builder和 Nios II 8.0的乐曲演奏,使用蜂鸣器进行播放歌曲,本设计编写多首歌曲可以循环播放,并在液晶屏上显示
2、歌曲名称和切换名称。 实验前准备: 1、该实验需要使用七个模块组中的第七个功能单元,所以三个拨码开关处于“处于“110”时,即MODEL_SEL2和MODEL_SEL3拨下处于“OFF”状态,MODEL_SEL1拨下处于“ON”时,选择该模块。 2、拨码开关MODEL_SEL5-8全置于“ON ”状态,即MODEL_SEL5-8拨下处于“ON ”状态时通过USB BLASTER接口下载。当全部拨下处于“OFF”时可使用开发平台上LAB_JTAG_PS_AS 接口下载或者核心开发板上JTAG接口下载。这里用户可根据自己所用的下载线来选择适当的下载方式和相应的MODEL_SEL5-8的状态。二设计
3、要求 通过使用PWM对交流蜂鸣器进行控制,实现多首乐曲(6首)的播放。实现如下功能:1. 歌曲播放2. 暂停功能3. 多首歌曲的切换(6首)其他扩展要求:在液晶屏上显示歌曲的名称,以及上下切换字符(before,after)三设计方案(总体设计原理、软件设计、硬件设计)3.1总体设计原理实验箱的蜂鸣器是交流蜂鸣器,在BZSP输入一定频率的脉冲时,蜂鸣器蜂鸣,改变输入频率可以改变蜂鸣器的响声。因此可以利用一个PWM来控制BZSP,通过改变PWM的频率来得到不同的声响,以此来播放音乐。PWM设计说明PWM输出一个占空比可调的方波。当一个周期11个时钟,高电平输出7个时钟时的PWM输出波形如下图所示
4、。图1 PWM输出波形图表一 内部寄存器:寄存器名地址偏移量访问属性 描 述clock_divide00读/写用来设定PWM输出周期的时钟数duty_cycle01读/写用来设定一个周期内PWM输出低电平的时钟个数enable10读/写使能和关闭PWM输出,为1时使能PWM输出保留113.2 软件设计流程图图2 程序流程框图 首先,判断暂停键是否按下,如果没有,则播放歌曲,如果按下来了暂停键,就执行暂停功能。暂停后判断播放键有没有按下,如果按下了播放键,则在断点的地方接着播放歌曲,如果没有,则一直暂停到播放按键按下。主程序代码:6首歌曲播放,暂停,及切换上一首、切换下一首同时显示歌名和play
5、、stop、next、before:上下首歌切换:图3 程序3.3硬件设计图4 硬件图四实验环境硬件: PC机 GX-SOC/SOPC-DEV-LAB PLATFORM创新开发实验平台 GX-SOPC-EP2C35-M672核心板软件: Quartus II 8.0 Nios II 8.0五软件实验步骤1、.把 altera_avalon_pwm (IP核)拷贝到自己的工程文件夹目录下,2. 在主菜单打开Tools-SOPC Builer图5 生成PWM核3.重新命名为 bzsp,点击鼠标右键,进行自动分配 Addressess 和IRQ,点击Generate图5 对PWM核重命名4.生成成功
6、以后回到Quartus II界面软件中必须替换更新:在.bdf鼠标右键单击空白处,单击Update Symbol or Block,即可。5.在NIOS II IDE软件环境中点击New-Nios II C/C+ Application,建立一个工程 6.在SOPC Builder System PTF File 选择NIOS2.ptf,C/C+的应用工程名Name重命名,点击Next7.选中Create a new system library named,点击Finish. 8.建立music.h文件和LCD.h头文件9.编译工程10.build 成功后下载硬件11.运行RUN六. 头文件
7、6.1 music.h#ifndef _MUSIC_H#define _MUSIC_H#include system.h/ rhythm: quarter note as a meter/持续时间的长短#define RHYTHM 36#define _1 RHYTHM*4 /note#define _1d RHYTHM*6 /dotted note #define _2 RHYTHM*2 /halfnote#define _2d RHYTHM*3 /dotted halfnote #define _4 RHYTHM*1 /quarter note#define _4d RHYTHM*3/2
8、/dotted quarter note #define _8 RHYTHM*1/2 /eighth note#define _8d RHYTHM*3/4 /dotted eighth note #define _16 RHYTHM*1/4 /sixteenth note#define _16d RHYTHM*3/8 /dotted sixteenth note#define _32 RHYTHM*1/8 /thirty-second note/低音#define _1DO (ALT_CPU_FREQ/131)#define _1DOr (ALT_CPU_FREQ/139)#define _1
9、RE (ALT_CPU_FREQ/147)#define _1REr (ALT_CPU_FREQ/155)#define _1MI (ALT_CPU_FREQ/165)#define _1FA (ALT_CPU_FREQ/175)#define _1FAr (ALT_CPU_FREQ/185)#define _1SOL (ALT_CPU_FREQ/196)#define _1SOLr (ALT_CPU_FREQ/207)#define _1LA (ALT_CPU_FREQ/220)#define _1LAr (ALT_CPU_FREQ/233)#define _1SI (ALT_CPU_FRE
10、Q/247)/中音#define _DO (ALT_CPU_FREQ/262)#define _DOr (ALT_CPU_FREQ/277)#define _RE (ALT_CPU_FREQ/294)#define _REr (ALT_CPU_FREQ/311)#define _MI (ALT_CPU_FREQ/330)#define _FA (ALT_CPU_FREQ/349)#define _FAr (ALT_CPU_FREQ/370)#define _SOL (ALT_CPU_FREQ/392)#define _SOLr (ALT_CPU_FREQ/416)#define _LA (AL
11、T_CPU_FREQ/440)#define _LAr (ALT_CPU_FREQ/466)#define _SI (ALT_CPU_FREQ/492)/高音#define _DO1 (ALT_CPU_FREQ/523)#define _DO1r (ALT_CPU_FREQ/554)#define _RE1 (ALT_CPU_FREQ/579)#define _RE1r (ALT_CPU_FREQ/740)#define _MI1 (ALT_CPU_FREQ/651)#define _FA1 (ALT_CPU_FREQ/695)#define _FA1r (ALT_CPU_FREQ/740)#
12、define _SOL1 (ALT_CPU_FREQ/784)#define _SOL1r (ALT_CPU_FREQ/830)#define _LA1 (ALT_CPU_FREQ/880)#define _LAR1r (ALT_CPU_FREQ/932)#define _SI1 (ALT_CPU_FREQ/983)#define SONG_SIZE1 200#define SONG_SIZE2 200#define SONG_SIZE3 200#define SONG_SIZE4 200#define SONG_SIZE5 200#define SONG_SIZE6 200#define M
13、UTE(TONE) (TONE)2 /低音为25占空比#define LOUD(TONE) (TONE)1 /高音为50占空比/1=G 3/4/乐曲为一个多行3列的2维数组/第1列为音调,第2列为节拍,第3列音高(高音、低音)int burroSONG_SIZE13 = _DO,_2, MUTE(_DO),/1 _MI, _32,0, _DO,_2, MUTE(_DO),/1 _MI, _32,0, _DO,_2, MUTE(_DO),/1 _MI, _32,0, _MI,_2, MUTE(_MI),/3_MI, _32,0, _SOL,_2, LOUD(_SOL),/5_MI, _32,0,
14、 _SOL,_2, LOUD(_SOL),/5 _MI, _32,0, _SOL,_2, LOUD(_SOL),/5 _MI, _32,0, _SOL,_2, LOUD(_SOL),/5 _MI, _32,0, _LA,_2, MUTE(_LA),/6 _MI, _32,0, _LA,_2, MUTE(_LA),/6 _MI, _32,0, _LA,_2, MUTE(_LA),/6 _MI, _32,0, _DO1,_2, LOUD(_DO1),/1 _MI, _32,0, _SOL,_1, LOUD(_SOL),/5 _MI, _32,0, _FA,_2, MUTE(_FA),/4 _MI,
15、 _32,0, _FA,_2, MUTE(_FA),/4 _MI, _32,0, _LA,_2, MUTE(_LA),/6 _MI, _32,0, _LA,_2, MUTE(_LA),/6 _MI, _32,0, _MI,_2, MUTE(_MI),/3 _MI, _32,0, _MI,_2, MUTE(_MI),/3 _MI, _32,0, _MI,_2, MUTE(_MI),/3 _MI, _32,0, _MI,_2, MUTE(_MI),/3 _MI, _32,0, _RE, _2,MUTE(_RE), /2 _MI, _32,0, _RE, _2,MUTE(_RE), /2 _MI,
16、_32,0, _RE, _2,MUTE(_RE), /2 _MI, _32,0, _RE, _2,MUTE(_RE), /2 _MI, _32,0, _SOL,_1, MUTE(_SOL),/5_MI, _32,0, _SOL,_4, MUTE(_SOL),/5_DO,_2, MUTE(_DO),/1_MI, _32,0, _DO,_2, MUTE(_DO),/1_MI, _32,0, _DO,_2, MUTE(_DO),/1_MI, _32,0, _MI,_2, MUTE(_MI),/3_MI, _32,0, _SOL,_2, MUTE(_SOL),/5_MI, _32,0, _SOL,_2
17、, MUTE(_SOL),/5_MI, _32,0, _SOL,_2, MUTE(_SOL),/5_MI, _32,0, _SOL,_2,MUTE(_SOL),/5_MI, _32,0, _LA,_2, MUTE(_LA),/6_MI, _32,0, _LA,_2, MUTE(_LA),/6_MI, _32,0, _LA,_2, MUTE(_LA),/6_MI, _32,0, _DO1,_2, MUTE(_DO1),/1_MI, _32,0, _SOL,_1, LOUD(_SOL),/5_FA,_2, LOUD(_FA),/4_MI, _32,0, _FA,_2, LOUD(_FA),/4_M
18、I, _32,0, _FA,_2, LOUD(_FA),/4_MI, _32,0, _LA,_2, MUTE(_LA),/6_MI, _32,0, _MI,_2, MUTE(_MI),/3_MI, _32,0, _MI,_4, MUTE(_MI),/3_MI, _32,0, _MI,_4, MUTE(_MI),/3_MI, _32,0, _MI,_2, MUTE(_MI),/3_MI, _32,0, _MI,_2, MUTE(_MI),/3_MI, _32,0, _RE, _2,LOUD(_RE), /2_MI, _32,0, _RE, _2,LOUD(_RE), /2_MI, _32,0,
19、_RE, _2,LOUD(_RE), /2_MI, _32,0, _MI,_2, MUTE(_MI),/3_MI, _32,0, _DO,_1, MUTE(_DO),/1;int dachangjinSONG_SIZE23 = _LA, _2, LOUD(_LA), /2 _SI, _2, MUTE(_SI), /3 _SI, _2, MUTE(_SI), /3 _SI, _2d,LOUD(_SI), /3. _LA, _4, MUTE(_LA), /2_ _SOL,_2, MUTE(_SOL),/1 _MI, _2, LOUD(_MI), /.6 _SOL,_2, MUTE(_SOL),/1
20、 _SOL,_2d, MUTE(_SOL),/1 _LA, _16,MUTE(_LA), /2_ _SOL,_1d,MUTE(_SOL),/1- _LA, _2, LOUD(_LA), /2 _SI, _2, MUTE(_SI), /3 _SI, _2, MUTE(_SI), /3 _SI, _2d,LOUD(_SI), /3. _RE1,_4, MUTE(_RE1),/5 _SI, _2, MUTE(_SI), /3 _SI, _2, MUTE(_SI), /3 _LA, _2, MUTE(_LA), /2 _SI, _2, MUTE(_SI), /3 _SI, _4d,MUTE(_SI),
21、 /3- _RE1,_2, LOUD(_RE1),/5 _MI1,_2, MUTE(_MI1),/6 _MI1,_2, MUTE(_MI1),/6 _MI1,_2d,LOUD(_MI1),/6 _RE1,_4, MUTE(_RE1),/5 _SI, _2, MUTE(_SI), /3 _SI, _2, LOUD(_SI), /3 _RE1,_2, MUTE(_RE1),/5 _MI1,_4, MUTE(_MI1),/6 _RE1,_16,MUTE(_RE1),/5 _MI1,_16,MUTE(_MI1),/6 _RE1,_1d,MUTE(_RE1),/5 _LA, _2, LOUD(_LA),
22、 /2 _SI, _2, MUTE(_SI), /3 _SI, _2, MUTE(_SI), /3 _LA, _2d,LOUD(_LA), /3. _SI, _4, MUTE(_SI), /2 _SI, _2, MUTE(_SI), /3 _LA, _2, LOUD(_LA), /2 _SI, _2, MUTE(_SI), /3 _MI, _2, LOUD(_MI), /.6 _SOL,_8,MUTE(_SOL),/1 _MI, _1d,MUTE(_MI), /.6 _MI, _2,0, /stop _LA, _2, LOUD(_LA), /2 _SI, _2, MUTE(_SI), /3 _
23、SI, _2, MUTE(_SI), /3 _SI, _2d,LOUD(_SI), /3. _LA, _4, MUTE(_LA), /2_ _SOL,_2, MUTE(_SOL),/1 _MI, _2, LOUD(_MI), /.6 _SOL,_2, MUTE(_SOL),/1 _SOL,_8d,MUTE(_SOL),/1 _LA, _16,MUTE(_LA), /2_ _SOL,_1d,MUTE(_SOL),/1- _LA, _2, LOUD(_LA), /2 _SI, _2, MUTE(_SI), /3 _SI, _2, MUTE(_SI), /3 _SI, _2d,LOUD(_SI),
24、/3. _RE1,_4, MUTE(_RE1),/5 _SI, _2, MUTE(_SI), /3 _SI, _2, MUTE(_SI), /3 _LA, _2, MUTE(_LA), /2 _SI, _2, MUTE(_SI), /3 _SI, _1d,MUTE(_SI), /3- _RE1,_2, LOUD(_RE1),/5 _MI1,_2, MUTE(_MI1),/6 _MI1,_2, MUTE(_MI1),/6 _MI1,_2d,LOUD(_MI1),/6 _RE1,_4, MUTE(_RE1),/5 _SI, _2, MUTE(_SI), /3 _SI, _2, LOUD(_SI),
25、 /3 _RE1,_2, MUTE(_RE1),/5 _MI1,_2, MUTE(_MI1),/6 _RE1,_1d,MUTE(_RE1),/5 _LA, _2, LOUD(_LA), /2 _SI, _2, MUTE(_SI), /3 _SI, _2, MUTE(_SI), /3 _LA, _2d,LOUD(_LA), /3. _SI, _4, MUTE(_SI), /2 _SI, _2, MUTE(_SI), /3 _LA, _2, LOUD(_LA), /2 _SI, _2, MUTE(_SI), /3 _MI, _2, LOUD(_MI), /.6 _SOL,_8,MUTE(_SOL)
26、,/1 _MI, _1d,MUTE(_MI), /.6- _LA, _8,LOUD(_LA), /2 _LA, _8,LOUD(_LA), /2 _LA, _8d,LOUD(_LA), /2 _SOL,_4, MUTE(_SOL),/1 _MI, _2, MUTE(_MI), /.6 _LA, _8,LOUD(_LA), /2 _LA, _8,LOUD(_LA), /2 _LA, _8d,LOUD(_LA), /2 _SOL,_4, MUTE(_SOL),/1 _MI, _2, MUTE(_MI), /.6 _LA, _2, LOUD(_LA), /2 _SI, _2, MUTE(_SI),
27、/3 _SOL,_2, MUTE(_SOL),/1 _LA, _2d,LOUD(_LA), /2 _SI, _4, MUTE(_SI), /3 _RE1,_2, MUTE(_RE1),/5 _MI1,_8,LOUD(_MI1),/6 _MI1,_8,LOUD(_MI1),/6 _MI1,_8d,LOUD(_MI1),/6 _RE1,_4, MUTE(_RE1),/5 _SI, _2, MUTE(_SI), /3 _LA, _8,LOUD(_LA), /2 _LA, _8,LOUD(_LA), /2 _LA, _8d, LOUD(_LA), /2 _SOL,_4, MUTE(_SOL),/1 _
28、MI, _2, MUTE(_MI), /.6 _MI, _2, LOUD(_MI), /.6 _RE, _2, MUTE(_RE), /.5 _MI, _2, MUTE(_MI), /.6 _MI, _1d,MUTE(_MI), /.6 _MI, _2,0, /stop _MI, _2,0, /stop;/*_1SOL, _4d, MUTE(_1SOL), /.1 _1LA, _4d, MUTE(_1LA), /.2 _1SI, _4d, MUTE(_1SI), /.3 _DO, _4d, MUTE(_DO), /.4 _RE, _4d, MUTE(_RE), /.5_MI, _4d, MUTE(_MI), /.6_FA, _4d, MUTE(_FA), /.7 _SOL, _4d, MUT
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1