久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1806|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

我用的是并口通訊測(cè)試語(yǔ)音模塊的ASR 但是一直不對(duì)

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 50 黑幣 回復(fù)本帖可獲得 50 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:381002 發(fā)表于 2019-11-1 22:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
   #include"reg511.h"
#include "intrins.h"

#define uint8 unsigned char
#define uint16 unsigned int
#define uint32 unsigned long
sbit        LD_WR         = P3^6;
sbit        LD_RD        = P3^7;
sbit        LD_A0        = P1^1;
sbit    RSTB=P1^2;
sbit    CSB=P1^0;
sbit out_1=P2^0;
sbit out_2=P2^1;
sbit out_3=P2^2;
sbit out_4=P2^3;
sbit out_5=P2^4;
sbit out_6=P2^5;
sbit out_7=P2^6;
sbit out_8=P2^7;
#define chu_yu        1
#define ke_shou        2
#define you_du        3
#define qi_ta        4
#define guan        0
#define MIC_VOL 0x43
#define CLK_IN                        33.1776        /* user need modify this value according to clock in */
#define LD_PLL_11                        (uint8)((CLK_IN/2.0)-1)
#define LD_PLL_ASR_19                 (uint8)(CLK_IN*32.0/(LD_PLL_11+1) - 0.51)
#define LD_PLL_ASR_1B                 0x48
#define LD_PLL_ASR_1D                 0x1f
#define LD_ASR_NONE                                14
#define LD_ASR_RUNING                        15
#define LD_ASR_FOUNDOK                    17       
#define LD_ASR_FOUNDZERO                 12       
#define LD_ASR_ERROR                        11
#define LD_MODE_ASR_RUN                0x08
#define LD_MODE_IDLE                0x00
uint8  idata nLD_Mode = LD_MODE_IDLE;                //        用來(lái)記錄當(dāng)前是在進(jìn)行ASR識(shí)別還是在播放MP3
uint8  idata nAsrStatus=0;
uint8  gu=0;
void  delay(unsigned long uldata)
{
        unsigned int j  =  0;
        unsigned int g  =  0;
        for (j=0;j<5;j++)
        {
                for (g=0;g<uldata;g++)
                {
                        _nop_();
                        _nop_();
                        _nop_();
                }
        }
}

void LD_WriteReg( unsigned char address, unsigned char dataout )
{
        P0 = address;
        LD_A0 = 1;
        CSB = 0;
        LD_WR = 0;
_nop_();_nop_();_nop_();

        LD_WR = 1;
        CSB = 1;
_nop_();_nop_();_nop_();

        P0 = dataout;
        LD_A0 = 0;
        CSB = 0;
        LD_WR = 0;
_nop_();_nop_();_nop_();

        LD_WR = 1;
        CSB = 1;
_nop_();_nop_();_nop_();
}

unsigned char LD_ReadReg( unsigned char address )
{
        unsigned char datain;

        P0 = address;
        LD_A0 = 1;
        CSB = 0;
        LD_WR = 0;
_nop_();_nop_();_nop_();

        LD_WR = 1;
        CSB = 1;
_nop_();_nop_();_nop_();

        LD_A0 = 0;
        CSB = 0;
        LD_RD = 0;
_nop_();_nop_();_nop_();

        datain = P0;
        LD_RD = 1;
        CSB = 1;
_nop_();_nop_();_nop_();

        return datain;
}

void LD_reset()
{
        RSTB=1;
        delay(1);
        RSTB=0;
        delay(1);
        RSTB=1;

        delay(1);
        CSB=0;
        delay(1);
        CSB=1;
        delay(1);
}
void LD_Init_Common(void)
{
       
        LD_ReadReg(0x06);
        LD_WriteReg(0x17, 0x35);  
         delay(10);  
        LD_ReadReg(0x06);  
        LD_WriteReg(0x89, 0x03);   
        delay(5);
        LD_WriteReg(0xCF, 0x43);   
        delay(5);
        LD_WriteReg(0xCB, 0x02);
        /*PLL setting*/  
        LD_WriteReg(0x11, LD_PLL_11);
        LD_WriteReg(0x1E,0x00);
  //!!注意,下面三個(gè)寄存器,會(huì)隨晶振頻率變化而設(shè)置不同
    //!!注意,請(qǐng)根據(jù)使用的晶振頻率修改參考程序中的  
        LD_WriteReg(0x19, LD_PLL_ASR_19);   
        LD_WriteReg(0x1B, LD_PLL_ASR_1B);      
        LD_WriteReg(0x1D, LD_PLL_ASR_1D);
        delay(10);
        LD_WriteReg(0xCD, 0x04);
        LD_WriteReg(0x17, 0x4c);
        delay(5);
        LD_WriteReg(0xB9, 0x00);
        LD_WriteReg(0xCF, 0x4F);
        LD_WriteReg(0x6F, 0xFF);
}
void LD_Init_ASR(void)
        {
                   nLD_Mode=LD_MODE_ASR_RUN;
                LD_Init_Common();
                LD_WriteReg(0xBD,0x00);
                LD_WriteReg(0x17,0x48);
                delay( 10 );
                LD_WriteReg(0x3C,0x80);
                LD_WriteReg(0x3E,0x07);
                LD_WriteReg(0x38,0xff);
                LD_WriteReg(0x3A,0x07);
                LD_WriteReg(0x40,0x00);
                LD_WriteReg(0x42,0x08);
                LD_WriteReg(0x44,0x00);
                LD_WriteReg(0x46,0x08);
                delay( 1 );
        }
        uint8 LD_Check_ASRBusyFlag_b2(void)
{
        uint8 j;
        uint8 flag = 0;
        for (j=0; j<10; j++)
        {
                if (LD_ReadReg(0xb2) == 0x21)
                {
                        flag = 1;
                        break;
                }
                delay(10);
        }
        return flag;
}
uint8 LD_AsrAddFixed(void)
{
        uint8 k, flag;
        uint8 nAsrAddLength;
        const char sRecog[5][13] = {"chu yu", "ke shou",
        "you du", "qi ta", "guan"};
        const uint8 pCode[5] = {chu_yu, ke_shou, you_du, guan};
        flag = 1;
        for (k=0; k<5; k++)
        {
                if(LD_Check_ASRBusyFlag_b2() == 0)
                {
                        flag = 0;
                        break;
                }
                LD_WriteReg(0xc1, pCode[k] );
                LD_WriteReg(0xc3, 0 );
                LD_WriteReg(0x08, 0x04);
                delay(1);
                LD_WriteReg(0x08, 0x00);
                delay(1);
                for (nAsrAddLength=0; nAsrAddLength<20;
                nAsrAddLength++)
                {
                        if (sRecog[k][nAsrAddLength] == 0)
                        break;
                        LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
                }
                LD_WriteReg(0xb9, nAsrAddLength);
                LD_WriteReg(0xb2, 0xff);
                LD_WriteReg(0x37, 0x04);
        }
        return flag;
        }
