蜂鸣器和弦音发声控制Word下载.docx

上传人:b****5 文档编号:20751629 上传时间:2023-01-25 格式:DOCX 页数:7 大小:17.15KB
下载 相关 举报
蜂鸣器和弦音发声控制Word下载.docx_第1页
第1页 / 共7页
蜂鸣器和弦音发声控制Word下载.docx_第2页
第2页 / 共7页
蜂鸣器和弦音发声控制Word下载.docx_第3页
第3页 / 共7页
蜂鸣器和弦音发声控制Word下载.docx_第4页
第4页 / 共7页
蜂鸣器和弦音发声控制Word下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

蜂鸣器和弦音发声控制Word下载.docx

《蜂鸣器和弦音发声控制Word下载.docx》由会员分享,可在线阅读,更多相关《蜂鸣器和弦音发声控制Word下载.docx(7页珍藏版)》请在冰豆网上搜索。

蜂鸣器和弦音发声控制Word下载.docx

F=,Tv=200,Tf=1000

开机和弦音:

三升调,按音调分3个阶段

1.F=,Tv=200,Tf=200

2.F=,Tv=200,Tf=200

3.F=,Tv=100,Tf=2100

关机和弦音:

三降调,按音调分3个阶段

2.编程实例

MCU:

STM8S903K3开发环境:

STVD文件*/

C

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"

"

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*/

/*文件*/

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

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!

=FREQ_NO)//非结束符

//先判断供电持续时间

=0)

--;

BeepPwrOn();

else

BuzzerStatus=2;

//再判断振荡持续时间

BEEP_SetFreq;

BEEP_On();

BeepPwrOff();

//判断完成,开始递减计时

BuzzerStatus=1;

else/*==FREQ_NO*///是结束符

case1:

else

BEEP_Off();

pTone++;

//取下一个音调

以上代码中,BEEP_Off(),BEEP_On(),BeepPwrOff(),BEEP_SetFreq()都在头文件中声明,由底层代码实现。

上层代码只需在主循环中每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}//停止

};

当然,你可以添加一些按键,为每个按键设定一个特定音调的和弦音输出,就做成一个电子琴了,音质很不错的哦:

)。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1