汉扬编程 编程大纲 C语言之“实战篇”——使用无源蜂鸣器演奏出音乐

C语言之“实战篇”——使用无源蜂鸣器演奏出音乐

C语言之“实战篇”——使用无源蜂鸣器演奏出音乐

无源蜂鸣器

C语言之“实战篇”——使用无源蜂鸣器演奏出音乐

无源蜂鸣器:无源蜂鸣器利用电磁感应现象,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声,接入直流电只能持续推动振膜而无法产生声音,只能在接通或断开时产生声音。

C语言之“实战篇”——使用无源蜂鸣器演奏出音乐

有源蜂鸣器:有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路,只需接入额定电压的直流电即可发出指定频率的声音,频率由内部振荡电路决定,无法改变。

这次呢,只给大家讲逻辑,具体的程序就留给大家自己去写一写了,我当时也是自己写的。

那么怎么才能用无源蜂鸣器演奏出音乐呢。当然了蜂鸣器只能放出音调来。好了那么音调是怎么来的呢?大家知道乐器能够演奏出音乐其实也就是那些音调组合起来的,不同的频率的震动就能发出不同的音调,那么我们只要控制蜂鸣器震动的频率就OK啦!说道频率,就不得不提及我们的定时器了。频率和周期是一回事,那么就要控制好震动和不震动的时间,音调和频率的对照比如下:

音调频率

根据频率设置好定时器,计算出周期之后,在周期中设置无源蜂鸣器的震动和不震动的时间,这关系到音量的大小。

另外在乐曲中大家要注意到“节拍”的概念,它关系到每个音调持续的时间,只有将这两样结合起来才能演奏好的乐曲。

给大家附上一首歌的频率和节拍表(每一个频率乘以23~30得到对应的微秒时间us,节拍时间大家自己试一试如何控制):

unsigned char code music_tab[] ={

0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,

0x20, 0x40, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x10,

0x1C, 0x10, 0x18 , 0x40,

0x1C, 0x20, 0x20 , 0x20,

0x1C, 0x20, 0x18 , 0x20,

0x20, 0x80, 0xFF , 0x20,

0x30, 0x1C, 0x10 , 0x18,

0x20, 0x15, 0x20 , 0x1C,

0x20, 0x20, 0x20 , 0x26,

0x40, 0x20, 0x20 , 0x2B,

0x20, 0x26, 0x20 , 0x20,

0x20, 0x30, 0x80 , 0xFF,

0x20, 0x20, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x20, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x20, 0x15 , 0x20,

0x1C, 0x20, 0x20 , 0x20,

0x26, 0x40, 0x20 , 0x20,

0x2B, 0x20, 0x26 , 0x20,

0x20, 0x20, 0x30 , 0x80,

0x20, 0x30, 0x1C , 0x10,

0x20, 0x10, 0x1C , 0x10,

0x20, 0x20, 0x26 , 0x20,

0x2B, 0x20, 0x30 , 0x20,

0x2B, 0x40, 0x20 , 0x15,

0x1F, 0x05, 0x20 , 0x10,

0x1C, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x20, 0x15 , 0x20,

0x1C, 0x20, 0x20 , 0x20,

0x26, 0x40, 0x20 , 0x20,

0x2B, 0x20, 0x26 , 0x20,

0x20, 0x20, 0x30 , 0x30,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x40, 0x1C , 0x20,

0x20, 0x20, 0x26 , 0x40,

0x13, 0x60, 0x18 , 0x20,

0x15, 0x40, 0x13 , 0x40,

0x18, 0x80, 0x00

};

音乐

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/7040.html

(C语言是什么语言)C 语言中的void是什么?格式是怎么样的?

C语言丨数组越界及其避免方法详解

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部