×
单片机 > 单片机程序设计 > 详情

单片机+JQ6500语音模块使用代码

发布时间:2020-12-24 发布时间:
|

最近在家无聊做东西玩,要用一个模块驱动喇叭放提示音,一开始买的是WT588DM01图的就是自带8M Flash省心,结果TM还要另外买30几块钱的烧写器才能用。


后来又咬咬牙买了个JQ6500语音模块,插USB连电脑就能烧写mp3进去,果然还是深圳厂商洞察需求。


买是买来了,但是厂家配的资料还分3个版本,PCB外观都改了,PDF没更新,只好自己捣鼓,按着参考资料用个51试试手。

 

这是PDF里面的模块外面图,实际买来的长下面的样子

 

芯片是24脚,模块16脚。引出来的16个脚没变,就是模块PCB板上面有略微变化,但是不影响对模块引出来的16个脚直接使用。

 

模块接线原理图,SPK+和SPK-实测可以直接接无源蜂鸣器。


单片机源程序如下:

#include //头文件

#include

/*

本模块的第九脚也就是RX脚连接到单片机的P3^1

第十脚也就是TX脚连接到单片机的P3^0(如果你不处理本模块返回的数据可以不连接)

同时本模块和单片机还要共地急GND连接GND

本模块五伏供电也可以直接由单片机上的电源供电

*/


typedef   unsigned char  uint8;

typedef   unsigned int   uint16;

sbit KEY1=P3^2;//第一曲键

sbit KEY2=P3^3;//第一曲循环键

sbit KEY3=P3^4;//暂停键

sbit KEY4=P3^5;//进入睡眠键



uint8 First[]={0x7E,0x04,0x03,0x00,0X01,0xEF};//第一曲指令

uint8 Next[]={0x7E,0x03,0x11,0x01,0xEF};                                    //            第一首循环

uint8 Add[]={0x7E ,0x02, 0x0E, 0xEF};                                        //                          0x0e暂停

uint8 Sub[]={0x7E ,0x02 ,0x0A, 0xEF};         //                                     0x0a进入睡眠


void delay150ms(void)   //误差 -0.000000000047us

{

    unsigned char a,b,c;

    for(c=6;c>0;c--)

        for(b=52;b>0;b--)

            for(a=220;a>0;a--);

    _nop_();  //if Keil,require use intrins.h

}





/*

* UART初始化

* 波特率:9600

*/

void UART_init(void)

{

    SCON = 0x50;        // 10位uart,允许串行接受


    TMOD = 0x20;        // 定时器1工作在方式2(自动重装)                        0010 0000

    TH1 = 0xFD;

    TL1 = 0xFD;         //设置波特率为9600


    TR1 = 1;

}


/*

* UART 发送一字节

入口参数uint8的数据类型 即要发送的数据

*/

void UART_send_byte(uint8 dat)

{

        SBUF = dat;

        while (TI == 0);

        TI = 0;

}


/*

* UART 发送字符串 

  第一个参数要发送字符串或数据的首地址

  第二个参数是要发送的数据或字符串的长度

*/

void UART_send_string(uint8 *buf,uint8 len)

{  uint8 i;

        for(i=0;i

                UART_send_byte(*buf++);

}


main()

{

        UART_init();//串口初始化

        

        while (1)   //一个大循环一直在检测按键和发送指令

        {  if(KEY1==0)//如果第一个键被按下播放第一段


    {                while(!KEY1);//等待按键松开

                         UART_send_string(First,6);

    }                

                else if(KEY2==0)//如果第二个按键按下循环第一曲


    {                while(!KEY2);//等待按键松开

                         UART_send_string(Next,5);

                         delay150ms();                           //经测试,两个指令之间延时150ms效果最好

                         UART_send_string(First,6);

    }                

                else if(KEY3==0)//如果第三个按键按下暂停播放

                        {                while(!KEY3);//等待按键松开

                         UART_send_string(Add,4);

    }        

else if(KEY4==0)//如果第四个按键按下进入睡眠状态


    {                while(!KEY4);//等待按键松开

                         UART_send_string(Sub,4);

    }                        

        }


}


用到了四个按键,还有一个串口,每检测到一个按键的按下就利用单片机给模块JQ6500发串口指令,两个指令之间不少于150ms(实测),不然会没反应。

关键字:单片机  JQ6500  语音模块


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何升级STM32单片机的代码