📄 main.c
字号:
//========================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================
//========================================================
// 工程名称: ex5_A2000_S480
// 功能描述: 《实验指导书》语音实验
// SACM_A2000和SACM_S480混合播放
// 键盘控制混合播放SACM_A2000和SACM_S480格式的语音资源
// 涉及的库: CMacro1016.lib
// SacmV26e.lib
// 组成文件: main.c
// hardware.asm,isr.asm,key.asm
// a2000.h,key.h,s480.h
// a2000.inc,hardware.inc,key.inc,s480.inc
// 硬件连接: IOA口的低8位连接1*8键盘
// 维护记录: 2005-09-12 v1.0
//
//========================================================
//========================================================
// 文件名称: main.c
// 功能描述: 键盘控制混合播放SACM_A2000和SACM_S480格式的语音资源
// 维护记录: 2005-09-12 v1.0
//========================================================
#include "key.h"
#include "a2000.h"
#include "s480.h"
#define P_Watchdog_Clear (unsigned int *)0x7012
#define A2000 1 //SACM_A2000格式
#define S480 2 //SACM_S480格式
#define MAX_VOLUME 15
#define MIN_VOLUME 0
#define MAX_NUM_A2000 1 //定义A2000播放的最大语音数
#define MAX_NUM_S480 3 //定义S480播放的最大语音数
#define MANUAL 0
#define AUTO 1
//========================================================
// 语法格式: int main(void)
// 实现功能:
// 参数: 无
// 返回值: 无
//========================================================
unsigned int g_uiSpeechType = 2; //定义语音播放类型
int main(void)
{
unsigned int uiIndex_A2000 = 0; //定义A2000格式的语音索引号
unsigned int uiIndex_S480 = 0; //定义A2000格式的语音索引号
unsigned int uiVolume_A2000 = 8;
unsigned int uiVolume_S480 = 8;
unsigned int uiKey = 0; //定义键值,并初始化为0
Key_Init(); //调用键盘初始化程序,在key.asm中定义
while(1)
{
uiKey = Key_Get(); //调用取键值程序获取键值,在key.asm中定义
switch(uiKey)
{
case 0x0000: //没有键按下
break;
case 0x0001: //第一个键(S20)按下
uiIndex_A2000 = 0; //
SACM_S480_Stop(); //停止播放S480格式的语音资源
g_uiSpeechType = 1; //语音播放类型为1,播放A2000格式语音
SACM_A2000_Initial(AUTO); //A2000格式播放初始化,为自动播放方式
SACM_A2000_Play(uiIndex_A2000,3,3); //播放第一段A2000格式语音
*P_Watchdog_Clear = 0x0001; //清看门狗
break;
case 0x0002: //第二个键(S21)按下
uiIndex_S480 = 0;
SACM_A2000_Stop();
g_uiSpeechType = 2; //语音播放类型为2,播放S480格式语音
SACM_S480_Initial(AUTO); //S480格式播放初始化,为自动播放方式
SACM_S480_Play(uiIndex_S480,3,3); //播放第一段S480格式语音
*P_Watchdog_Clear = 0x0001; //清看门狗
break;
case 0x0004: //第三个键(S22)按下
switch(g_uiSpeechType) //判断是那种播放类型
{
case 1: //播放类型为1
SACM_A2000_Pause(); //暂停正在播放的A2000格式语音
break;
case 2: //播放类型为2
SACM_S480_Pause(); //暂停正在播放的S480格式语音
break;
}
*P_Watchdog_Clear = 0x0001; //清看门狗
break;
case 0x0008: //第四个键(S23)按下
switch(g_uiSpeechType) //判断是那种播放类型
{
case 1: //播放类型为1
SACM_A2000_Resume(); //恢复播放暂停的A2000格式语音
break;
case 2: //播放类型为2
SACM_S480_Resume(); //恢复播放暂停的S480格式语音
break;
}
*P_Watchdog_Clear = 0x0001; //清看门狗
break;
case 0x0010: //第五个键(S24)按下
switch(g_uiSpeechType) //判断播放类型
{
case A2000: //播放类型为1(A2000)
uiVolume_A2000++; //音量加1
if(uiVolume_A2000 > MAX_VOLUME) //音量是否大于最大音量15
uiVolume_A2000 = MAX_VOLUME;//是,音量为最大音量
SACM_A2000_Volume(uiVolume_A2000);//设置音量
break;
case S480: //播放类型为2(S480)
uiVolume_S480++; //音量加1
if(uiVolume_S480 > MAX_VOLUME) //音量是否大于最大音量15
uiVolume_S480 = MAX_VOLUME; //是,音量为最大音量
SACM_S480_Volume(uiVolume_S480);//设置音量
break;
}
break;
case 0x0020: //第六个键(S25)按下
switch(g_uiSpeechType) //判断播放类型
{
case A2000: //播放类型为1(A2000)
if(uiVolume_A2000 > MIN_VOLUME) //音量是否大于最小音量0
uiVolume_A2000--; //是,音量减1
SACM_A2000_Volume(uiVolume_A2000); //设置音量
break;
case S480: //播放类型为2(S480)
if(uiVolume_S480 > MIN_VOLUME) //音量是否大于最小音量0
uiVolume_S480--; //是,音量减1
SACM_S480_Volume(uiVolume_S480); //设置音量
break;
}
break;
case 0x0040: //第七个键(S26)按下
uiIndex_A2000++; //A2000格式的语音索引号加1
if(uiIndex_A2000 == MAX_NUM_A2000) //A2000格式的语音索引号是否为最大值
uiIndex_A2000 = 0; //是,A2000格式的语音索引号赋0
SACM_S480_Stop(); //停止播放S480格式语音
g_uiSpeechType = 1; //播放类型赋1,播放A2000格式语音
SACM_A2000_Initial(AUTO); //A2000格式播放初始化,为自动播放方式
SACM_A2000_Play(uiIndex_A2000,3,3); //播放
*P_Watchdog_Clear = 0x0001; //清看门狗
break;
case 0x0080: //第八个键(S27)按下
uiIndex_S480++; //S480格式的语音索引号加1
if(uiIndex_S480 == MAX_NUM_S480) //S480格式的语音索引号是否为最大值
uiIndex_S480 = 0; //是,S480格式的语音索引号赋0
SACM_A2000_Stop(); //停止播放A2000格式语音
g_uiSpeechType = 2; //播放类型赋2,播放S480格式语音
SACM_S480_Initial(AUTO); //S480格式播放初始化,为自动播放方式
SACM_S480_Play(uiIndex_S480,3,3); //播放
*P_Watchdog_Clear = 0x0001; //清看门狗
break;
default:
break;
}
switch(g_uiSpeechType) //判断播放类型
{
case A2000: //播放类型为1(A2000)
SACM_A2000_ServiceLoop(); //调用SACM_A2000_ServiceLoop()函数填充语音队列
break;
case S480: //播放类型为2(S480)
SACM_S480_ServiceLoop(); //调用SACM_S480_ServiceLoop()函数填充语音队列
break;
default:
break;
}
*P_Watchdog_Clear = 0x0001; //清看门狗
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -