/* vcm.c rsc300 VCM keil C SDK demo ver2.0 */ /*------------------------------------------*/ #include #include /* VCM i/o define */ sbit wled = P3^7; sbit k1 = P3^2; sbit k2 = P3^3; sbit k3 = P3^4; sbit k4 = P3^5; sbit MHS = P1^0; sbit SHS = P1^1; sbit DAT = P1^2; sbit RST = P1^3; #define uchar unsigned char #define p printf #define VCNO 5 char code *title="vcm.c vcm C SDK ....."; uchar lno; /* listen no */ uchar mno; /* modufy no */ uchar okf; /* vc recog ok */ uchar ans; /* vc recog answer */ /*---------------------------------------------*/ delay(int t) { int i,j; for(i=0; i */ { SCON=0x50; TMOD=0x20; TH1 =0xFD; TR1=1; TI =1; } /*-----------------------------------------------------------*/ tx(char c){ while(1) if(TI) break; TI=0; SBUF=c;} /*--------------------------------------------------*/ led_on() { wled=0; } led_off() { wled=1; } /*---------------------------------------------*/ reset() { RST=0; delay(100); RST=1; } /*-------------------------------------------------*/ init_vc() { store(); del_db(); beep(); led_bl(); beep(); led_bl(); beep(); led_bl(); } /*----------------------------------------------*/ train1() { led_on(); train(); led_off(); say_name(); } /*------------------------*/ listen() { set_cp(lno); say_name(); mno=lno; lno++; if(lno==VCNO) lno=0; } /*-----------------------*/ op_ans() { int d; tx('@'); d=ans/10; tx(d+0x30); d=ans%10; tx(d+0x30); } /*------------------------*/ recog1() { led_on(); recog(); led_off(); if(okf) { ans=get_cp1(); // p("ans=%d \n", (int)ans); op_ans(); say_name(); } else tx('X'); //error } /*-------------------*/ vcs() { led_on(); recogs(); led_off(); if(okf) { ans=get_cp1(); // p("ans=%d \n", (int)ans); op_ans(); say_name(); } else tx('X'); //error } /*--------------------------------------------------*/ modify() { set_cp(mno); del_1db(); beep(); delay(500); led_on(); train1(); led_off(); } /*------------------------------------------------------------------------*/ main() { char c; delay(100); RST=1; MHS=1; SHS=1; DAT=1; lno=0; led_bl(); reset(); init_rs232(); //p("test vcm i/o.... "); beep(); if(k1==0) { led_bl(); led_bl(); led_bl(); delay(500); beep(); init_vc(); delay(1000); } // loop....................................................... while(1) { if(k1==0) { led_bl(); train1(); led_bl(); } if(k2==0) { led_bl(); modify(); led_bl(); } if(k3==0) { led_bl(); listen(); led_bl(); } // if(k4==0) { led_on(); recog1(); led_off();} if(k4==0) { delay(3000); if (k4==0) while(1) vcs(); else { led_on(); recog1(); led_off();} } /* uart code * 控制碼 't' : 語音訓練,操作同上 * 控制碼 'm' : 語音修改,操作同上 * 控制碼 'l' : 語音聆聽,操作同上 * 控制碼 'r' : 語音辨認,操作同上,8O51送出控制碼後,等待約 1 秒後, VCM 送出控制碼 '@ab' 用以表示辨認結果,ab 為所辨認的語音樣本編號編碼。 實際辨認結果編號為 no no=10xa+b no 有效值為 0--59 若辨認錯誤則會傳回'X'做回應。 * 控制碼 'R' : 靜音辨認,動作同上。 */ if(RI) { RI=0; c=SBUF; /* if rs232 >>>>>>>>>>>>>>>>>>>>>>>>>>>*/ if(c=='l') { led_bl(); listen(); } if(c=='m') { led_bl(); modify(); } if(c=='r') { led_on(); recog1(); led_off();} if(c=='R') { vcs(); } }/* uart */ }/* loop */ } /*------------------------------------------------------------------*/