📄 main.c
字号:
//======================================================================
// 工程名称: A1600_Advanced.spj
// 功能描述: A1600语音播放范例--高级应用
// 该范例连续播放三段语音,并可通过按键控制,用到了A1600的所有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_A1600_User_C.c
// SACM_A1600.asm, Key.asm
// SPCE061A.h, A1600.h, Key.h
// SPCE061A.inc, A1600.inc
// 硬件连接: IOA0 - Key1
// IOA1 - Key2
// IOA2 - Key3
// 维护记录: 2006-10-16 v1.0, by Qwerty
//======================================================================
#include "SPCE061A.h"
#include "A1600.h"
#include "Key.h"
#define SOUND_NUM 3 // 语音段数
//========================================================================
// 主函数
//========================================================================
int main()
{
unsigned int KeyCode;
unsigned int VolumeIdx = 8; // 音量等级,可在0~15之间变化,默认的音量等级为8。
unsigned int SndIdx = 0; // 语音序号,初始播放第一段语音。
Key_Init(); // 初始化按键扫描程序
SACM_A1600_Initial(); // 初始化A1600
SACM_A1600_DAC_FIRType(DAC_FIRTYPE_3); // 设定DAC输出滤波方式,详见A1600.h中的说明
SACM_A1600_Play(SndIdx, DAC_1+DAC_2, RAMP_UP_DN);
while(1)
{
*P_Watchdog_Clear = 0x01; // 清看门狗
SACM_A1600_ServiceLoop(); // 执行语音解码
if((SACM_A1600_Status()&STATUS_PLAY)==0) // 当前语音播放完毕则播放下一段
{
SndIdx += 1;
if(SndIdx==SOUND_NUM)
SndIdx = 0;
SACM_A1600_Play(SndIdx, DAC_1+DAC_2, RAMP_UP_DN);
}
KeyCode = Key_Get();
switch(KeyCode)
{
case KEY_1: // 按键1
SACM_A1600_Stop(); // 停止当前语音播放
SndIdx += 1; // 播放下一段
if(SndIdx==SOUND_NUM)
SndIdx = 0;
SACM_A1600_Play(SndIdx, DAC_1+DAC_2, RAMP_UP_DN);
break;
case KEY_2: // 按键2
if(SACM_A1600_Status()&STATUS_PAUSE)
SACM_A1600_Resume(); // 如果当前处于暂停状态则恢复播放
else
SACM_A1600_Pause(); // 如果当前处于播放状态则暂停
break;
case KEY_3: // 按键3
VolumeIdx += 1;
if(VolumeIdx>15) // 改变音量
VolumeIdx = 0;
SACM_A1600_Volume(VolumeIdx);
break;
default:
break;
}
}
}
//========================================================================
// 中断服务程序
//========================================================================
void FIQ(void)__attribute__((ISR));
void IRQ6(void)__attribute__((ISR));
void FIQ()
{
*P_INT_Clear = C_FIQ_TMA; // 清中断请求标志
SACM_A1600_ISR(); // 调用中断服务子程序
}
void IRQ6()
{
*P_INT_Clear = C_IRQ6_TMB2; // 清中断请求标志
Key_Scan(); // 调用按键扫描中断服务子程序
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -