基于STM32C8T6语音数字的播报小算法


前言
因为我的毕设时超市收银系统,自己12月份课设学习了一款与语音播报模块,基于毕设需要,就顺手写个数字语音播报小算法,如有不足,请在下方评论指正,新手小白不懂的也可以提问,我有空看到了也会第一时间回复。


提示:以下是本篇文章正文内容,下面案例可供参考

一、MY2480是什么?

 

 

MY2480-16P
是一款小巧的微集成语音模块。采用
MY2480-24TS MP3
主控芯片,支持
MP3

WAV
格式双解
码。模块最大支持
16M Byte FLASH
;也可外接
U
盘或
USB
数据线连接电脑更换
FLASH
音频文件。该模块内置
3W
功放,可以直接驱动
3W
的喇叭,使用更方便。
应用领域:智能语音播报
模块资料我就不提供,大家自己去淘宝店找,很多的,小白可以锻炼一下找资料能力

二、使用步骤

1.引入库

代码如下:只要用串口发送指令,模块即可执行相关任务

void voice_send_command(u8 command,u8 grama)
{
    usart3_send_byte(0X7E);
    usart3_send_byte(0X03);
    usart3_send_byte(command);
    usart3_send_byte(grama);
    usart3_send_byte(0XEF);
}
2.读入数据

代码如下:取数值运算,这里只给一小部分,具体的去下方下载看代码

        a = strtod((char *)usart1_type.usart1_readBuf, NULL);       //字符类型转浮点型数据
        c = (a - (int)a) * 100;                                     //取小数
//            printf("a=%.2f\r\n", a);
        while (i--)
        {
            if (((int)a) / ((int)pow(10, i)) % 10 > 0)                            // (int)a)强制转换数据类型,如果这里看不懂,好好用C语言编译器练练
            {
                money[i] = i + 1;
                for (j = i; j >= 0; j--)
                {
                    sound[j] = ((int)a) / ((int)pow(10, j)) % 10;   // ((int)pow(10, j))如果j=4  10000  万位,j- 依次类推  %10这里就是取位数的数值
                }                                                                                                                                                    //j=3  1000   千位
                break;                                                                                                                                        //j=2  100    百位
            }                                                                                                                                                            //j=1  10       十位
        }                                                                                                                                                                    //j=0  1           万位
        num_flag = money[i]-1;                                                                             //判断位数,这里赋值时要-1,不然会给你多判断一个位数   

实物接线图

数据验证效果图

小数点这里打印或加延时会导致bug出现,所以就不打印到串口助手这里,具体什么原因不清楚,有会的大神请给个思路和方法验证 


 

总结

这是我的第一篇博客,目的初衷是为了大家能共同进步学习,我是从小白经历过来,理解稍有有点逻辑的程序,就看不懂了,这里我也写了多个注释,希望小白们看懂,变强!

大神看懂了,有想法也可以指出来,乐意接收学习!

作者:Mr'K   (一位热爱嵌入式的预工程师)

百度网盘:百度网盘 请输入提取码

提取码:MrsK

版权声明:本文为CSDN博主「Mr'K123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/h201206/article/details/122652881

生成海报
点赞 0

Mr'K123

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

ESP8266 无限重启踩坑

最近做了一个电子墨水屏万年历,在移植屏幕代码时遇到了esp8266无限软复位的问题,如果你的串口打印是以下图片所示,那么恭喜你问题解决了。 造成软复位的原因是因为,程序里有死循环&#xf