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

📄 guard.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
//  功能描述:  语音辨识
//  文件来源:《实验仪实验指导书》,"实验三十二	语音辨识"  第116页
//  IDE环境:   SUNPLUS u'nSPTM  IDE 1.8.4
//
//  涉及的库:
//  组成文件:
//    	guard.c fiq.asm hardware.asm bsrv222SDL.lib flash4096.asm key.asm system.asm sacmv26e.lib
//===============================================
//============================================================
// 文件名称:guard.c
// 实现功能: 语音辨识
//============================================================

#include "bsrsd.h"

#define NAME_ID 			0x100
#define COMMAND_ONE_ID 		0x101
#define COMMAND_TWO_ID 		0x102
#define COMMAND_THREE_ID 	0x103
#define COMMAND_FOUR_ID 	0x104

#define RSP_INTR		0
#define RSP_NAME		1
#define RSP_FIRE		2
#define RSP_GUARD		3
#define RSP_AGAIN		4
#define RSP_NOVOICE		5
#define RSP_NAMEDIFF	6
#define RSP_CMDDIFF		7
#define RSP_STAR		8
#define RSP_MASTER		9
#define RSP_HERE		10
#define RSP_GUNSHOT		0
#define RSP_PATROL		11
#define RSP_READY		12
#define RSP_COPY		13
#define RSP_NOISY		14


#define C_Commond_Start		0
#define	C_GroupOne_Start	600
#define	C_GroupTwo_Start	1600

#define C_PageOne		0
#define C_PagTwo		1

#define Recognise		1
#define Train			2
#define NO_Re_Tr		0
#define C_Recognise		1
//-------------------------------------
void g_Recognise(void);

extern 	void ClearWatchDog();
extern  unsigned int BSR_SDModel[100];


//***************************全程变量******************************//
int gActivated = 0;	//该变量用于检测是否有触发命令,当有识别出语句
                    //为触发名称则该位置1 
                    
//***********************PlayRespond-voice*************************//
//*****************************************************************//
void PlayRespond(int Result)
{
	BSR_StopRecognizer();
	SACM_S480_Initial(1);
	SACM_S480_Play(Result, 3, 3);
	while((SACM_S480_Status()&0x0001) != 0)
	{
		SACM_S480_ServiceLoop();
		ClearWatchDog();
	}
	SACM_S480_Stop();
	BSR_InitRecognizer(BSR_MIC);
	BSR_EnableCPUIndicator();	
}
//*********************Training************************************//
//*****************************************************************//
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(10);
				return -1;
			case -2: 									//需要重新训练一遍
				PlayRespond(9);
				break;
			case -3: 									//环境太吵
				PlayRespond(11);
				return -1;		
			case -4: 									//数据库满
			 	return -1;
			case -5: 									//检测出声音不同
				if(WordID == NAME_ID)	PlayRespond(11);//两次输入名称不同
				else					PlayRespond(11);//两次输入命令不同
				return -1;
			case -6: 									//序号错误
				return -1;
		}
	}
	return 0;
}

//============================================================= 
// 函数名称:   main()
// 功能描述:  语音辨识
// 语法格式:  main()
//入口参数:     无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=============================================================

int main()
{
	System_Initial();
	while(1)
	{
		switch(SP_GetCh())
		{
			case 0x0000:										//语音训练
				BSR_DeleteSDGroup(0);							//初始化存储器RAM
				PlayRespond(RSP_INTR);							//语音”请输入触发名称”
				while(TrainWord(NAME_ID,1) != 0) ;				//语音训练“圣诞快乐”	
				while(TrainWord(COMMAND_ONE_ID,2) != 0) ;		//语音训练“新年快乐
				while(TrainWord(COMMAND_TWO_ID,3) != 0) ;		//语音训练“生日快乐
				PlayRespond(14);								//语音"yea",表示训练成功
				break;
			case 0x0001:										//语音辨识
				BSR_InitRecognizer(BSR_MIC);		    		//辨识初始化
				PlayRespond(15);			    				//语音“教你学英语”
				g_Recognise();									//辨识
				break;					
		}					 
		System_ServiceLoop();
	}
}
//**********************Recognise**********************************//
//*****************************************************************//
void g_Recognise()
{
	unsigned int timeCnt = 0,res,counter1=0,counter2=0,counter3=0;
	while(1)
	{
		res = BSR_GetResult();									//Recognised
		if(res > 0)									
		{
			switch(res)
			{
				case NAME_ID:
					PlayRespond(5);							//
					counter1++;
					break;
				case COMMAND_ONE_ID:							
					PlayRespond(6);							//														
					counter2++;
					break;
				case COMMAND_TWO_ID:							
					PlayRespond(7);							//
					counter3++;
					break;
			}									
			if(counter1!=0&&counter2!=0&&counter3!=0)
				break;
		}
		else 
			if (++timeCnt > 450)	//Out the stated time
			{
				PlayRespond(10); 	//There is no voic within  stated time					
				gActivated = 0;
				timeCnt = 0;
			}
	}
	PlayRespond(14);
}			

⌨️ 快捷键说明

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