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

📄 main.c

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 C
字号:
//======================================================================================
//
//        The information contained herein is the exclusive property of
//      Sunplus Technology Co. And shall not be distributed, reproduced,
//      or disclosed in whole in part without prior written permission.
//
//            (C) COPYRIGHT 2001   SUNPLUS TECHNOLOGY CO.
//                           ALL RIGHTS RESERVED
//
//    The entire notice above must be reproduced on all authorized copies.
//
//========================================================================================
//  工程名称: Guard_SD.spj
//  功能描述:  语音识别DEMO程 
//				每次上电复位后请训练3条命令,第一条为触发命令(用户名,如:张三),
//				后两条Fire、Guard(也可以有用户自己任意设定两条命令)为控制命令,
//				为了便于DEMO,会用语音提示“Say Fire.”“Say Guard.”
//				每次识别时先说用户名,识别成功则回答“I'm here.”,再说控制命令。
//				识别成功则用语音提示。
//				--命令		    	回答
//				--Fire      		gunshot
//				--Guard     		I'm ready 
//  文件来源: 《SPCE061单片机原理及应用技术》第八章 凌阳单片机应用及开发技术,第338页
//  IDE环境:  	SUNPLUS u'nSPTM  IDE 1.8.0(or later)
//
//  涉及的库:	CMacro.lib
//
//  组成文件:	main.c
//    	 		FIQ.asm/hardware.asm/InitIO.asm
//	            hardware.inc/hardware.h   	
//  日期:       2002-6-12
//===========================================================================================
#include 	"bsrsd.h"

#define 	NAME_ID 		0x100
#define 	COMMAND_ONE_ID 	0x101
#define 	COMMAND_TWO_ID 	0x102

#define 	RSP_INTRO		0  					//0. I am your body guard.
#define 	RSP_NAME		1   				//1. Please give me your name.
#define 	RSP_FIRE		2   				//2. Say Fire.
#define 	RSP_GUARD		3   				//3. Say Guard.
#define 	RSP_AGAIN		4   				//4. Say again.
#define 	RSP_NOVOICE		5   				//5. No voice detected.
#define 	RSP_NAMEDIFF	6   				//6. Two given names are different.
#define 	RSP_HERE		7  					//10. I'm here
#define 	RSP_STANDBY		8   				//8. Iam standing by.
#define 	RSP_GUNSHOT		9   				//11. Gun sound.
#define 	RSP_READY		10  				//13. I'm ready!


//..................global variables.....................
int gActivated = 0;								//1---触发命令识别成功
                    							//0---无触发命令


//*************** 播放提示语音 ***********************//
//input:播放序号
//output:NO
//*****************************************************//
void PlayRespond(int Result)
{
	BSR_StopRecognizer();       				//关闭识别器
	SACM_A2000_Initial(1);      				//初始化播放器
	SACM_A2000_Play(Result, 3, 3);     			//播放提示语音
	while((SACM_A2000_Status()&0x0001) != 0)
	{
		SACM_A2000_ServiceLoop();
	}
	SACM_A2000_Stop();               			//停止播放
	BSR_InitRecognizer(BSR_MIC);	 			//初始化识别器
//	BSR_EnableCPUIndicator();        
}
//***************  训练命令函数  ***********************//
//input:命令序号、提示语序号
//output:0----训练成功   -1------训练失败
//*****************************************************//
int TrainWord(int WordID, int RespondID)
{
	int res;
	PlayRespond(RespondID);
	while(1)
	{
		res = BSR_Train(WordID,BSR_TRAIN_TWICE);
		if(res == 0) 		 					//训练成功
		break;
		switch(res)
		{
		case -1:  								//没有检测到命令
			PlayRespond(RSP_NOVOICE);
			return -1;
		case -2: 								//需要再训练一次
			PlayRespond(RSP_AGAIN);
			break;
		case -3: 								//环境太吵
			return -1;		
		case -4: 								//存储器满
		 	return -1;
		case -5: 								//两次命令不一样
			PlayRespond(RSP_NAMEDIFF);
			return -1;
		case -6: 								//命令序号超出范围
			return -1;
		case -7: 								//命令已存在
			return -1;	
		}
	}
	return 0;
}

//***************  主程序  ***********************//
//C语言
//************************************************//

int main()
{
	int res, timeCnt=0;
	InitIO();
	BSR_DeleteSDGroup(0);						//初始化存储器,选用SPCE061A内部RAM存储语音样本

    PlayRespond(RSP_INTRO);
	while(TrainWord(NAME_ID,1) != 0) ;         	//训练用户名
	while(TrainWord(COMMAND_ONE_ID,2) != 0) ; 	//训练第一条命令
	while(TrainWord(COMMAND_TWO_ID,3) != 0) ;  	//训练第二条命令
	
	BSR_InitRecognizer(BSR_MIC);				//初始化识别器
  	//BSR_EnableCPUIndicator();          
	PlayRespond(RSP_STANDBY);					//播放提示语

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -