蜂鸣器和弦音发声控制Word文档格式.docx
- 文档编号:18910709
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:8
- 大小:25.74KB
蜂鸣器和弦音发声控制Word文档格式.docx
《蜂鸣器和弦音发声控制Word文档格式.docx》由会员分享,可在线阅读,更多相关《蜂鸣器和弦音发声控制Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
1.F=2.3,Tv=200,Tf=200
2.F=2.6,Tv=200,Tf=200
3.F=2.9,Tv=100,Tf=2100
关机和弦音:
三降调,按音调分3个阶段
1.F=2.9,Tv=200,Tf=200
3.F=2.3,Tv=100,Tf=2100
2.编程实例
MCU:
STM8S903K3开发环境:
STVD4.1.6+Cosmic4.2.8
/*buzzer.h文件*/
?
[Copytoclipboard]ViewCodeC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef__BUZZER_H
#define__BUZZER_H
#include"
common.h"
beep.h"
typedefenum
{
MONO=0,//单音
POLY_ON=1,//开机和弦
POLY_OFF=2//关机和弦
}Tone_Type;
//蜂鸣器声音类型
typedefstruct
FREQ_TypeFreq;
//频率
u8OSCTime;
//振荡持续时间,最小单位为10ms
u8PWRTime;
//供电持续时间,最小单位为10ms
}TONE_Def;
//音调结构体
voidBuzzerStart(Tone_TypeToneType);
voidBuzzerCtrl(void);
#endif/*__BUZZER_H*/
/*buzzer.c文件*/
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
buzzer.h"
constTONE_DefTone1[]={{FREQ_2K6,100,20},{FREQ_NO,0,0}};
//单音
constTONE_DefTone2[]={{FREQ_2K3,20,20},{FREQ_2K6,20,20},{FREQ_2K9,210,10},{FREQ_NO,0,0}};
//开机和弦音
constTONE_DefTone3[]={{FREQ_2K9,20,20},{FREQ_2K6,20,20},{FREQ_2K3,210,10},{FREQ_NO,0,0}};
//关机和弦音
TONE_Def*pTone;
staticu8BuzzerStatus=0;
//蜂鸣器启动,需要发声时调用
voidBuzzerStart(Tone_TypeToneType)
switch(ToneType)
{
caseMONO:
pTone=Tone1;
break;
casePOLY_ON:
pTone=Tone2;
casePOLY_OFF:
pTone=Tone3;
default:
}
BuzzerStatus=0;
}
//蜂鸣器控制,每10ms执行一次
voidBuzzerCtrl(void)
staticTONE_DefTone;
switch(BuzzerStatus)
case0:
Tone=*pTone;
if(Tone.Freq!
=FREQ_NO)//非结束符
//先判断供电持续时间
if(Tone.PWRTime!
=0)
Tone.PWRTime--;
BeepPwrOn();
else
BuzzerStatus=2;
//再判断振荡持续时间
if(Tone.OSCTime!
Tone.OSCTime--;
BEEP_SetFreq(Tone.Freq);
BEEP_On();
BeepPwrOff();
//判断完成,开始递减计时
BuzzerStatus=1;
else/*Tone.Freq==FREQ_NO*///是结束符
case1:
else
BEEP_Off();
pTone++;
//取下一个音调
以上代码中,BEEP_Off(),BEEP_On(),BeepPwrOff(),BEEP_SetFreq()都在头文件beep.h中声明,由底层代码实现。
上层代码只需在主循环中每10ms调用一次BuzzerCtrl()函数,在需要发音的地方调用一次BuzzerStart()函数,即可实现和弦音的播放了。
思维拓展:
依据以上代码的结构,可以很容易的通过定义TONE_Def数组实现任意节奏,任意曲调的输出。
如下段:
constTONE_DefTone4[]={//两只老虎(两只老虎两只老虎跑得快跑得快)
{FREQ_2K,25,25},//1
{FREQ_2K3,25,25},//2
{FREQ_2K6,25,25},//3
{FREQ_2K9,50,25},//4稍有停顿
{FREQ_2K9,100,25},//4和弦效果
{FREQ_NO,0,0}//停止
};
当然,你可以添加一些按键,为每个按键设定一个特定音调的和弦音输出,就做成一个电子琴了,音质很不错的哦:
)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蜂鸣器 和弦 发声 控制
![提示](https://static.bdocx.com/images/bang_tan.gif)