📄 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.
//========================================================================
//========================================================================
// 工程名称: RecognisLCD
// 功能描述: 《实验仪指导书》综合实验
// 语音识别+LCD显示演示程序,配合综合实验4
// 采用特定人识别技术,程序开始时用户需要对语音识别进行训练,每
// 条指令训练两次,训练成功后,才开始真正的语音辨识,针对用户发
// 出的不同语音指令,LCD上显示不同的表情,并播放对应的语音,以回
// 应语音指令
// 涉及的库: CMacro1016.lib
// bsr222SDL.lib
// SACMV26e.lib
// 组成文件: main.c/RSDocument.c/Sound.c/face.c/SPLC501User.c
// isr.asm/hardware.asm/DataOSforLCD.asm/SPLC501Driver_IO.asm
// bsrSD.inc/a2000.inc/hardware.inc/SPLC501Driver_IO.inc
// bsrSD.h/a2000.h/hardware.h/SPLC501User.h
// 硬件连接: 硬件连接主要是针对实验仪LCD的连线,如下:
// LCD DB0~DB7接IOA0~IOA7
// LCD EP 接IOB5
// LCD RW 接IOB4
// LCD A0 接IOB3
// LCD CS 接IOB2 或接地也可
//
// 维护记录: 2005-10-16 v1.0 by xinqiang
//
// 注 意: 本工程当中的LCD驱动程序为精简版,为了减小ROM空间的占用,将LCD
// 驱动当中的8X16 ASCII码显示功能取消掉,望见谅
//========================================================================
//********************************************************************************//
//-- 在程序中我们通过五条语句的训练演示特定人连续音识别。
//--
//-- 在程序一开始为训练名称,然后提示训练剩下的四条命令,训练完毕开始辨识,当识别
//命令则会听到应答,具体命令如下:
//****************训练******************************************
// 提示音 输入语音
//--------------------------------------------------------
//"1" 训练名字----"??"
//"2" "how are you"
//"3" "happy new year"
//"4" "I love you"
//"5" "go to sleep"
//"Hoo" (每条命令要训练两次,而训练完一次后会提示该音,用户需要再一次输入该命令声音)
//"OHOH"(当训练出错时,发出此声,用户需要重新训练当前的命令)
//音乐(完成训练,进入辨识状态)
//*****************识别*****************************************
// 发布命令 应答
//---------------------------------------------------------
//名字"??" "lalalalala"
//"how are you" "I`m fine"
//"happy new year" "happy new year"
//"I love you" "I love you too"
//"go to sleep" "ZZZZ"
//注意:在每次提示音结束后1-2秒再输入命令或当上次应答结束1-2秒后再发布命令
//********************************************************************************//
//========================================================================
// 文件名称: main.c
// 功能描述: 语音识别+LCD显示程序主程序文件
// 包括主程序
// 维护记录: 2005-10-16 v1.0
//========================================================================
#include "bsrSD.h" //包含语音识别库的头文件
#include "SPLC501User.h" //包含SPLC501液晶驱动的头文件
#include "face.h" //包含要显示的图片的头文件
#define P_Watchdog_Clear (unsigned int*)0x7012
void Delay(unsigned int Timers);
//========================================================================
// 语法格式: int main(void)
// 实现功能: 主程序
// 参数: 无
// 返回值: 无
//========================================================================
void Play_Sound(unsigned int Index); //在Sound.c中定义
void ReTrainBS(void); //在Sound.c中定义
int main(void)
{
unsigned int uiTemp=0,Loop_Counter=0;
int res;
LCD501_Init(0); //初始化液晶显示
LCD501_SetPaintMode(4); //设置LCD绘图显示模式为取反叠加模式
LCD501_Bitmap(40,20,(unsigned int *)encoding_02);//显示图像
ReTrainBS(); //调用语音识别的训练程序,在Sound.c中定义
Play_Sound(12);
//..........开始识别命令.........................
BSR_InitRecognizer(BSR_MIC); //辨识器初始化
LCD501_Bitmap(40,20,(unsigned int *)encoding_00);//显示图片
while(1)
{
res = BSR_GetResult(); //获取语音识别结果,在库中定义
switch(res) //根据识别的结果进行分支跳转
{
case 0x100: //name ID
LCD501_Bitmap(40,20,(unsigned int *)encoding_01);
Play_Sound(7); //播放:lalalalala
Loop_Counter = 0; //计数清零
break;
case 0x101: //命令一 ID
LCD501_Bitmap(40,20,(unsigned int *)encoding_02);
Play_Sound(5); //播放:I`m fine
Loop_Counter = 0; //计数清零
break;
case 0x102: //命令二 ID
LCD501_Bitmap(40,20,(unsigned int *)encoding_04);
Play_Sound(8); //播放:Happy new year
Loop_Counter = 0; //计数清零
break;
case 0x103: //命令三 ID
LCD501_Bitmap(40,20,(unsigned int *)encoding_03);
Play_Sound(6); //播放:I love you too
Loop_Counter = 0; //计数清零
break;
case 0x104: //命令四 ID
for(uiTemp=0;uiTemp<3;uiTemp++) //显示三次表情变化
{
LCD501_Bitmap(40,20,(unsigned int *)encoding_05);
Delay(5);
LCD501_Bitmap(40,20,(unsigned int *)encoding_00);
Delay(5);
}
Play_Sound(9); //播放:ZZZZZZ(打呼噜声)
Loop_Counter = 0; //计数清零
break;
default:
break;
}
Loop_Counter++; //循环计数器自加一,用于程序中的状态状断
if(Loop_Counter>=600) //如在循环次数里没有命令,则显示初始图片
{
LCD501_Bitmap(40,20,(unsigned int *)encoding_00);
Loop_Counter = 0;
}
*P_Watchdog_Clear = 0x0001; //清看门狗
}
}
//========================================================================
// 语法格式: void Delay(unsigned int Timers)
// 实现功能: 延时子程序
// 参数: Timers 延时的时长控制参数
// 返回值: 无
//========================================================================
void Delay(unsigned int Timers)
{
unsigned int i;
while(Timers!=0)
{
for(i=0;i<0xffff;i++)
*P_Watchdog_Clear = 0x0001;
Timers--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -