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

📄 main.c

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 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 + -