uint8 LD_AsrRun(void)
{
        LD_WriteReg(0x35,MIC_VOL);
        LD_WriteReg(0x1C,0x09);
        LD_WriteReg(0xBD,0x20);
        LD_WriteReg(0x08,0x01);
        delay( 1 );
        LD_WriteReg(0x08,0x00);
        delay( 1 );
        if(LD_Check_ASRBusyFlag_b2() == 0)
        {
        return 0;
        }
        LD_WriteReg(0xB2, 0xff);
        LD_WriteReg(0x37,0x06);
        delay(5);
        LD_WriteReg(0x1C,0x0b);
        LD_WriteReg(0x29,0x10);
        LD_WriteReg(0xBD,0x00);
        EX0=1;
        return 1;
}
uint8 RunASR(void)
{
        uint8 i=0;
        uint8 asrflag=0;
        for (i=0; i<5; i++)
        {
                LD_Init_ASR();
                delay(100);
                if (LD_AsrAddFixed()==0)
                {
                        LD_reset();
                        delay(100);
                        continue;
                }
                delay(10);
                if (LD_AsrRun() == 0)
                {
                        LD_reset();
                        delay(100);
                        continue;
                }
                asrflag=1;
                break;
        }
        return asrflag;
}
uint8 LD_GetResult()
{
        return LD_ReadReg(0xc5 );
}
void mucinit()
{
        P2M1=0X00;
        P2M0=0XFF;
        P3M1=0XFA;
        P3M0=0XFF;
          IT0=1;
        EX0=1;
        EA=1;

}
void ProcessInt0()
{
        uint8 nAsrResCount=0;
        uint8 ucRegVal;
        EX0=0;
        ucRegVal = LD_ReadReg(0x2B);
        if(nLD_Mode == LD_MODE_ASR_RUN)
        {
                // 語(yǔ)音識(shí)別產(chǎn)生的中斷
                // (有聲音輸入,不論識(shí)別成功或失敗都有中斷)
                LD_WriteReg(0x29,0) ;
                LD_WriteReg(0x02,0) ;
                if((ucRegVal & 0x10) &&
                        LD_ReadReg(0xb2)==0x21 &&
                        LD_ReadReg(0xbf)==0x35)
                {
                        nAsrResCount = LD_ReadReg(0xba);
                        if(nAsrResCount>0 && nAsrResCount<=4)
                        {
                                nAsrStatus=LD_ASR_FOUNDOK;
                        }
                        else
                    {
                                nAsrStatus=LD_ASR_FOUNDZERO;
                        }       
                }
                else
                {
                        nAsrStatus=LD_ASR_FOUNDZERO;
                }
                       
                LD_WriteReg(0x2b, 0);
            LD_WriteReg(0x1C,0);
                 ET0=1;
                return;
        }
}
void ExtInt0Handler() interrupt 0
{
  ProcessInt0();
}
void main()
{           
        uint8 nAsrRes;
    mucinit();       
        LD_reset();
        nAsrStatus = LD_ASR_NONE;                //        初始狀態(tài):沒(méi)有在作ASR

                switch(nAsrStatus)
                {
                        case LD_ASR_RUNING:
                        case LD_ASR_ERROR:               
                                break;
                        case LD_ASR_NONE:
                        {
                                nAsrStatus=LD_ASR_RUNING;
                                if (RunASR()==0)        //        啟動(dòng)一次ASR識(shí)別流程:ASR初始化,ASR添加關(guān)鍵詞語(yǔ),啟動(dòng)ASR運(yùn)算
                                {
                                        nAsrStatus = LD_ASR_ERROR;
                                }
                                break;
                        }
                        case LD_ASR_FOUNDOK:
                        {
                                nAsrRes = LD_GetResult();        //        一次ASR識(shí)別流程結(jié)束,去取ASR識(shí)別結(jié)果
                                if(nAsrRes==1)
                                        {
                                        while(1)
                                        {
                                           out_1=1;
                                           out_2=0;
                                           gu=1;
                                           }
                                        }
                                if(nAsrRes==2)
                                        {
                                           out_3=1;
                                           out_4=0;
                                           gu=2;
                                        }
                                if(nAsrRes==3)
                                        {
                                           out_5=1;
                                           out_6=0;
                                           gu=3;
                                        }
                                if(nAsrRes==4)
                                        {
                                           out_7=1;
                                           out_8=0;
                                           gu=4;
                                        }
                                if(nAsrRes==0)
                                {
                                        if(gu==1)
                                         {               
                                          out_1=0;
                                          out_2=1;
                                         }
                                         if(gu==2)
                                         {                 
                                          out_3=0;
                                          out_4=1;
                                         }
                                         if(gu==3)
                                         {
                                          out_5=0;
                                          out_6=1;
                                         }
                                          if(gu==4)
                                         {
                                          out_7=0;
                                          out_8=1;
                                         }               
                                }
                                nAsrStatus = LD_ASR_NONE;
                                break;
                        }
                        case LD_ASR_FOUNDZERO:

                             break;
                        default:
                        {
                                nAsrStatus = LD_ASR_NONE;
                                break;
                        }
                }// switch
        }// while



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕日本一区二区 | 欧美成人精品一区二区男人看 | 一级在线视频 | 亚洲成av人片在线观看 | 国产成人福利在线观看 | 国产视频一区在线观看 | 99久久日韩精品免费热麻豆美女 | 精品乱码一区二区三四区 | 亚洲精品区 | 一区二区不卡 | 欧美日韩高清在线一区 | 日韩精品成人一区二区三区视频 | 国产精品网址 | 亚洲一区二区三区在线 | 中文在线一区 | 日本人麻豆 | 亚洲精品国产一区 | 一区二区三区中文字幕 | 成人在线视频网址 | 91亚洲视频在线 | 国产精品久久久久久久久图文区 | 狠狠干狠狠插 | 国产伦精品一区二区三区精品视频 | 国产精品久久久久久久久久久久 | 自拍偷拍中文字幕 | 国产精品99久久久久久宅男 | 久久免费精品视频 | 免费视频久久 | 亚洲欧美中文日韩在线v日本 | 中文字幕一区在线 | 中文字幕国产日韩 | 懂色av一区二区三区在线播放 | 中文字幕成人av | 亚洲区中文字幕 | 成人在线网址 | 亚洲精品日韩在线 | 欧美日韩中文国产一区发布 | 欧美黑人一区二区三区 | 性天堂网 | 精品久久久久一区二区国产 | 欧美一区二区免费视频 |