首页 > 其他分享 >【嵌入式】微芯旺KungFu32A156MQT蜂鸣器演奏音乐

【嵌入式】微芯旺KungFu32A156MQT蜂鸣器演奏音乐

时间:2023-02-02 12:44:06浏览次数:62  
标签:KungFu32A156MQT 蜂鸣器 system 演奏 微芯旺 kf32a156 gpio include

#include"system_init.h"
#include"kf32a156_gpio.h"

int main()
{
    SystemInit(120);///<初始化系统时钟为120M
    systick_delay_init(120);///<设置SysTick定时器作为延迟功能,输入频率为120M
    GPIO_InitTypeDef GPIO_InitStructure;///<GPIO结构体
    GPIO_InitStructure.m_Mode = GPIO_MODE_OUT;///<GPIO输出模式
    GPIO_InitStructure.m_OpenDrain = GPIO_POD_PP;///<GPIO开漏控制
    GPIO_InitStructure.m_PullDown = GPIO_NOPULL;///<GPIO下拉配置
    GPIO_InitStructure.m_PullUp = GPIO_NOPULL;///<GPIO上拉配置
    GPIO_InitStructure.m_Speed = GPIO_LOW_SPEED;///<GPIO输出速度

    GPIO_InitStructure.m_Pin = GPIO_PIN_MASK_4;///<GPIO端口掩码为4
    GPIO_Configuration(GPIOD_SFR , &GPIO_InitStructure);///<通用输入输出端口(GPIO)初始化配置,蜂鸣器信号线接PD4

    ///<发出250Hz的声音
    while(1)
    {
        GPIO_Set_Output_Data_Bits(GPIOD_SFR, GPIO_PIN_MASK_4, Bit_SET);///<蜂鸣器高电平
        systick_delay_ms(2);///<延时2ms
        GPIO_Set_Output_Data_Bits(GPIOD_SFR, GPIO_PIN_MASK_4, Bit_RESET);///<蜂鸣器低电平
        systick_delay_ms(2);///<延时2ms
    }        
}

 

以下是演奏"只因你太美"片段程序(图源百度)

 

 曲速:每分钟107拍

 

分解歌词“第一次呀变成这样的我,不管我怎么去否认?”

第      高1

一      75

次   53

呀变  33  

成          高1

这          75

样的      53         

的          半拍3

我         5

,不     03

管我     33

怎么     55

去否     56

认        7

 

代码:

#include"system_init.h"
#include"kf32a156_gpio.h"

#define music_rate         120                        ///<曲速,每分钟节拍数
#define time_beat_us      60*1000*1000/music_rate    ///<每节拍的us数
///<音调
#define m0    1        ///<1Hz  无声音
#define m1    523        ///<523Hz  中1
#define m2    587        ///<587Hz  中2
#define m3    659        ///<659Hz  中3
#define m4    698        ///<698Hz  中4
#define m5    784        ///<784Hz  中5
#define m6    880        ///<880Hz  中6
#define m7    988        ///<988Hz  中7
#define h1    1046    ///<1046Hz 高1
#define h2    1175    ///<1175Hz 高2
#define h3    1318    ///<1318Hz 高3
#define h4    1397    ///<1397Hz 高4
#define h5    1568    ///<1568Hz 高5
#define h6    1760    ///<1760Hz 高6
#define h7    1967    ///<1967Hz 高7

/**
*@prototype:music_sound
*@brief:发出一个音调
*@detail:发出一个音调,并控制音调时间
*@param[in]:hz 发出响应hz的声音,范围为(1-2000)
*@param[in]:time_play 音调占1/time_play拍,范围为(1-8)
*@return:无
*@retval
*par
*- 2023-02-02,首次创建
*/
void music_sound(int hz,int time_play)
{
    int hz_us=1000*1000/hz;///<1次震动占用的us数
    int delay_hz_us=hz_us/2;///<每次震动中单个电平占用的us数
    int sound_time_us=time_beat_us/time_play;///<该音所占用时间
    int sound_time=sound_time_us/hz_us;///<该频率下振动的次数
    if(hz==m0)
    {
        ///<空音节直接跳过
        GPIO_Set_Output_Data_Bits(GPIOD_SFR, GPIO_PIN_MASK_4, Bit_SET);///<蜂鸣器高电平
        systick_delay_us(sound_time_us);
    }else
    {
        ///<播放该音
        for(int i=0;i<sound_time;i++)
        {
            GPIO_Set_Output_Data_Bits(GPIOD_SFR, GPIO_PIN_MASK_4, Bit_RESET);///<蜂鸣器低电平
            systick_delay_us(delay_hz_us);
            GPIO_Set_Output_Data_Bits(GPIOD_SFR, GPIO_PIN_MASK_4, Bit_SET);///<蜂鸣器高电平
            systick_delay_us(delay_hz_us);

        }
    }
}

/**
*@prototype:music_play
*@brief:发出一段音乐
*@detail:发出一段音乐
*@param[in]:music[][2] 是音调数组,为{{音调,time_play},{音调,time_play}}
*@param[in]:sound_num    是music中音调的数量
*@return:无
*@retval
*par
*- 2023-02-02,首次创建
*/
void music_play(int music[][2],int sound_num)
{
    ///<播放所有音调
    for(int i=0;i<sound_num;i++)
    {
        music_sound(music[i][0],music[i][1]);///<播放
    }
}

