历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2020年01月29日 | 基于51单片机的LD3320的例程(口令模式+IO口控制程序)

2020-01-29 来源:51hei

1、本工程采用 KEIL4 版本建立


2、本工程为口令模式+IO口控制方式,每次识别都需要喊“小杰”然后才可以喊其他二级的口令,另外IO口的输出可以查看程序PAx的端口利用情况


V0.7 语音识别程序:口令模式+IO口控制

本工程采用keil 4建立,如您打不开,可参考以下格式进行工程建立。

  

单片机源程序如下:

/***************************飞音云电子****************************

**  工程名称:YS-V0.7语音识别模块驱动程序

**        CPU: STC11L08XE

**        晶振:22.1184MHZ

**        波特率:9600 bit/S

**        配套产品信息:YS-V0.7语音识别开发板

**  作者:zdings


**  说明:口令模式+IO控制: 即每次识别时都需要说“小杰”这个口令 ,才能够进行下一级的识别

/***************************飞音云电子******************************/

#include "config.h"

/************************************************************************************/

//        nAsrStatus 用来在main主程序中表示程序运行的状态,不是LD3320芯片内部的状态寄存器

//        LD_ASR_NONE:                表示没有在作ASR识别

//        LD_ASR_RUNING:                表示LD3320正在作ASR识别中

//        LD_ASR_FOUNDOK:                表示一次识别流程结束后,有一个识别结果

//        LD_ASR_FOUNDZERO:        表示一次识别流程结束后,没有识别结果

//        LD_ASR_ERROR:                表示一次识别流程中LD3320芯片内部出现不正确的状态

/***********************************************************************************/

uint8 idata nAsrStatus=0;        

void MCU_init(); 

void ProcessInt0(); //识别处理函数

void  delay(unsigned long uldata);

void         User_handle(uint8 dat);//用户执行操作函数

void Led_test(void);//单片机工作指示

void Delay200ms();

uint8_t G0_flag=DISABLE;//运行标志,ENABLE:运行。DISABLE:禁止运行 

sbit LED=P4^2;//信号指示灯

//应用IO口定义 (模块标注 P2)

sbit PA1=P4^1; //对应板上标号 P4.1 

sbit PA2=P2^7;  //对应板上标号 P2.7

sbit PA3=P2^6;  //.....

sbit PA4=P2^5;  //.....

sbit PA5=P2^4;  //.....

sbit PA6=P2^3;  //.....

sbit PA7=P3^3;  //对应板上标号 IT1

sbit PA8=P3^4;  //对应板上标号 T0



/***********************************************************

* 名    称: void  main(void)

* 功    能: 主函数        程序入口

* 入口参数:  

* 出口参数:

* 说    明:                                          

* 调用方法: 

**********************************************************/ 

void  main(void)

{

        uint8 idata nAsrRes;

        uint8 i=0;

        Led_test();

        MCU_init();

        LD_Reset();

        UartIni(); /*串口初始化*/

        nAsrStatus = LD_ASR_NONE;                //        初始状态:没有在作ASR

        

        #ifdef TEST        

    PrintCom("一级口令:小杰rn"); /*text.....*/

        PrintCom("二级口令:1、代码测试rn"); /*text.....*/

        PrintCom("        2、开发板验证rn"); /*text.....*/

        PrintCom("        3、开灯rn"); /*text.....*/

        PrintCom("        4、关灯rn"); /*text.....*/

        PrintCom("  5、北京rn"); /*text.....*/

        PrintCom("        6、上海rn"); /*text.....*/

        PrintCom("        7、广州rn"); /*text.....*/

        #endif


        while(1)

        {

                switch(nAsrStatus)

                {

                        case LD_ASR_RUNING:

                        case LD_ASR_ERROR:                

                                break;

                        case LD_ASR_NONE:

                        {

                                nAsrStatus=LD_ASR_RUNING;

                                if (RunASR()==0)        /*        启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算*/

                                {

                                        nAsrStatus = LD_ASR_ERROR;

                                }

                                break;

                        }

                        case LD_ASR_FOUNDOK: /*        一次ASR识别流程结束,去取ASR识别结果*/

                        {                                

                                nAsrRes = LD_GetResult();                /*获取结果*/

                                User_handle(nAsrRes);//用户执行函数 

                                nAsrStatus = LD_ASR_NONE;

                                break;

                        }

                        case LD_ASR_FOUNDZERO:

                        default:

                        {

                                nAsrStatus = LD_ASR_NONE;

                                break;

                        }

                }// switch                                 

        }// while


}

/***********************************************************

* 名    称:          LED灯测试

* 功    能: 单片机是否工作指示

* 入口参数: 无 

* 出口参数:无

* 说    明:                                          

**********************************************************/

void Led_test(void)

{

        LED=~ LED;

        Delay200ms();

        LED=~ LED;

        Delay200ms();

        LED=~ LED;

        Delay200ms();

        LED=~ LED;

        Delay200ms();

        LED=~ LED;

        Delay200ms();

        LED=~ LED;

}

/***********************************************************

* 名    称: void MCU_init()

* 功    能: 单片机初始化

* 入口参数:  

* 出口参数:

* 说    明:                                          

* 调用方法: 

**********************************************************/ 

void MCU_init()

{

        P0 = 0xff;

        P1 = 0xff;

        P2 = 0xff;

        P3 = 0xff;

        P4 = 0xff;

        LD_MODE = 0;                //        设置MD管脚为低,并行模式读写

        IE0=1;

        EX0=1;

        EA=1;

}

/***********************************************************

* 名    称:        延时函数

* 功    能:

* 入口参数:  

* 出口参数:

* 说    明:                                          

* 调用方法: 

**********************************************************/ 

