|
本帖最后由 quantum6 于 2023-7-3 13:44 编辑
根据别人代码的改进。
- #include "system.h"
- #include "SysTick.h"
- #include "led.h"
- #include "beep.h"
- #define BASE_TUNE 700000
- void sound_by_freq(uint32_t freq)
- {
- uint32_t t=freq/2;
- LED_RED=!LED_RED;
- while(t>0) //声音持续时间根据音调频率不同,调整对应时长
- {
- BEEP=~BEEP;
- delay_us(BASE_TUNE/freq); //频率转换为周期
- t--;
- }
- LED_RED=!LED_RED;
- //必须放在这里才没有杂音。因为1会一直响。
- BEEP=0;
- delay_ms(500); //每个音符之间的间隔时间
- }
- int main()
- {
- HAL_Init();
- SystemClock_Init(8,336,2,7);
- SysTick_Init(168);
- LED_Init();
- BEEP_Init();
- // 音调频率数据表。
- uint32_t sound_freqs[]={
- 262, 294, 330, 349, 392, 440, 494,
- 523, 587, 659, 698, 784, 880, 988,
- 1046, 1175, 1318, 1397, 1568, 1760, 1976};
- while(1)
- {
- LED_GREEN=~LED_GREEN;
- BEEP = 0;
- for(int i=0; i<21; i++)
- {
- //每组间隔。
- if (i%7 == 0)
- {
- delay_ms(1000);
- }
- sound_by_freq(sound_freqs [ i ] );
- }
- LED_GREEN=!LED_GREEN;
- }
- }
复制代码
|
|