毕业设计| 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即可。如下图:

动画讲解C语言的指针,从未如此简单

推荐阅读:专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号,后台回复「1024」获取学习资料网盘链接。欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

SQL Activity Monitor

从实质上说, Actvity Monitor不过是SQL Server中系统View sys.sysprocesses的一种展现. SP_Who2应该也是从这里查询到的数据。下面是view sysprocesses的SELECT内容: SELECT spid, kpid, blocked, waittype, waittime, lastwaittype, waitresource, dbid, …

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

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

修改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亿台以上, …

MDK调试:设置断点处,代码运行的次数

https://www.cnblogs.com/ramlife/articles/14024516.html

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

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

国内网络安全公司、社区简介

国内网络安全公司简介<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1&#xff0e;http://www.symantec.com/region/cn赛门铁克中国一家从事网络安全服务的公司&#xff0c;挺供网络安全产品下载、整体网络安全解决方案。2&…

一句话输出没有结束符的字符串

编程时往往存在这种情况&#xff1a; 函数接口传给你一个没有“\0”结尾的字符串str和他的长度str_len&#xff0c;调试的时候你需要将其打印出来。 一般人都会这么做&#xff1a; void print_str(const char* str, unsigned int str_len) { unsigned int i0; for (; i < …

动态规划:树形DP-景点中心(树的带权重心)

话说宁波市的中小学生在镇海中学参加计算机程序设计比赛&#xff0c;比赛之余&#xff0c;他们在镇海中学的各个景点参观。镇海中学共有n个景点&#xff0c;每个景点均有若干学生正在参 观。这n个景点以自然数1至n编号&#xff0c;每两个景点的编号均不同。每两个景点之间有且只…

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

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

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

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

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

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

7多态与多态性

多态 多态指的是一类事物有多种形态&#xff0c;比如 动物有多种形态&#xff1a;人&#xff0c;狗&#xff0c;猪 import abc class Animal(metaclassabc.ABCMeta): #同一类事物:动物abc.abstractmethoddef talk(self):passclass People(Animal): #动物的形态之一:人def talk(…

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

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

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

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

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

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