⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 SACM_D10 for SPCE061A.rar,凌阳单片机SPCE061A的语音编码资料
💻 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 + -