void Delay200us()                //@22.1184MHz

{

        unsigned char i, j;

        _nop_();

        _nop_();

        i = 5;

        j = 73;

        do

        {

                while (--j);

        } while (--i);

}


void  delay(unsigned long uldata)

{

        unsigned int j  =  0;

推荐阅读

史海拾趣

福声科技(FUET)公司的发展小趣事

随着市场的不断变化和技术的飞速发展,福声科技深知技术创新的重要性。公司不断加大研发投入,组建了一支高素质的研发团队,专注于电磁式蜂鸣器、压电式蜂鸣器等新型产品的研发。通过持续的技术创新和产品升级,福声科技成功推出了一系列具有自主知识产权的电声元器件,不仅提升了产品的市场竞争力,还进一步拓宽了应用领域,如智能家居、安防系统等新兴市场。

Avel Lindberg公司的发展小趣事

福声科技(FUET)的初创可以追溯到几年前,当时电子产业正蓬勃发展,对高质量电声元器件的需求日益增长。公司创始人凭借在电声领域的深厚积累,决定成立一家专注于电声产品研发、生产和销售的企业。初期,福声科技聚焦于贴片式无源蜂鸣器、高分贝报警器等产品,凭借其高性价比和稳定的性能,迅速在家电、移动通讯设备等领域获得市场认可,为公司的后续发展奠定了坚实基础。

CLARE公司的发展小趣事

CLARE公司始终坚持品质至上的原则,从原材料采购到生产制造、质量检测等各个环节都严格把控,确保产品的品质和性能达到客户的期望。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。这些举措赢得了客户的信赖和好评,为CLARE公司的长期发展奠定了坚实的基础。

CT [ Central Technologies ]公司的发展小趣事

近年来,电子行业经历了多次技术变革和产业重组。面对这些变革,CT公司积极调整战略方向,加大在人工智能、物联网等新兴领域的研发投入。同时,公司还推出了一系列创新产品和服务,以满足市场的新需求。这些举措使得CT公司在行业变革中保持了领先地位,实现了持续稳健的发展。

ApexTool Group公司的发展小趣事

Apex Tool Group一直将产品质量视为企业的生命线。在电子行业中,Apex Tool Group的产品以其卓越的品质和稳定的性能赢得了客户的广泛信赖。有一次,一家知名电子企业因为生产线上的电动工具出现故障,导致生产效率大幅下降。在紧急关头,Apex Tool Group迅速提供了替代方案,并派出技术人员现场解决问题。最终,Apex Tool Group的产品成功帮助该企业恢复了正常生产,赢得了客户的赞誉和信赖。

上海国芯(Gcore)公司的发展小趣事
选择合适的速度传感器,确保能够准确测量被测物体的速度,并将其转换为电信号供555定时器处理。

问答坊 | AI 解惑

脉冲电子围栏介绍

电子围栏系统由防区控制器和电子围栏前端组成,电子围栏前端安装在周界现有围墙或围栏上,也可以落地式安装,构成一道高压电缆隔离屏障,当有不法分子企图越过或者剪断电子线缆时,防区控制器用安全能量的脉冲高压击退入侵者,同时发出报警信号。 ...…

查看全部问答>

工控嵌入式为什么更关注微软?

     看到消息,最近,微软面向全球推出的基于Windows7的WindowsEmbeddedStandard。   通过高度的定制化与组件化,WindowsEmbeddedStandard2011操作系统显示出了Windows7强大的功能,延续了用户熟悉的界面与可靠性。使得工业自动化、娱乐、 ...…

查看全部问答>

很奇怪的问题, Wince下面串口发送速度不能太慢? 高手救命!

最近遇到一个很奇怪的问题 我用一个51板向arm板传数据 波特率9600 如果51板发送的数据很慢的,比如100ms一组数据 就会造成程序死掉 系统也没反应 但如果发送速度很快,就又没问题了 因为51板要监测一个开关,所以波特率不能太低,因此我不能 ...…

查看全部问答>

我要在WinCE下用VS.net开发PocketPC上的游戏,请问需要什么?

我要用WinCE和VS.net开发PocketPC上的游戏,这叫作嵌入式开发吧。请问需要什么? 我对这个完全陌生,也不知道具体是怎样的一种东西和流程,只是听上面的人说了一下。 需要用什么语言? 我已经会C#。 然后就是推荐一些教程吧。谢谢。 …

查看全部问答>

想转嵌入式系统开发,请大家给点advice

我想转入这个方面,但不知道该咋学,我以前学过汇编,电子电路,数字逻辑,电路,现在正学习操作系统,还有微机,,应该还要加强哪些方面的学习呢,请大家说说吧 。还有一点就是,我现在还是学生,大三了。…

查看全部问答>

DM9000硬件问题怎么检测

各位谁用过DM9000,现在我的BSP在开发板上能ping通,在我的板子上不行,DM9000一块电路是完全一样的,怎么快速定位硬件错误,请用过的朋友指点下,谢谢先…

查看全部问答>

关于电源驱动问题

我使用威盛的主板,使用power button(电源按钮)来保存注册表,我想用软件来实现该功能。如何调用?调用什么驱动能代替按power button的操作。…

查看全部问答>

在evc中如何列出字体?

请问,在evc中如何列出字体?用EnumFontFamilies? 我用了EnumFontFamilies结果测试没有字体获得? 请问哪位大侠可以帮助我下,谢谢了!…

查看全部问答>

怎么通过SPI1口发送一个64位宽的字?

我的程序是: #include <msp430x14x.h> unsigned int i; // 16-bit value to write void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P3SEL |= 0xA; ...…

查看全部问答>