扬州职业大学——电子工程系 智能语音玩具 毕业论文
{
for (g=0;g void FlashLED(uint8 nTimes) { uint8 k; for (k=0; k LED1=0; LED2=0; delay(15000); LED1=1; LED2=1; delay(15000); } } void PlaySound(uint8 nCode) { switch(nCode) { case CODE_TANGSHI://播放“鹅鹅鹅,曲颈向天歌” nMp3StartPos = MP3_TANGSHI_START; nMp3Size = MP3_TANGSHI_SIZE; LED_TANGSHI=1; nSuanshuFlag = 0; break; case CODE_SUANSHU://播放“你出题我来算” nMp3StartPos = MP3_WANT_START; nMp3Size = MP3_WANT_SIZE; LED_SUANSHU=1; nSuanshuFlag = 1; break; case CODE_YIJIAYI://播放“等于二” { if(nSuanshuFlag) { nMp3StartPos = MP3_TWO_START; 第 26 页 共 45 页 扬州职业大学——电子工程系 智能语音玩具 毕业论文 nMp3Size = MP3_TWO_SIZE; LED_YIJIAYI=1; } else { nMp3StartPos = 0x000; nMp3Size = 0x5; } }break; case CODE_ERJIAER://播放“等于四” { if(nSuanshuFlag) { nMp3StartPos = MP3_FOUR_START; nMp3Size = MP3_FOUR_SIZE; LED_ERJIAER=1; } else { nMp3StartPos = 0x000; nMp3Size = 0x5; } } break; case CODE_ABORT://播放“我实在听不清” 播放nMp3StartPos = MP3_ABORT_START; nMp3Size = MP3_ABORT_SIZE; break; case CODE_AGAIN://“我听不清” nMp3StartPos = MP3_AGAIN_START; nMp3Size = MP3_AGAIN_SIZE; break; case CODE_DEFAULT://播放”我是小艾” nMp3StartPos = MP3_NIHAO_START; nMp3Size = MP3_NIHAO_SIZE; break; default:break; } LD_Init_MP3(); LD_AdjustMIX2SPVolume(15); LD_play(); } void IO_Send_Byte(uint8 dataout) 第 27 页 共 45 页 扬州职业大学——电子工程系 智能语音玩具 毕业论文 { uint8 i = 0; FLASH_CS = 0; for (i=0; i<8; i++) { if ((dataout & 0x80) == 0x80) FLASH_DIO = 1; else FLASH_DIO = 0; FLASH_CLK = 1; dataout = (dataout << 1); FLASH_CLK = 0; } } uint8 RunASR() { uint8 i=0; uint8 asrflag=0; for (i=0; i<5; i++) { LD_AsrStart(); 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; } 第 28 页 共 45 页 扬州职业大学——电子工程系 智能语音玩具 毕业论文 void ExtInt0Handler(void) interrupt 0 { nInt0Flag = 1; } #define RELOAD_COUNT 0xFA //22.1184MHz,12T,9600baud void serial_port_initial(); void send_UART(unsigned char i); //void UART_Interrupt_Receive(void); /*void serial_port_initial() //使用定时器1作为波特率发生器 { SCON = 0x50; //0101 0000 8位可变波特率,无奇偶校验位 TMOD = 0x21; //0010 0001 设置定时器1为8位自动重装计数器 TH1 = RElOAD_COUNT; //设置定时器1自动重装数 TL1 = RElOAD_COUNT; //设置定时器1自动重装数 TR1 = 1; //开定时器1 ES = 1; //允许串口中断 EA = 1; //开总中断 }*/ void serial_port_initial() //使用独立波特率发生器作为波特率发生器 { SCON = 0x50; //0101 0000 8位可变波特率,无奇偶校验位 BRT = RELOAD_COUNT; //设置自动重装数 AUXR1 = 0; //串口在P3上 AUXR = 0x11; //T0x12,T1x12,UART_M0x6,BRTR,S2SMOD,BRTx12,XRAM,S1BRS //Baud = Fosc/(256-RELOAD_COUNT)/32/12(12T模式) //Baud = Fosc/(256-RELOAD_COUNT)/32(1T模式) //此时为12T模式 //BRTR =1,启动独立波特率发生器 //S1BRS=1,串口1选择独立波特率发生器作为波特率发生器 //此时定时器1可以释放出来作为定时器,计数器,时钟输出使用 //AUXR1 = 0x80; //释放该行指令,则串行口从P3口切换至P1口 ES = 1; //允许串口中断 EA = 1; //开总中断 } 第 29 页 共 45 页 扬州职业大学——电子工程系 智能语音玩具 毕业论文 void send_UART(unsigned char i) { ES = 0; //关串口中断 TI = 0; //清零串口发送完成中断请求标志 SBUF = i; while(TI==0); //等待发送完成 TI = 0; //清零串口发送完成中断请求标志 ES = 1; //允许串口中断 } /-------------------------------------------------------------------------------- C51 Core SFRs // 7 6 5 4 3 2 1 0 Reset Value SfrACC=0xE0//Accumulator 0000,0000 sfrB=0xF0//BRegister 0000,0000 sfr PSW = 0xD0; //Program Status Word CY AC F0 RS1 RS0 OV F1 P 0000,0000 //----------------------------------- sbit CY = PSW^7; sbit AC = PSW^6; sbit F0 = PSW^5; sbit RS1 = PSW^4; sbit RS0 = PSW^3; sbit OV = PSW^2; sbit P = PSW^0; //----------------------------------- sfrSP=0x81;//StackPointer 0000,0111 sfrDPL=0x82;//DataPointerLowByte 0000,0000 sfrDPH=0x83;//DataPointerHighByte 0000,0000 //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机系统管理特殊功能寄存器 // 7 6 5 4 3 2 1 0 Reset Value sfr PCON = 0x87; //Power Control SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 0001,0000 // 7 6 5 4 3 2 1 0 Reset Value sfr AUXR = 0x8E; //Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS 0000,0000 //----------------------------------- sfr AUXR1 = 0xA2; //Auxiliary Register 1 - PCA_P4 SPI_P4 S2_P4 GF2 第 30 页 共 45 页 //新一代 1T 8051系列 单片机内核特殊功能寄存器