📄 main.c
字号:
/*****************************************************************************************
Program: SACM-MS01 player with play, stop, pause, resume, volume up, volume down function
User Function call:
System_Initial(); For Hardware, Keyboard scan, see system.asm in detail
System_ServiceLoop(); For Keyboard scan, see system.asm in detail
Sunplus Function call:
int SP_GetCh();
Return values of SP_GetCh() : {0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}
Function call for SACM-MS01
Syntax:
SACM_MS01_Play(SongIndex,Channel, Ramp_Set)
song index: 0 - max index
Channel: 1: DAC1 on
2: DAC2 on
3: DAC1,2 on
Ramp_Set 0: Disable both Ramp Up/Dn
1: Enable Ramp Up only
2: Enable Ramp Dn only
3: Enable both Ramp Up/Dn
SACM_MS01_Stop();
SACM_MS01_Pause();
SACM_MS01_Resume();
SACM_MS01_Volume(volume index);
volume index: {0..15}
SACM_MS01_ChannelOff(Channel);
SACM_MS01_ChannelOn(Channel);
SACM_MS01_SetInstrument(Channel,Drum,fix)
// DATA:2003/05/14
// IDE: 1.8.0
*****************************************************************************************/
#include "hardware.h"
#include "ms01.h"
#define Disable 0
#define Enable 1
#define MaxSongNum 11 // 最大语音资料文件个数
#define MaxVolume 15 // 最大音量
#define Inst_Max_Num 35 // 乐器混合数
#define Drum_Max_Num 20 // 鼓点数
#define DAC_24K 1
#define DAC_20K 2
#define DAC_16K 3
#define Manual 0
#define Auto 1
int Ret = 0; // 定义子程序返回值
int main()
{
int Key = 0; // 定义存储器键值
int SongIndex = 0; // 第一首曲子的初始化
int VolumeIndex = 8; // 初始化中音
int OnIndex=0,OffIndex=0;
int Channel=0, Instrument=0 ,Drum=0;
// 2: 20K Current(TimerA) 3: 16K Current(TimerA)
Ret = System_Initial();
SACM_MS01_Initial(DAC_24K);
SACM_MS01_Play(SongIndex,DAC1+DAC2, Ramp_UpDn_On); // 播放音乐
//SACM_MS01_ChannelOff(0);
//SACM_MS01_ChannelOff(1);
//SACM_MS01_ChannelOff(2);
//SACM_MS01_ChannelOff(3);
//SACM_MS01_ChannelOff(4);
//SACM_MS01_ChannelOff(5);
while(1)
{ // 用C语言定义主函数范围
Key = SP_GetCh();
switch(Key)
{
case 0x00:
break;
case 0x01:
SACM_MS01_Play(SongIndex,DAC1+DAC2, Ramp_UpDn_On); // 播放音乐
break;
case 0x02:
SACM_MS01_Stop(); // 停止播放
F_ClearWatchdog() ; //清看门狗
break;
case 0x04:
//SACM_MS01_ChannelOn(OnIndex);
//if (OnIndex++ > 5) OnIndex = 0;
SACM_MS01_Pause(); // 暂停播放
F_ClearWatchdog() ; //清看门狗
break;
case 0x08:
//SACM_MS01_ChannelOff(OffIndex);
//if (--OffIndex < 0) OffIndex = 5;
SACM_MS01_Resume(); // 继续播放
F_ClearWatchdog(); //清看门狗
break;
case 0x10:
VolumeIndex++;
if(VolumeIndex > MaxVolume)
VolumeIndex = MaxVolume;
SACM_MS01_Volume(VolumeIndex); // 音量增加
break;
case 0x20:
if(VolumeIndex == 0)
VolumeIndex = 0;
else
VolumeIndex--;
SACM_MS01_Volume(VolumeIndex); // 音量减小
F_ClearWatchdog() ; //清看门狗
break;
case 0x40: // 播放下一首歌
if( ++SongIndex == MaxSongNum)
SongIndex = 0;
SACM_MS01_Play(SongIndex, DAC1+DAC2, Ramp_UpDn_On);
F_ClearWatchdog() ; //清看门狗
break;
case 0x80: // 播放前一首
SACM_MS01_ChannelOff(0);
SACM_MS01_ChannelOn(1);
SACM_MS01_ChannelOn(2);
SACM_MS01_ChannelOff(3);
SACM_MS01_ChannelOff(4);
SACM_MS01_ChannelOff(5);
SACM_MS01_SetInstrument(2,Instrument,0); //f(channel, instrument,song command on/off)
if(++Instrument > Inst_Max_Num) Instrument=0;
SACM_MS01_SetInstrument(1,Drum,1); //f(channel, instrument,song command on/off)
if(++Drum > Drum_Max_Num) Drum=0;
//if( --SongIndex < 0)
//SongIndex = MaxSongNum-1;
//SACM_MS01_Play(SongIndex,DAC1+DAC2);
break;
default:
break;
}
Ret = System_ServiceLoop(); // 键扫描服务子程序
Ret = SACM_MS01_ServiceLoop(); // SACM-MS01 播放子程序
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -