毕业设计| STM32F103全彩FFT音乐频谱+LED年历闹钟显示

大家好,我是写代码的篮球球痴,今天在后台看到有人想找毕业设计的点子。

然后我今天刚好看到一个不错的点子,给大家分享

357c47d0330eaa0aa9f8ef2a1b1381f0.png

看今天分享的毕设是来自点-凡自制的FTF音乐频谱制作,先来看展示效果:

——视频出处:B站点-凡

工作原理

上面演示的音乐频谱工作原理:

793e68b784d1efcca5ac8c9104d101e6.png

通过电脑,手机等外部设备3.5mm耳机孔,输出音频信号,然后经过继电器模块的音源选择后,继电器模块的输出分为两路:一路给有源音响播放音乐;一路经过音频信号调理电路,输入到STM32单片机的引脚进行采样和AD转换后,由程序进行FFT变换,并将FFT变换结果的幅值谱显示在LED全彩显示屏上。

语音播放模块用于播放闹钟语音报时及闹铃音乐。默认情况下继电器模块选择外界设备的音源,当闹钟时间到时,继电器动作切换为语音模块音源。

硬件构成

1)STM32F103核心板 

2)全彩LED显示屏单元板 P4  64*32  (16扫,75接口)满足此条件的LED屏都行,大家可以上某宝买

3)DS3231模块

4)双路继电器模块

5)DY-SV5W语音模块

6)按键模块(自制)

7)音频调理电路(自制)

8)若干个3.5mm音频母座,一条3.5mm公对公音频线

9)16P的牛角座及其16P的灰排线

10)能够提供3A左右的5V直流电源一个,可以是开关电源或电源适配器

另外,由于LED显示屏的内部芯片是5V逻辑电平为了确保单片机与LED显示屏通信正常建议增加两块八路3.3V转5V的电平转换模块,确保电平匹配通信正常。

IO接口连接

IO口的连接看程序中的宏定义即可,这里说一下LED显示屏75接口的定义:

45622791740e670422f772d1a6bfbeb5.png

由于LED显示屏是64*32的,75接口的ABCD是行选信号输入,因此最多只能选择16行,而LED显示屏是32行的,因此这里分为两个16行的上下半屏同时进行动态扫描,因此RGB数据也分为上下半屏,DR1表示上半屏的红色数据串行输入,DR2表示下半屏的红色数据串行输入,其他的类似。CLK是移位脉冲,LED屏一共有64列,因此每显示一行都需要移入64次的数据,并且上下半屏的RGB数据需要同时移入,因为每次行选中的是上下半屏各一行。LAT是用于锁存数据,这样数据移位时,不会改变锁存器的输出。OE是使能输入,当OE低电平时打开整个屏幕的显示,OE高电平时关闭整个屏幕的显示。利用OE就可以很方便的通过PWM控制整体亮度,以及消除鬼影。

自制模块

下图是按键模块的原理图:

78235259ae5f5d5b9db5f5d069d2bf5e.png

图中IO连接只是一个示例,大家可以自己定义。

接下来就是焊接。

d5eb295a95f6522e771f01e866f7fa03.png

按键模块实物 

电脑或手机耳机孔输出的音频信号是交流小信号,信号的振幅较小,而STM32单片机AD转换能够转换的信号是0V~3.3V的直流信号,因此音频信号需要经过音频信号调理电路抬升电平并且进行一定程度的放大,才能输入到STM32单片机的引脚进行采样和AD转换。

1a51bdb9e1b71e74ca4237a0dfb325e3.png

音频调理电路

因此利用可以作为运放使用的耳放TDA1308,使它工作在单电源供电3.3V模式下的反相比例放大,通过R1和R2分压向同相输入端提供直流偏置电压,将音频信号的电平抬升1.65V,这样输出的音频信号就是在1.65V电平基准上做摆幅的直流信号了。这里只取左右声道的其中一个声道进行采样,并且根据傅里叶变换的原理,信号反相并不影响其幅值谱,只对相位谱有影响,而我们显示的音乐频谱是幅值谱,所以不影响显示的正确性。当然也可以将电路做成反相加法电路,将左右声道合成为一路输出。

bd56ff199bae572fdcbef42dc21b78e2.png

黄色框选中的即音频信号调理模块 

接下来是各模块的焊接,最终的电路板整体:

b7bc4e8540da0b27c000be29dba671ea.png

程序源码

项目程序源码及语音模块资料,可以在“嵌入式Linux公众号”回复:音乐频谱,获取。

main.c代码:

/*********哔哩哔哩   点-凡*********/#include "Include.h"
/*** @brief  主函数* @param  无  * @retval 无*/
int main(void)
{ LED_GPIO_Config();Key_GPIO_Config();Alarm_Clock_GPIO_Config();  EXTI_BUSY_Config();I2C_DS3231_Init();I2C_WaitDs3231StandbyState();ADCx_Init();DMAx_Init();FFT_Init();    Calendar_init();BASIC_TIM_Init();  GENERAL_TIM3_Init();GENERAL_TIM4_Init();  while(1){             Task_10ms(&Task_run);Task_30ms(&Task_run);Task_40ms(&Task_run);Task_100ms(&Task_run);Task_1s(&Task_run);  }
}
/*******END OF FILE*******/

有关FFT算法部分的程序,建议参考:第四章快速傅立叶变换(FFT) - 百度文库 (baidu.com)

本项目是点-凡的原创文章,感兴趣的同学可以到csdn或B站搜索点-凡。原文链接:

https://blog.csdn.net/u011504434/article/details/119296746


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VScode 开发stm32无法识别uint32_t,uint16_t,uint8_t问题

1、添加头文件#include “stdint.h”。 2、在c_cpp_properties.json文件中添加__CC_ARM即可。如下图:

毕业这几年的嵌入式开发之路

大家好,我是写代码的篮球球痴今天分享一篇文章,这篇文章的主人公总结了他这些年来的嵌入式之路,希望对大家的职业规划有所帮助。在毕业即失业的年代,来看一位朋友是如何玩转嵌入式开发的,献给迷惘的你。出师不利本科毕…

修改Win10 alt+F4默认选项为关机

1、winr打开路径计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced,当前目录下新建DWORD(32位)文件,命名为“Start_PowerButtonAction”。设置值为2(16进制)。 2、重启电脑。altF4默认为“关…

p1968

我觉得这个评测机和我有仇,写了readgetchar都会超时这么多,最后好像是ios::sync_with_stdio(false);惹的祸... 昨天想找一些水题来写,就看到了这个模拟"水题",想了一下午都不知道怎么搞. 已知一些牛的颜色和位置,求连续相同颜色或连续两种颜色数量相同的区间右端点位…

免费!200块全志XR806开源鸿蒙开发板试用

一板难求的当下,如果上天突然降临一次开发板免费用的活动,我只想说三个字:手慢无!为了让开发者小哥哥小姐姐们体验搭载安谋科技STAR-MC1处理器,面向IoT领域的全志XR806开发板,极术社区特推出2022年新年活动…

你们还留恋windows什么呢?

为什么80%的码农都做不了架构师?>>> 我最近看到一个报道,节录如下: --------------------------------------------- ARM全球总裁Tudor Brown 5月3日表示,预期2015年全球移动PC总量就会达到7.5亿台以上, …

卓老师的这些动图对电子理解真的很有用

01 串行通信在头条电子森林博客中看到一些显示电子系统中信号波形的动图,有助于帮助我们理解传输的机理。特转载如下。1、SPI传输▲ 图1 SPI 数据传输▲ 图1.2 SPI数据传输(2)▲ 图1.3 SPI时序信号2、I2C传输▲ 图1.2.1 I2C总线以及寻址方…

bootscripttable前端排序无效_前端你应该知道的八条bug分享给你们

1: 为什么列表的数据不要让后端同学返回对象, 而应该返回数组?返回对象我们前端直接遍历有没问题啊, 可以正常显示,那是因为你没有遇到下面描述的情况bug现象1:「我明明把3这个key定义在了第二个位置, 但是每次打印出来…

