300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > STM32单片机+LD3320语音识别模块+MP3模块或者nsy8266语音合成模块制作的语音插座

STM32单片机+LD3320语音识别模块+MP3模块或者nsy8266语音合成模块制作的语音插座

时间:2020-06-27 01:10:12

相关推荐

STM32单片机+LD3320语音识别模块+MP3模块或者nsy8266语音合成模块制作的语音插座

自己利用空闲时间,用32单片机和一些模块做了一个语音插座,既有12V直流电输出,也有两路220交流输出(其中一路可以支持高低档切换,实现原理就是在两个继电器中间串一个1N5408二极管)。本制作语音插座,有PCB、原理图,PCB印制电路板都是原创,还有预留了两个DS18b20温度传感器的焊盘位置和两个按键,一个可以探测5V和3.3V芯片的工作温度,另一个可以探测外部温度,然后配合预留继电器12V供电,可以实现温度控制。除了这些已经连接好了的电路,还把剩余的其他IO口引出,有一组spi协议(后期可以添加显示屏)、3.3v、5v、12v的电源。毕竟是业余时间做的,可能在有些方面不是很完善。

一、资料展示

1.原理图

2.PCB印制电路板

因为自己做的板,所以在布线的时候那那么专业,能用就好。

3.实物图

外观大概就这样,工作状态

4、说明

外壳使用3D打印的,就是第一次使用,建模这些不是很好,打出6面后用热熔枪连接·······

5、代码

