📄 main.c
字号:
//======================================================================
// 工程名称: MS01_Advanced.spj
// 功能描述: MS01音乐播放范例--高级应用
// 该范例连续播放11段音乐,并可通过按键控制,用到了MS01的所有API函数
// IOA[2:0]连接三个按键:
// Key1 - 切换下一段音乐
// Key2 - 暂停/继续播放
// Key3 - 音量增加,当音量达到最大等级(15)后变为0,如此循环
// IDE环境: SUNPLUS u'nSPTM IDE 2.0.0(or later)
// 涉及的库: CMacro1016.lib
// SACM_D10.lib
// 组成文件: main.c, SACM_MS01_User_C.c
// SACM_MS01.asm, Key.asm
// SPCE061A.h, MS01.h, Key.h
// SPCE061A.inc, MS01.inc
// 硬件连接: IOA0 - Key1
// IOA1 - Key2
// IOA2 - Key3
// 维护记录: 2006-10-16 v1.0, by Qwerty
//======================================================================
#include "SPCE061A.h"
#include "MS01.h"
#include "Key.h"
#define SOUND_NUM 11 // 音乐段数
//========================================================================
// 主函数
//========================================================================
int main()
{
unsigned int KeyCode;
unsigned int VolumeIdx = 8; // 音量等级,可在0~15之间变化,默认的音量等级为8。
unsigned int SndIdx = 0; // 音乐序号,初始播放第一段音乐。
Key_Init(); // 初始化按键扫描程序
SACM_MS01_Initial(); // 初始化MS01
SACM_MS01_DAC_FIRType(DAC_FIRTYPE_3); // 设定DAC输出滤波方式,详见MS01.h中的说明
SACM_MS01_Play(SndIdx, DAC_1+DAC_2, RAMP_UP_DN);
while(1)
{
*P_Watchdog_Clear = 0x01; // 清看门狗
SACM_MS01_ServiceLoop(); // 执行音乐解码
if((SACM_MS01_Status()&STATUS_PLAY)==0) // 当前音乐播放完毕则播放下一段
{
SndIdx += 1;
if(SndIdx==SOUND_NUM)
SndIdx = 0;
SACM_MS01_Play(SndIdx, DAC_1+DAC_2, RAMP_UP_DN);
}
KeyCode = Key_Get();
switch(KeyCode)
{
case KEY_1: // 按键1
SACM_MS01_Stop(); // 停止当前音乐播放
SndIdx += 1; // 播放下一段
if(SndIdx==SOUND_NUM)
SndIdx = 0;
SACM_MS01_Play(SndIdx, DAC_1+DAC_2, RAMP_UP_DN);
break;
case KEY_2: // 按键2
if(SACM_MS01_Status()&STATUS_PAUSE)
SACM_MS01_Resume(); // 如果当前处于暂停状态则恢复播放
else
SACM_MS01_Pause(); // 如果当前处于播放状态则暂停
break;
case KEY_3: // 按键3
VolumeIdx += 1;
if(VolumeIdx>15) // 改变音量
VolumeIdx = 0;
SACM_MS01_Volume(VolumeIdx);
break;
default:
break;
}
}
}
//========================================================================
// 中断服务程序
//========================================================================
void FIQ(void)__attribute__((ISR));
void IRQ6(void)__attribute__((ISR));
void FIQ()
{
*P_INT_Clear = C_FIQ_TMA; // 清中断请求标志
SACM_MS01_ISR(); // 调用中断服务子程序
}
void IRQ6()
{
*P_INT_Clear = C_IRQ6_TMB2; // 清中断请求标志
Key_Scan(); // 调用按键扫描中断服务子程序
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -