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

发布时间:2023-04-26  

工作原理

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

Image

通过电脑,手机等外部设备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接口的定义:

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

自制模块

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


Image


音频调理电路

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

Image

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

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


Image



程序源码

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*******/


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    波特率或者晶振频率再点击计算按钮马上就会显示结果! 第6款:单片机代码自动生成器,不管是51单片机还是AVR单片机,只要输入你的要求,哪一组IO口高低电平,哪一个定时器延时多少,SPI口如何配置。点一下代码生成,自动输出代码......
    . STM32Cube STM32Cube是ST公司发布的一款免费的单片机编程框架。它基于HAL(Hardware Abstraction Layer)和LL(Low-Layer)驱动库,并集成了代码生成器......
    开发者可以方便地进行编程、编译和调试。 STM32CubeIDE:STM32CubeIDE是STMicroelectronics提供的官方集成开发环境,可以使用C/C++语言编程,支持多种STM32单片机系列,提供了一系列的图形化工具和代码生成器......
    如何利用STM32CubeMX来自动生成STM32代码;众所周知,ARM Cortex M 系列是 ARM 专门为单片机设计的内核。其中,STM32 系列的芯片可以算得上最成功的 ARM......
    分析:在语法树上进行类型检查和语义分析,确定变量类型和作用域等信息。 (4) 代码生成:将语法树转换为目标代码生成可执行程序或库文件。 2. 汇编语言 在51单片机编程中,使用......
    专属声音。 生成式AI应用:多行业垂直应用 代码生成:大厂广泛布局,极大提升编程效率 代码生成生成式AI将自然语言翻译成代码,极大提升了计算机编程的智能化、自动化,使得程序员能够在相 同时间内编写更多的代码......
    产生抗疗作用,引起自发性紧张,从而降低治疗效果。为了解决这一问题,将MP3发出的随机音乐信号引入治疗仪,使音频信号与2.4 kHz的中频治疗频率进行调制,产生多种脉动电压和频率周期不断变换的脉动电流。它们随音乐......
    自发性紧张,从而降低治疗效果。为了解决这一问题,将MP3发出的随机音乐信号引入治疗仪,使音频信号与2.4 kHz的中频治疗频率进行调制,产生多种脉动电压和频率周期不断变换的脉动电流。它们随音乐......
    电路与复位电路连接法与51系列单片机。 首次使用该器件需要分别下载USB驱动程序、用户程序。在AT89C51SNDlC的64 KBROM中,地址FOOOH-FFFFH已同化好4K字节Boot Loader代码。出厂时,已将......
    载芯片示意图上会看到下图PA6就是TIM3的通道1PWM波输出口。 生成工程设置 注意在生产工程设置中不能出现中文,不然会报错。 代码生成设置 最后设置生成独立的初始化文件: 生成代码 配置keil......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>