STM32蜂鸣器模拟播放歌曲

发布者:梦中徐来最新更新时间:2020-07-12 来源: 51hei关键字:STM32  蜂鸣器  模拟播放歌曲 手机看文章 扫描二维码
随时随地手机看文章

/**********************************************************************

*函数名:BEEP_Init

*功  能:蜂鸣器初始化

*参  数:无

*返  回:无

*备  注:

引脚          点蜂鸣器电平                模式                                                速度

PC3                        高电平                                        通用推挽输出                50M

**********************************************************************/

void BEEP_Init(void)

{  

       

   #if 1

   RCC->APB2ENR |= 1<<4;//开启PC口时钟

   GPIOC->CRL &=~(0XF<<4*3);//清PC3

   GPIOC->CRL |=(0X3<<4*3);//通用推挽输出 50M

   GPIOC->ODR &=~(3<<1);//关蜂鸣器       

   #else

    GPIO_InitTypeDef  GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能C端口时钟

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;         

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz

    GPIO_Init(GPIOC, &GPIO_InitStructure);//PC3

    GPIO_ResetBits(GPIOC,GPIO_Pin_3);//关蜂鸣器       

   #endif

}


//控制发声

void Sound(u16 frq)

{

        u32 time;

        if(frq != 1000)//休止符

        {

                time = 500000/((u32)frq);

                BEEP = 1;

                delay_us(time);

                BEEP = 0;

                delay_us(time);

        }else

                delay_us(1000);

}


//生日歌

void play_Music_1(void)

