扬州职业大学——电子工程系 智能语音玩具 毕业论文
#define CLK_IN 22.1184 /* user need modify this value according to clock in */ #define LD_PLL_11 (uint8)((CLK_IN/2.0)-1)
#define LD_PLL_1D (uint8)(((180.0*((LD_PLL_11)+1))/(CLK_IN))-1) #define LD_PLL_19 0x1f #define LD_PLL_1B 0x40
#define LD_LEDMTR_FREQ (uint8)((CLK_IN*1000000/8)/12700)
// LD chip fixed values.
#define RESUM_OF_MUSIC 0x01 #define CAUSE_MP3_SONG_END 0x20
#define MASK_INT_SYNC 0x10 #define MASK_INT_FIFO 0x04 #define MASK_AFIFO_INT 0x01 #define MASK_FIFO_STATUS_AFULL 0x08 #define MASK_ADPCM_START 0x01
#define LD_INDEX_PORT (*((volatile uint8 xdata*)(0x8100))) #define LD_DATA_PORT (*((volatile uint8 xdata*)(0x8000)))
void LD_WriteReg( uint8 ulAddr, uint8 ucVal ); uint8 LD_ReadReg( uint8 ulAddr ); void LD_reset();
void LD_Init_Common(); void LD_Init_MP3(); void LD_Init_ASR();
void LD_play();
void LD_AdjustMIX2SPVolume(uint8 value); void LD_ReloadMp3Data();
void LD_ReloadMp3Data_Online();
uint8 LD_ProcessAsr(uint32 RecogAddr); void LD_AsrStart(); uint8 LD_AsrRun();
uint8 LD_AsrAddFixed(); uint8 LD_GetResult();
void LD_ReadMemoryBlock(uint8 dev, uint8 * ptr, uint32 addr, uint8 count); void LD_WriteMemoryBlock(uint8 dev, uint8 * ptr, uint32 addr, uint8 count);
extern uint32 nMp3StartPos; extern uint32 nMp3Size;
第 21 页 共 45 页
扬州职业大学——电子工程系 智能语音玩具 毕业论文
extern uint32 nMp3Pos; extern uint8 bMp3Play;
extern uint8 idata nLD_Mode;
//CODE_TANGSHI, CODE_SUANSHU, CODE_YIJIAYI, CODE_ERJIAER,
#define CODE_DEFAULT 0 #define CODE_TANGSHI 1 #define CODE_SUANSHU 3 #define CODE_YIJIAYI 7 #define CODE_ERJIAER 8 #define CODE_ABORT 9 #define CODE_AGAIN 11
void delay(unsigned long uldata);
#define MIC_VOL 0x43 #endif
sbit LED_ERJIAER =P2^4; sbit LED_DEFAULT =P2^5;
uint8 idata nAsrStatus=0; uint8 idata nInt0Flag=0;
uint8 idata nMP3Flag=0;//MP3播放完毕标志 uint8 idata nSuanshuFlag=0;//\你出题\播放标志 //uint8 idata nFlag=0;//播放标志
//#define MP3_ANOTHER_START 0xE000;//还想玩些什么 //#define MP3_ANOTHER_SIZE 0x1000;
#define MP3_TANGSHI_START 0x4000;//鹅鹅鹅,曲颈向天歌 #define MP3_TANGSHI_SIZE 0x4000;
#define MP3_FOUR_START 0x2000;//等于四 #define MP3_FOUR_SIZE 0x2000;
#define MP3_TWO_START 0x0000;//等于二 #define MP3_TWO_SIZE 0x2000;
#define MP3_AGAIN_START 0x10000;//我听不清 #define MP3_AGAIN_SIZE 0x2000;
#define MP3_ABORT_START 0xD000;//我实在听不清 #define MP3_ABORT_SIZE 0x3000;
#define MP3_WANT_START 0xB000;//你出题我来算 #define MP3_WANT_SIZE 0x2000;
#define MP3_NIHAO_START 0x8000;//你好,我是小艾 #define MP3_NIHAO_SIZE 0x3000;
extern void _nop_ (void);
第 22 页 共 45 页
扬州职业大学——电子工程系 智能语音玩具 毕业论文
void MCU_init();
void FlashLED(uint8 nTimes); void PlaySound(uint8 nCode); uint8 RunASR(); void ProcessInt0();
void main() {
uint8 idata nAsrRes; uint8 idata nTemp = 0; uint8 idata nflag = 0; uint16 idata ncount = 0;
FlashLED(3);
MCU_init();
serial_port_initial();//串口初始化
send_UART(0x34); //串口发送数据表示单片机串口正常工作 LD_reset();
nAsrStatus = LD_ASR_NONE; nSuanshuFlag = 0;
PlaySound(CODE_DEFAULT);//PlaySound(CODE_TANGSHI); while(1) {
if(ncount<10000) {
ncount++; } else {
ncount = 0; if(nflag) { LED_DEFAULT = 1; nflag = 0; } else { LED_DEFAULT = 0; nflag = 1; } }
第 23 页 共 45 页
扬州职业大学——电子工程系 智能语音玩具 毕业论文
if (nInt0Flag) { ProcessInt0();//对识别结果预读,置位识别成功标志位 continue; }
if (bMp3Play!=0) continue;
switch(nAsrStatus)//根据ASR的状态进行操作
{ case LD_ASR_RUNING:break; case LD_ASR_ERROR: break; case LD_ASR_NONE: { FlashLED(4); nAsrStatus=LD_ASR_RUNING; if (RunASR()==0)//此时进行声音识别 { nAsrStatus = LD_ASR_ERROR; LED1=0; LED2=0; } break; } case LD_ASR_FOUNDOK://识别成功,进行相应操作 { FlashLED(2); P2=0; nAsrRes = LD_GetResult(); PlaySound(nAsrRes);//播放声音
send_UART(0xAA); //串口发送数据表示单片机串口正常工作 send_UART(nAsrRes); //串口发送数据表示单片机串口正常工作 nAsrStatus = LD_ASR_NONE; break; } case LD_ASR_FOUNDZERO: { if(nTemp) {
PlaySound(CODE_ABORT); nTemp = 0; } else {
第 24 页 共 45 页
扬州职业大学——电子工程系 智能语音玩具 毕业论文
}
void MCU_init() {
LED1=0; LED2=0; P0 = 0xff;
P1 = 0xfe;//选中LD3320的并行模式 P2 = 0;//0xBf; P3 = 0xf7; P4 = 0x0f;
IP=0; IPH=0;
PX0=1; PT0=1; PS=1;
IPH |= 1;
EX0=0; EX1=0; ET0=0; EA=1; }
void delay(unsigned long uldata) {
unsigned int j = 0; unsigned int g = 0; for (j=0;j<5;j++)
}break; default: { FlashLED(1); nAsrStatus = LD_ASR_NONE; break; } }// switch }// while
PlaySound(CODE_AGAIN);
nTemp = 1; }/**/
nAsrStatus = LD_ASR_NONE;
第 25 页 共 45 页