干货|手把手教你自制六足仿生机器人

摘要:经过大一那次失败之后,我决定暂时停止该项目的开发,转而先去学习那些有关嵌入式开发的基础知识,等以后有能力的时候再去独立完成这个六足机器人。很幸运的是在我大学本科即将结束的时候,我已掌握了足够的知识来完…

STM32F4 HAL 库开发报错:Hal_StatusTypeDef is undefined的解决办法

1、直接在头文件出添加#include "stm32f4xx_hal.h"即可。

Comet:基于 HTTP 长连接的“服务器推”技术

http://www.ibm.com/developerworks/cn/web/wa-lo-comet/ “服务器推”技术的应用 请访问 Ajax 技术资源中心,这是有关 Ajax 编程模型信息的一站式中心,包括很多文档、教程、论坛、blog、wiki 和新闻。任何 Ajax 的新信息都能在这里找到。 传统模式的 We…

lol最克制诺手的英雄_LOL:哪些英雄之间非常克制,不管怎么打,遇到就输了?...

大家好,我是你们的老朋友小黑君。在英雄联盟里,英雄们总有克制或者被克制的英雄,就比如“剑魔克制阿卡丽”,尤其是接下来我们要说的这几对,在对局中遇到基本上就输了!冰霜女巫克制妖姬冰霜女巫的出场率一直…

聊聊内卷之下,直博和读完硕士再读博该怎么选择?

大家好,我是写代码的篮球球痴,转发一篇考研读博的文章,希望对大家求学生涯有所帮助。大家好,我是千与千寻,在上一篇推送之中,我们讨论了,五年之内博士是否会出现内卷,阅读量相当的高…

Android 位置服务——BaiduLocation的使用

Android 位置服务——BaiduLocation的使用 原文:Android 位置服务——BaiduLocation的使用版权声明:本文为博主原创文章,欢迎转载,转载请在文章显眼处说明文章出处并给出连接。 https://blog.csdn.net/To_be_Designer/article/details/486854…

asp.net通过登录后修改个人信息_微信号终于可以修改了!快来改一个

上周,微信在安卓端开启了“修改微信号”功能的灰度测试,这也预示着这项新功能很快就能和我们见面了。果不其然,就在刚才微信正式上线了修改微信号的功能,大家期盼多年的功能终于上线了!!!安卓用…

会唱歌的路

文 | 贰沐编辑 | 贰沐 子鱼会唱歌的路?!是什么意思?是说路会自己唱歌吗?开车行驶在普通的道路上,我们能够听到“嗡嗡”的各种杂乱无章的声音,而在有些特殊的路上,我们可以听到路面在发出有节奏的…

那些年,我和发哥在恒大的日子

在广州上班那会,我们在恒大中心旁边的利通大厦上班,我和薛总每天一起上下班,那时候宿舍还有盼盼,有时候玩开心的时候,我就会跟他们说,等过了很多年后,我们要写一本说,书的名字就叫做…

KEIL高级调试——条件断点

在线调试程序时,打断点是非常有效的一种方式,配合单步调试,可以快速定位问题。但是有时候,手动打断点用起来不是那么方便。比如想要在一个循环的第N次停下来,如果手动打断点,那就要不停的点击单步运行&…

emailjava中怎么校验_Java使用注解实现参数统一校验功能

在项目开发中,当使用配置文件的时候,需要对一些配置参数进行合法校验,如果不存在则会抛出异常或者提醒用户重新修改配置文件后运行系统。 以前的做法就是读取到配置文件后,每个配置项挨个检查,写多个if判断是否存在问题…

原来保险丝熔断原理是这样的

如果电路中的保险丝熔断了,想亮起一个灯来指示,可以考虑用这个电路:这个电路的工作逻辑:当保险丝F1正常工作时,只亮起绿灯LED2。当保险丝F1熔断时,熄灭绿灯LED2,亮起红灯LED1,告诉人…