int main()
{
    SystemInit(120);///<初始化系统时钟为120M
    systick_delay_init(120);///<设置SysTick定时器作为延迟功能,输入频率为120M
    GPIO_InitTypeDef GPIO_InitStructure;///<GPIO结构体
    GPIO_InitStructure.m_Mode = GPIO_MODE_OUT;///<GPIO输出模式
    GPIO_InitStructure.m_OpenDrain = GPIO_POD_PP;///<GPIO开漏控制
    GPIO_InitStructure.m_PullDown = GPIO_NOPULL;///<GPIO下拉配置
    GPIO_InitStructure.m_PullUp = GPIO_NOPULL;///<GPIO上拉配置
    GPIO_InitStructure.m_Speed = GPIO_LOW_SPEED;///<GPIO输出速度

    GPIO_InitStructure.m_Pin = GPIO_PIN_MASK_4;///<GPIO端口掩码为4
    GPIO_Configuration(GPIOD_SFR , &GPIO_InitStructure);///<通用输入输出端口(GPIO)初始化配置,蜂鸣器信号线接PD4

    ///<歌曲
    int my_music[][2]={
            {h1,1},{m0,16},///<第
            {m7,2},{m0,16},///<一
            {m5,2},{m0,16},///<次
            {m3,2},{m0,16},{m3,2},{m0,16},///<呀变
            {h1,1},{m0,16},///<成
            {m7,2},{m0,16},///<这
            {m5,2},{m0,16},///<样
            {m3,1},{m0,16},///<的
            {m5,1},{m0,16},///<我
            {m0,1},
            {m3,2},{m0,16},///<,不
            {m3,2},{m0,16},{m3,2},{m0,16},///<管我
            {m5,2},{m0,16},{m5,2},{m0,16},///<怎么
            {m5,2},{m0,16},{m6,2},{m0,16},///<去否
            {m7,2},{m0,16},///<认
    };
    music_play(my_music,sizeof(my_music)/sizeof(my_music[0]));///<播放歌曲
    while(1)
    {

    }        
}

 

标签:KungFu32A156MQT,蜂鸣器,system,演奏,微芯旺,kf32a156,gpio,include
From: https://www.cnblogs.com/LPworld/p/17084784.html

相关文章

  • 【嵌入式】微芯旺KungFu32A156MQT点灯程序
    编译器:ChipON32IDEKF32首先添加A156MQT启动代码然后添加库 然后在项目设置内添加编译路径  以下是点灯代码:#include"system_init.h"#include"kf32a156_gp......
  • 跟着思兼学习Klipper(19) 通知系统:蜂鸣器、语音播报与手机消息通知
    前言原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正交流。本文目的在于交流,其中原创内容禁止一切非授权商业行为。文章如有更新请访问DFRobot社区或者cnb......
  • 蜂鸣器播放音乐+普中51单片机+江科大自化协
    1现象利用蜂鸣器实现音乐播放功能,播放《天空之城》。2原理(1)天空之城的乐谱  3参考程序3.1主程序#include<REGX52.H>#include"delayms.h"#include"......
  • 蜂鸣器播放DOREMI+普中51单片机+江科大自化协
    现象在无源蜂鸣器上循环演奏低音“DO、RE、MI、FA、SO、LA、SI”这7个音调。参考程序1主函数 #include<REGX52.H>#include"delayms.h"#include"timer0.h"......
  • 02-继电器蜂鸣器
     #include"reg52.h" ​ sbitHC138_A=P2^5; sbitHC138_B=P2^6; sbitHC138_C=P2^7; ​ voiddelay(unsignedintt) { while(t--); w......
  • 《DFZU2EG_4EV MPSoc之FPGA开发指南》第十六章 蜂鸣器实验
    第十六章蜂鸣器实验上一章,我们介绍了STM32MP157的IO口作为输出的使用。本章,我们将通过另外一个例子继续巩固IO口作为输出使用的操作方法,不同的是本章讲的不是用IO口直接......
  • 2_ZYBO FPGA 按键控制蜂鸣器 key_beep=>key_led
    问题与思路使用按键控制蜂鸣器发声。初始状态为蜂鸣器鸣叫,按下开关后蜂鸣器停止鸣叫,再次按下开关,蜂鸣器重新鸣叫按键抖动:按键消抖:系统框图:消抖方式输入key的按......
  • STM32f103 蜂鸣器发声
    一、蜂鸣器简介蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中......
  • 例程分析2:GBIO口输出——蜂鸣器
    代码分析一、宏定义<bsp_deep.h>:1.对蜂鸣器的GPIO的端口、时钟、具体引脚的宏定义 2.宏定义高低电平 3.设置定义带参宏    二......
  • 迅为3399开发板Qt蜂鸣器和LED测试
    QLed测试资料在网盘“iTOP-3399开发板\iTOP-3399开发板\02_iTop-RK3399开发资料汇总(不含光盘内容)\05_iTOP-3399开发板Qt应用开发资料\3399开发板QT测试-QtLED......