#include "LD3320.h"#include "led.h"#include "time.h"#include "delay.h"#include "Relay.h"//#include "mp3.h"#include "syn6288.h"/************************************************************************************//nAsrStatus ÓÃÀ´ÔÚmainÖ÷³ÌÐòÖбíʾ³ÌÐòÔËÐеÄ״̬£¬²»ÊÇLD3320оƬÄÚ²¿µÄ״̬¼Ä´æÆ÷//LD_ASR_NONE:±íʾûÓÐÔÚ×÷ASRʶ±ð//LD_ASR_RUNING£º±íʾLD3320ÕýÔÚ×÷ASRʶ±ðÖÐ//LD_ASR_FOUNDOK:±íʾһ´Îʶ±ðÁ÷³Ì½áÊøºó£¬ÓÐÒ»¸öʶ±ð½á¹û//LD_ASR_FOUNDZERO:±íʾһ´Îʶ±ðÁ÷³Ì½áÊøºó£¬Ã»ÓÐʶ±ð½á¹û//LD_ASR_ERROR:±íʾһ´Îʶ±ðÁ÷³ÌÖÐLD3320оƬÄÚ²¿³öÏÖ²»ÕýÈ·µÄ״̬*********************************************************************************/uint8 nAsrStatus = 0;uint8 nLD_Mode = LD_MODE_IDLE;//ÓÃÀ´¼Ç¼µ±Ç°ÊÇÔÚ½øÐÐASRʶ±ð»¹ÊÇÔÚ²¥·ÅMP3uint8 ucRegVal;uint8 LD_Password=0;uint8 LD_K=0;uint8 nAsrRes=0;void LD3320_START(void){LD3320_init(); nAsrStatus = LD_ASR_NONE;//³õʼ״̬£ºÃ»ÓÐÔÚ×÷ASRnAsrStatus ÉÏÃæÓж¨Òå #define LD_ASR_NONE0x00//±íʾûÓÐÔÚ×÷ASRʶ±ð}///Óû§ÐÞ¸Ävoid LD3320_main(void){switch(nAsrStatus){case LD_ASR_RUNING://#define LD_ASR_RUNING0x01//±íʾLD3320ÕýÔÚ×÷ASRʶ±ðÖÐcase LD_ASR_ERROR://#define LD_ASR_ERROR 0x31//±íʾһ´Îʶ±ðÁ÷³ÌÖÐLD3320оƬÄÚ²¿³öÏÖ²»ÕýÈ·µÄ״̬break;case LD_ASR_NONE: //#define LD_ASR_NONE0x00//±íʾûÓÐÔÚ×÷ASRʶ±ðnAsrStatus=LD_ASR_RUNING;//³õʼ״̬£ºÃ»ÓÐÔÚ×÷ASRnAsrStatus ÉÏÃæÓж¨Òå #define LD_ASR_NONE0x00//±íʾûÓÐÔÚ×÷ASRʶ±ðif (RunASR()==0)//Æô¶¯Ò»´ÎASRʶ±ðÁ÷³Ì£ºASR³õʼ»¯£¬ASRÌí¼Ó¹Ø¼ü´ÊÓÆô¶¯ASRÔËËã{nAsrStatus = LD_ASR_ERROR;}break;case LD_ASR_FOUNDOK:nAsrRes = LD_GetResult();//Ò»´ÎASRʶ±ðÁ÷³Ì½áÊø£¬È¥È¡ASRʶ±ð½á¹û if(nAsrRes==CODE_XFTX){SYN_FrameInfo(0, "ÎÒÔÚ£¬Çë·Ô¸À£¡");LD_Password=1;Bright();}if(LD_Password==1) {TIM2_Int_Init(9999,7199);switch(nAsrRes) //¶Ô½á¹ûÖ´ÐÐÏà¹Ø²Ù×÷,¿Í»§ÐÞ¸Ä{case CODE_DKCZ://´ò¿ª²å×ùif(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==0) //Åжϲå×ùÊÇ·ñÔڹرÕ״̬{Relay2_on();//´ò¿ª²å×ùSYN_FrameInfo(0, "²å×ùÒÑ´ò¿ª£¡"); }else //²å×ùÒѾ­´ò¿ª£¬²»ÐèÒªÖظ´²Ù×÷SYN_FrameInfo(0, "ÕýÔÚÔËÐÐÖУ¬ÇëÎðÖظ´²Ù×÷£¡"); TIM2_STOP();LD_Password=0;Extinguish();break;case CODE_GBCZ: //¹Ø±Õ²å×ùif(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==1) //Åжϲå×ùÊÇ·ñÔÚ¿ªÆô״̬{Relay2_off(); //¹Ø±ÕµçÔ´SYN_FrameInfo(0, "²å×ùÒѹرգ¡"); }else //²å×ùÒѾ­¹Ø±Õ£¬²»ÐèÒªÖظ´²Ù×÷SYN_FrameInfo(0, "²å×ùδ¹¤×÷£¡"); TIM2_STOP();LD_Password=0;Extinguish();break;case CODE_QNGD://¸ßµµÄ£Ê½if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_3)==1) //ÅжϵçÔ´ÊÇ·ñ´ò¿ª{if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_4)==0) //ÅжÏÊÇ·ñ¹¤×÷Ôڵ͵µ×´Ì¬{Relay1_on(); //¸ßµµÄ£Ê½¹¤×÷ÖÐSYN_FrameInfo(0, "¸ßµ²Ä£Ê½ÒÑ¿ªÆô£¡"); }else//¸ßµµÄ£Ê½ÔËÐÐÖУ¬²»ÒªÒªÖظ´²Ù×÷SYN_FrameInfo(0, "µ±Ç°Ä£Ê½¹¤×÷ÖУ¬ÇëÎðÖظ´²Ù×÷£¡"); }else //µçԴ먦Æô£¬Çë´ò¿ªµçÔ´SYN_FrameInfo(0, "ȡůÆ÷δ¹¤×÷£¬Çë´ò¿ªÈ¡Å¯Æ÷£¡");TIM2_STOP();LD_Password=0;Extinguish();break;case CODE_QNDD://µÍµµÄ£Ê½if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_3)==1) //ÅжϵçÔ´ÊÇ·ñ´ò¿ª{if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_4)==1) //ÅжÏÊÇ·ñ¹¤×÷Ôڸߵµ×´Ì¬{Relay1_off(); //µÍµµÄ£Ê½¹¤×÷ÖÐSYN_FrameInfo(0, "µÍµ²Ä£Ê½ÒÑ¿ªÆô£¡");}else//µÍµµÄ£Ê½ÔËÐÐÖУ¬²»ÒªÒªÖظ´²Ù×÷SYN_FrameInfo(0, "µ±Ç°Ä£Ê½¹¤×÷ÖУ¬ÇëÎðÖظ´²Ù×÷£¡"); }else //µçԴ먦Æô£¬Çë´ò¿ªµçÔ´SYN_FrameInfo(0, "ȡůÆ÷δ¹¤×÷£¬Çë´ò¿ªÈ¡Å¯Æ÷£¡");TIM2_STOP();LD_Password=0;Extinguish();break;case CODE_DKQNQ://´ò¿ªÈ¡Å¯Æ÷if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_3)==0) //ÅжÏÊÇ·ñ¹¤×÷{Relay_on(); //´ò¿ªSYN_FrameInfo(0, "ȡůÆ÷ÒÑ´ò¿ª£¡");}else//ÒѾ­ÔÚ¹¤×÷¿©£¡SYN_FrameInfo(0, "ÕýÔÚÔËÐÐÖУ¬ÇëÎðÖظ´²Ù×÷£¡"); TIM2_STOP();LD_Password=0;Extinguish();break;case CODE_GBQNQ://¹Ø±ÕȡůÆ÷if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_3)==1) //ÅжÏÊÇ·ñ¹¤×÷{Relay_off(); //¹Ø±ÕSYN_FrameInfo(0, "ȡůÆ÷Òѹرգ¡");}else//ÒѾ­¹Ø±Õ¿©£¡SYN_FrameInfo(0, "ȡůÆ÷δ¹¤×÷£¡"); TIM2_STOP();LD_Password=0;Extinguish();break;case CODE_DKFS:if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_12)==1) //ÅжϵçÔ´ÊÇ·ñ´ò¿ªSYN_FrameInfo(0, "·çÉÈÔËÐÐÖУ¬ÇëÎðÖØвÙ×÷£¡"); else {Relay3_on(); SYN_FrameInfo(0, "·çÉÈÒѹ¤×÷£¡");}TIM2_STOP();LD_Password=0;Extinguish();break;case CODE_GBFS:if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_12)==0) //ÅжϵçÔ´ÊÇ·ñ´ò¿ªSYN_FrameInfo(0, "·çÉÈδ¹¤×÷£¡"); else {Relay3_off(); SYN_FrameInfo(0, "·çÉÈÒѹرգ¡");}TIM2_STOP();LD_Password=0;Extinguish();break;case CODE_GBSYSB:Relay_off(); //¹Ø±ÕµçÔ´Relay1_off(); //¹Ø±Õ¹¦ÂÊRelay2_off(); //¹Ø±ÕÒ¡Í· Relay3_off(); //¹Ø±ÕÖ±Á÷É豸2SYN_FrameInfo(0, "É豸¶¼ÒѾ­¹ØÀ²£¡"); TIM2_STOP();LD_Password=0;Extinguish();break;default:break;}}nAsrStatus = LD_ASR_NONE;break; case LD_ASR_FOUNDZERO:default:nAsrStatus = LD_ASR_NONE;break;}}static uint8 LD_AsrAddFixed(void){uint8 k, flag;uint8 nAsrAddLength;#define DATE_A 12 //Êý×é¶þάÊýÖµ#define DATE_B 30//Êý×éһάÊýÖµ//Ìí¼Ó¹Ø¼ü´Ê£¬Óû§ÐÞ¸Äuint8 sRecog[DATE_A][DATE_B] = {"xiao feng tong xue",\"da kai cha zuo",\"guan bi cha zuo",\"da kai feng shan",\"guan bi feng shan",\"da kai qu nuan qi",\"guan bi qu nuan qi",\"qu naun di dang" ,\"qu naun gao dang", \"guan bi shuo you she bei"};uint8 pCode[DATE_A] = {CODE_XFTX,\CODE_DKCZ,\CODE_GBCZ,\CODE_DKFS,\CODE_GBFS,\CODE_DKQNQ,\CODE_GBQNQ,\CODE_QNDD,\CODE_QNGD,\CODE_GBSYSB};//Ìí¼Óʶ±ðÂ룬Óû§ÐÞ¸Äflag = 1;for (k=0; k<DATE_A; k++){if(LD_Check_ASRBusyFlag_b2() == 0){flag = 0;break;}LD_WriteReg(0xc1, pCode[k] );LD_WriteReg(0xc3, 0);LD_WriteReg(0x08, 0x04);LD3320_delay(1);LD_WriteReg(0x08, 0x00);LD3320_delay(1);for (nAsrAddLength=0; nAsrAddLength<DATE_B; 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;}///Óû§ÐÞ¸Ä end///Ïà¹Ø³õʼ»¯static void LD3320_init(void)//³õʼ»¯{LD3320_GPIO_Cfg(); //³õʼ»¯GPIOLD3320_EXTI_Cfg(); //³õʼ»¯ÖжÏLD3320_SPI_cfg();//³õʼ»¯SPIͨѶLD_reset();//I/O¿Ú¸ßµÍÔÚ¼ÓÑÓʱ£¬ÕâÀïµÄÑÓʱÊÇËÀÑÓʱ£¬ÌرðҪעÒâÒª¸Ä}static void LD3320_GPIO_Cfg(void)//³õʼ»¯»¯IO{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(LD3320RST_GPIO_CLK | LD3320CS_GPIO_CLK,ENABLE);//LD_CS/RSETGPIO_InitStructure.GPIO_Pin =LD3320CS_PIN; //GPIO_Pin_4GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(LD3320CS_GPIO_PORT,&GPIO_InitStructure); //GPIOAGPIO_InitStructure.GPIO_Pin =LD3320RST_PIN;//GPIO_Pin_15GPIO_Init(LD3320RST_GPIO_PORT,&GPIO_InitStructure); //GPIOB}static void LD3320_EXTI_Cfg(void){EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);RCC_APB2PeriphClockCmd(LD3320IRQ_GPIO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin =LD3320IRQ_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LD3320IRQ_GPIO_PORT, &GPIO_InitStructure);//ÍⲿÖжÏÏßÅäÖÃGPIO_EXTILineConfig(LD3320IRQEXIT_PORTSOURCE, LD3320IRQPINSOURCE);EXTI_InitStructure.EXTI_Line = LD3320IRQEXITLINE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);//ÖжÏǶÌ×ÅäÖÃNVIC_InitStructure.NVIC_IRQChannel = LD3320IRQN;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}static void LD3320_SPI_cfg(void){SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;//spi¶Ë¿ÚÅäÖÃRCC_APB2PeriphClockCmd(LD3320SPI_CLK,ENABLE);RCC_APB2PeriphClockCmd(LD3320WR_GPIO_CLK | LD3320SPIMISO_GPIO_CLK | LD3320SPIMOSI_GPIO_CLK | LD3320SPISCK_GPIO_CLK,ENABLE);GPIO_InitStructure.GPIO_Pin = LD3320SPIMISO_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(LD3320SPIMISO_GPIO_PORT,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = LD3320SPIMOSI_PIN;GPIO_Init(LD3320SPIMOSI_GPIO_PORT,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = LD3320SPISCK_PIN;GPIO_Init(LD3320SPISCK_GPIO_PORT,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = LD3320WR_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(LD3320WR_GPIO_PORT, &GPIO_InitStructure);LD_CS_H();SPI_Cmd(LD3320SPI, DISABLE);SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //È«Ë«¹¤SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //Ö÷ģʽSPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8λSPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //ʱÖÓ¼«ÐÔ ¿ÕÏÐ״̬ʱ£¬SCK±£³ÖµÍµçƽSPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //ʱÖÓÏàλ Êý¾Ý²ÉÑù´ÓµÚÒ»¸öʱÖÓ±ßÑØ¿ªÊ¼SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //Èí¼þ²úÉúNSSSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; //²¨ÌØÂÊ¿ØÖÆ SYSCLK/128SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //Êý¾Ý¸ßλÔÚÇ°SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC¶àÏîʽ¼Ä´æÆ÷³õʼֵΪ7SPI_Init(LD3320SPI, &SPI_InitStructure);SPI_Cmd(LD3320SPI, ENABLE);}///Ïà¹Ø³õʼ»¯ end ///Öмä²ãvoid EXTI9_5_IRQHandler(void){if(EXTI_GetITStatus(LD3320IRQEXITLINE)!= RESET ) {ProcessInt(); EXTI_ClearFlag(LD3320IRQEXITLINE);EXTI_ClearITPendingBit(LD3320IRQEXITLINE);//Çå³ýLINEÉϵÄÖжϱê־λ } }static void LD3320_delay(unsigned long uldata){unsigned int i = 0;unsigned int j = 0;unsigned int k = 0;for (i=0;i<5;i++){for (j=0;j<uldata;j++){k = 200;while(k--);}}}static uint8 RunASR(void){uint8 i=0;uint8 asrflag=0;for (i=0; i<5; i++)//·ÀÖ¹ÓÉÓÚÓ²¼þÔ­Òòµ¼ÖÂLD3320оƬ¹¤×÷²»Õý³££¬ËùÒÔÒ»¹²³¢ÊÔ5´ÎÆô¶¯ASRʶ±ðÁ÷³Ì{LD_AsrStart();//³õʼ»¯ASRLD3320_delay(100);if (LD_AsrAddFixed()==0)//Ìí¼Ó¹Ø¼ü´ÊÓïµ½LD3320оƬÖÐ{LD_reset();//LD3320оƬÄÚ²¿³öÏÖ²»Õý³££¬Á¢¼´ÖØÆôLD3320оƬLD3320_delay(50);//²¢´Ó³õʼ»¯¿ªÊ¼ÖØÐÂASRʶ±ðÁ÷³Ìcontinue;}LD3320_delay(10);if (LD_AsrRun() == 0){LD_reset(); //LD3320оƬÄÚ²¿³öÏÖ²»Õý³££¬Á¢¼´ÖØÆôLD3320оƬLD3320_delay(50);//²¢´Ó³õʼ»¯¿ªÊ¼ÖØÐÂASRʶ±ðÁ÷³Ìcontinue;}asrflag=1;break;//ASRÁ÷³ÌÆô¶¯³É¹¦£¬Í˳öµ±Ç°forÑ­»·¡£¿ªÊ¼µÈ´ýLD3320ËͳöµÄÖжÏÐźÅ}return asrflag;}static void LD_reset(void){LD_RST_H();//GPIO_SetBits(GPIOB, GPIO_Pin_15)LD3320_delay(100);LD_RST_L();//GPIO_ResetBits(GPIOB, GPIO_Pin_15)LD3320_delay(100);LD_RST_H();//GPIO_SetBits(GPIOB, GPIO_Pin_15)LD3320_delay(100);LD_CS_L();//GPIO_ResetBits(GPIOA, GPIO_Pin_4)LD3320_delay(100);LD_CS_H(); //GPIO_SetBits(GPIOA, GPIO_Pin_4)LD3320_delay(100);}static void LD_AsrStart(void){LD_Init_ASR();}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;}LD3320_delay(10);}return flag;}///Öмä²ãend///¼Ä´æÆ÷²Ù×÷static uint8 spi_send_byte(uint8 byte){while (SPI_I2S_GetFlagStatus(LD3320SPI, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(LD3320SPI,byte);while (SPI_I2S_GetFlagStatus(LD3320SPI,SPI_I2S_FLAG_RXNE) == RESET);return SPI_I2S_ReceiveData(LD3320SPI);}static void LD_WriteReg(uint8 data1,uint8 data2){LD_CS_L();LD_SPIS_L();spi_send_byte(0x04);spi_send_byte(data1);spi_send_byte(data2);LD_CS_H();}static uint8 LD_ReadReg(uint8 reg_add){uint8 i;LD_CS_L();LD_SPIS_L();spi_send_byte(0x05);spi_send_byte(reg_add);i=spi_send_byte(0x00);LD_CS_H();return(i);}static uint8 LD_GetResult(void){return LD_ReadReg(0xc5);}static uint8 LD_AsrRun(void){LD_WriteReg(0x35, MIC_VOL);LD_WriteReg(0x1C, 0x09);LD_WriteReg(0xBD, 0x20);LD_WriteReg(0x08, 0x01);LD3320_delay( 5 );LD_WriteReg(0x08, 0x00);LD3320_delay( 5);if(LD_Check_ASRBusyFlag_b2() == 0){return 0;}LD_WriteReg(0xB2, 0xff);LD_WriteReg(0x37, 0x06);LD_WriteReg(0x37, 0x06);LD3320_delay(5);LD_WriteReg(0x1C, 0x0b);LD_WriteReg(0x29, 0x10);LD_WriteReg(0xBD, 0x00); return 1;}static void ProcessInt(void){uint8 nAsrResCount=0;ucRegVal = LD_ReadReg(0x2B);// ÓïÒôʶ±ð²úÉúµÄÖжÏ//£¨ÓÐÉùÒôÊäÈ룬²»ÂÛʶ±ð³É¹¦»òʧ°Ü¶¼ÓÐÖжϣ©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);//д0:ADC²»¿ÉÓÃLD_WriteReg(0x29,0);LD_WriteReg(0x02,0);LD_WriteReg(0x2B,0);LD_WriteReg(0xBA,0);LD_WriteReg(0xBC,0);LD_WriteReg(0x08,1);//Çå³ýFIFO_DATALD_WriteReg(0x08,0);//Çå³ýFIFO_DATAºó ÔÙ´Îд0}static void LD_Init_Common(void){LD_ReadReg(0x06); LD_WriteReg(0x17, 0x35); LD3320_delay(5);LD_ReadReg(0x06); LD_WriteReg(0x89, 0x03); LD3320_delay(5);LD_WriteReg(0xCF, 0x43); LD3320_delay(5);LD_WriteReg(0xCB, 0x02);/*PLL setting*/LD_WriteReg(0x11, LD_PLL_11); if (nLD_Mode == LD_MODE_MP3){LD_WriteReg(0x1E, 0x00); LD_WriteReg(0x19, LD_PLL_MP3_19); LD_WriteReg(0x1B, LD_PLL_MP3_1B); LD_WriteReg(0x1D, LD_PLL_MP3_1D);}else{LD_WriteReg(0x1E,0x00);LD_WriteReg(0x19, LD_PLL_ASR_19); LD_WriteReg(0x1B, LD_PLL_ASR_1B);LD_WriteReg(0x1D, LD_PLL_ASR_1D);}LD3320_delay(5);LD_WriteReg(0xCD, 0x04);LD_WriteReg(0x17, 0x4c); LD3320_delay(1);LD_WriteReg(0xB9, 0x00);LD_WriteReg(0xCF, 0x4F); LD_WriteReg(0x6F, 0xFF); }static void LD_Init_ASR(void){nLD_Mode=LD_MODE_ASR_RUN;LD_Init_Common();LD_WriteReg(0xBD, 0x00);LD_WriteReg(0x17, 0x48);LD3320_delay(5);LD_WriteReg(0x3C, 0x80); LD_WriteReg(0x3E, 0x07);LD_WriteReg(0x38, 0xff); LD_WriteReg(0x3A, 0x07);LD_WriteReg(0x40, 0);LD_WriteReg(0x42, 8);LD_WriteReg(0x44, 0); LD_WriteReg(0x46, 8); LD3320_delay( 1 );}///¼Ä´æÆ÷²Ù×÷ end/*********************************************END OF FILE**********************/

代码太多了,我就不写出来咯,自行可以去程序里面看。在资料里有单独的nsy6288、MP3、LD3320的一些单一代码,直接修改一下就能移植。有些代码的注释没有修改到,是错误的。看的时候注意一下就好。

6、视频

/video/BV1Fq4y147Rm/ 哔哩哔哩

7、资料

资料下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。