{

        //音谱         低1  2   3   4   5   6   7  中1  2   3   4   5   6   7  高1    2   3     4    5    6    7  不发音

        uc16 tone[] = {262,294,330,349,392,440,494,523,587,659,698,784,880,988,1047,1175,1319,1397,1568,1760,1967,1000};//音频数据表

        //编号          0   1   2   3   4   5   6   7   8   9   10  11  12  13  14   15   16    17   18   19   20  21

       

        //音谱

        u8 music[]={4,4,5,4,

                                                        7,6,21,

                                                        4,4,5,4,

                                                  8,7,21,

                                                        4,4,11,9,

                                                        7,6,5,21,

                                                        3,3,9,7,

                                                        8,7,21,

                                                        };

        //节拍

        u8 time[] = {2,2,4,4,        //时间--2代表半拍(100ms) 4代表一拍(200ms) 8代表两拍(400ms)

                                                         4,4,4,

                                                         2,2,4,4,

                                                         4,4,4,

                                                         2,2,4,4,

                                                         4,4,4,4,

                                                         2,2,4,4,

                                                         4,4,4,

               };       

        u32 delayShow;

        u16 i,j;

        delayShow = 10;//控制播放快慢

        for(i=0;i        {

                for(j=0;j<((u16)time[i])*tone[music[i]]/delayShow;j++)

                {

                        Sound((u32)tone[music[i]]);

                }       

        }

}


//世间美好与你环环相扣

void play_Music_2(void)

{

        //             低1  2   3   4   5   6   7  中1  2   3   4   5   6   7  高1    2   3     4    5    6    7  不发音

        uc16 tone[] = {262,294,330,349,392,440,494,523,587,659,698,784,880,988,1047,1175,1319,1397,1568,1760,1967,1000};//音频数据表

        //              0   1   2   3   4   5   6   7   8   9   10  11  12  13  14   15   16    17   18   19   20  21

        //音调

        u8 music[]={11,11,11,10,9,9,8,8,7,8,

                                                        9,9,11,11,9,8,8,9,9,

                                                        7,7,7,7,7,9,9,9,8,8,8,7,8,

                                                        9,9,9,11,8,21,

                                                        11,11,11,11,10,9,8,7,8,

                                                        9,9,11,11,9,8,8,7,7,

                                                        7,7,7,7,7,9,9,9,8,8,8,7,8,

                                                        9,11,11,21,21,9,

                                                        8,21,21,4,5,4,

                                                        9,9,12,9,10,9,9,7,8,9,8,8,7,7,

[1] [2]
关键字:STM32  蜂鸣器  模拟播放歌曲 引用地址:STM32蜂鸣器模拟播放歌曲

上一篇:STM32+LCD12864汉字显示与定位 时钟,闹钟Proteus仿真程序
下一篇:STM32控制步进电机源代码

推荐阅读最新更新时间:2024-11-12 13:22

STM32延时函数的四种方法:普通延时(2种)、SysTick 定时器延时(2种)
STM32延时函数的三种方法:普通延时、SysTick 定时器延时(1.中断方式;2.非中断方式) 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us( )和毫秒级delay_ms( )。 1.普通延时法 (1)普通延时法1 这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。下面的代码是在网上搜到的,经测试延时比较精准。 //粗延时函数,微秒 void delay_us(u16 time) { u16 i=0; while(time--) { i=10; //自己定义 while(i--) ;
[单片机]
<font color='red'>STM32</font>延时函数的四种方法:普通延时(2种)、SysTick 定时器延时(2种)
stm32串口与485通信学习笔记
stm32串口中断: USART_IT_PE(奇偶校验中断) USART_IT_TXE(发送中断) USART_IT_TC(传输完成中断) USART_IT_RXNE(接收中断) USART_IT_IDLE(空闲总线中断) USART_IT_LBD(LIN中断检测中断) USART_IT_CTS(CTS中断) USART_IT_ERR(错误中断) 485用到的中断: USART_IT_TC(传输完成中断) USART_IT_RXNE(接收中断) 由于485通信需要管脚的使能才可以实现正常的通信所以在初始化时,注意在配置初始化程序的是将485使能为接收状态即控制管脚为高电平。当有数据发送时程序进入USART_IT_RXNE中
[单片机]
stm32定时器时钟源问题
在STM32F1系列中,其中定时器TIM1、TIM8是挂在在APB2上的,而定时器TIM2、3、4是关在在APB1上的。 在工程中我们一般设置APB1CLK = 36M APB2CLK = 72M 但是为什么这几个定时器在计算定时时间的时候都是使用72M进行计算呢? 在时钟树上我们可以看到,定时器不是单纯的挂在在APB时钟源上的,而是经过了一个倍频器,而这个倍频器的倍频值受APBx时钟相对AHB的分频系数控制的,分频系数为1则x1,其他则x2 拿我们上面的时钟配置来说,AHB=72M APB1CLK =36M,是一个二分频的关系,这个时候就是触发倍频器x2 这样挂在APB1上的定时器的时钟源就是 36M*2 ,也就是说定时
[单片机]
stm32内存分配
(1)栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似 于数据结构中的栈。 (2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配 方式类似于数据结构中的链表。 (3)全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态 变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系 统自动释放。 (4)文字常量区:常量字符串就是存放在这里的。 (5)程序代码区:存放函数体的二进制代码。 例如: int a=0;
[单片机]
STM32 USB学习笔记5
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library 承接前文,对于上层应用而言只剩下CDC类接口文件即usbd_cdc_interface,该文件主要为实现CDC类接口所用到的物理资源以及逻辑资源,需要参考通信设备通用串行总线类定义版本1.2以及PSTN设备通用串行总线通信类子类规范版本1.2,这两个文档都可以在USB组织官网上下载得到,首先看下usbd_cdc_interface.h文件,如下: /* Define to prevent recursive inclusion
[单片机]
<font color='red'>STM32</font> USB学习笔记5
STM32 在 MDK环境下 插入汇编
先在网上查有的说是__asm{NOP;},从intrins.h里调用,可犄角旮旯全找了,也没看到什么intrint.h的文件。如果直接用,就出现 error: #1113: Inline assembler not permitted when generating Thumb code 最后搜索这条错误,知道是因为__asm( 指令 );这种语法是内联汇编(inline assembly)的语法。而RMDK下,内联汇编仅支持ARM汇编语言,不支持Thumb或者Thumb-2汇编语言;但内嵌汇编器支持Thumb和Thumb-2。 __asm放到一个单独的子函数再被调用就没问题了 如下: __asm void nop(void)
[单片机]
stm32局部变量过大,导致栈溢出
在做一个以stm32为主控的项目时发现自己程序中一个机构体里面的数据总是一运行就被改变,刚开始以为是自己不小心在哪个地方用了extern扩展了变量的作用域,重新赋了值, 自己忘记了,后来查找了好久都没有其他地方使用这个结构体变量,于是开始单步调试,结果进入一个函数的时候(里面定义了一个200个数据float型的数组),发现只要定了一个这个数组,这时前文提到的那个结构的值就发生改变,通过在keil软件中的Memory窗口查看结构体的变量可以清楚看到结构体的地址里面的数据在这个时候发生改变, 然后修改,这个局部变量数组的大小,把它改小之后,就没有发生问题。因为局部变量是储存在栈中的,于是猜想,这种问题应该是stm32的栈的内存的溢出造
[单片机]
<font color='red'>stm32</font>局部变量过大,导致栈溢出
STM32 USART简介-串口通讯协议简介01
通讯的方式分类: 1.并行通信:是指数据的各位同时在多根数据线上发送或接收。如下图 并行通信的特点:控制简单,传输速度快;由于传输线较多,适用于短距离通信。 2.串行通信:是指数据的各位在同一根数据线上逐位发送和接收。如下图 串行通信的特点:控制复杂,传输速度慢;只需要一根数据线,适用于远距离通信。 串行通信方式分类 在串行通信中,根据对数据流的分界、定时以及同步方案方法不同,可分为和同步串行通信方式和异步通信方式。 同步通信 同步通信是指发送端和接收端必须使用同一时钟,是一种连续传送数据的通信方式,一次通讯传送多个字符数据(一帧数据)。下图是同步串行通信帧格式: 同步串行通信方式:把许多字符组成一个信息组
[单片机]
<font color='red'>STM32</font> USART简介-串口通讯协议简介01
热门资源推荐
热门放大器推荐
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved