普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 678|回复: 0

STM32使用蜂鸣器演奏音阶do/re/mi/fa/so/la/si

[复制链接]

6

主题

10

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2023-7-3 13:39:24 | 显示全部楼层 |阅读模式
本帖最后由 quantum6 于 2023-7-3 13:44 编辑

根据别人代码的改进。
  1. #include "system.h"
  2. #include "SysTick.h"

  3. #include "led.h"
  4. #include "beep.h"


  5. #define BASE_TUNE 700000

  6. void sound_by_freq(uint32_t freq)
  7. {
  8.       uint32_t t=freq/2;

  9.       LED_RED=!LED_RED;

  10.       while(t>0)             //声音持续时间根据音调频率不同,调整对应时长
  11.       {
  12.         BEEP=~BEEP;
  13.         delay_us(BASE_TUNE/freq);    //频率转换为周期
  14.         t--;
  15.       }
  16.       LED_RED=!LED_RED;

  17.       //必须放在这里才没有杂音。因为1会一直响。
  18.       BEEP=0;
  19.       delay_ms(500);                   //每个音符之间的间隔时间
  20. }

  21. int main()
  22. {
  23.   HAL_Init();
  24.   SystemClock_Init(8,336,2,7);
  25.   SysTick_Init(168);

  26.   LED_Init();
  27.   BEEP_Init();

  28.   // 音调频率数据表。
  29.   uint32_t sound_freqs[]={
  30.      262,  294,  330,  349,  392,  440,  494,
  31.      523,  587,  659,  698,  784,  880,  988,
  32.     1046, 1175, 1318, 1397, 1568, 1760, 1976};

  33.   while(1)
  34.   {
  35.     LED_GREEN=~LED_GREEN;
  36.     BEEP = 0;

  37.     for(int i=0; i<21; i++)
  38.     {
  39.       //每组间隔。
  40.       if (i%7 == 0)
  41.       {
  42.         delay_ms(1000);
  43.       }
  44.       sound_by_freq(sound_freqs [ i ] );
  45.     }

  46.     LED_GREEN=!LED_GREEN;
  47.   }
  48. }
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-5-6 02:13 , Processed in 0.086855 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表