STM32F103+全彩LED显示屏+万年历闹钟+FFT音频频谱制作

news/2025/2/2 1:46:35/

目录

1.硬件总体框图

2.材料准备

3.IO口的连接

4.自制的模块

5.源程序及其相关模块资料 

6.最终效果演示



1.硬件总体框图

        工作原理:电脑,手机等外部设备3.5mm耳机孔输出音频信号,经过继电器模块的音源选择后,继电器模块的输出分为两路,一路给有源音响播放音乐,一路经过音频信号调理电路输入到STM32单片机的引脚进行采样和AD转换后由程序进行FFT变换,将FFT变换结果的幅值谱显示在LED全彩显示屏上。语音播放模块用于播放闹钟语音报时及闹铃音乐。默认情况下继电器模块选择外界设备的音源,当闹钟时间到时,继电器动作切换为语音模块音源。

2.材料准备

STM32F103核心板 

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

DS3231模块

双路继电器模块

 DY-SV5W语音模块

按键模块(自制)

音频调理电路(自制)

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

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

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

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

3.IO口的连接

看程序中的宏定义即可

这里说一下LED显示屏75接口的定义

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

4.自制的模块

按键模块 原理图

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

接下来就是焊接。。。

按键模块实物 

 音频调理电路

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

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

接下来是各模块的焊接。。。

 最终的电路板整体

 5.源程序及其相关模块资料 

链接: https://pan.baidu.com/s/1qWe_9N8qMwU5upi2mXLJLQ 提取码: j3ex 

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

6.最终效果演示

https://www.bilibili.com/video/BV1dw41197LB?share_source=copy_web


http://www.ppmy.cn/news/342224.html

相关文章

[乐意黎]某音上超酷炫的 Word Clock 文字云时钟屏保配置

乐意黎最近在某音上看到 Wordclock 屏保非常的火爆,看上去非常有意思。 哪么 Wordclock屏保怎么弄的?如何设置呢? 电脑怎么设置动态时钟屏保 实现这样的动态时间屏保的效果主要是使用了一款叫做word clock的第三方插件,《Word C…

个性时钟屏保=冷高轮时间麻将时钟电脑屏幕保护

冷高轮时间系列屏保,脑洞打开的使用麻将中可以代表0-9的阿拉伯数字牌面放进时钟显示时间,表现了人们对时间秩序和生命意义的感悟,也是对某种审美人格境界的向往。 麻将牌的每一张牌都富有魅力和丰富的文化内涵。天地有五行,都蕴…

go如何控制并发数,场景举例

Go如何控制并发的goroutine数量? 场景:假设我们有一个string数组,里面有1000万条url需要下载,假设下载函数为processURL,我们需要指定100个goroutine并发去执行这个processURL函数去下载url,那么如何做呢&…

辉光管电子时钟

本篇转载自http://yanzeyuan.blog.163.com/blog/static/466021972010102091129748/ [DIY]二十四小时的感动(古典版I) 自制QS30-1辉光管电子时钟 [DIY]QS30-1辉光 2010-11-20 21:33:56 阅读1293 评论6 字号:大中小 订阅 辉光管是电子管的一种,属于很古…

unocss 基础用法

一、什么是unocss unocss是一个即时的原子CSS引擎,它可以让你用简短的类名来控制元素的样式,而不需要写复杂的CSS代码。 当然,原子样式也有很多选择,最著名的就是 Tailwind。 但由于Tailwind 会生成大量样式定义,会导…

Flutter 文件读写---path_provider

Flutter 文件读写—path_provider 在Flutter中,可以通过path_provider库来实现文件的读写操作。这个库提供了许多方法,可以方便地获取设备上的常用目录,比如文档目录、下载目录、临时目录等。 安装 在pubspec.yaml文件中添加path_provider…

Mac电脑把位图转换成矢量图的软件

Super Vectorizer for Mac是一款强大的位图转换工具,运行在Mac OS平台,可以轻松将数位图转换为矢量图。 矢量图以其放大后图像不会失真的优点,在社会各处的使用范围越来越广,但是网络上找到的图片又往往是数位图,这时…

GPT问题记录

如何遍历切片 1.for循环 package mainimport "fmt"func main(){s : []int{1,2,3,4}for i : 0; i < len(s); i{fmt.Printf("s[%d]%d\n",i,s[i])} } 运行结果 2.range 关键字 package mainimport "fmt"func main() {s : []int{1,2,3,4,5}for in…