2024-09-01
售卖作品
00

目录

功能
硬件
如果根据简谱修改音乐?
部分程序
全部程序

功能

msp430单片机,连接一个无源蜂鸣器,播放蜂鸣器音乐,天空之城。

适用于所有msp430单片机。

硬件

无源蜂鸣器,接单片机P1.5,使用vcc3.3v供电。

如果根据简谱修改音乐?

//第一步

//首先修改music0 的变量,

//低音下面加点

//中音不加点

//高音上面加点

//根据简朴的符号写出对应C调音

//第二步 修改music0_JP数组 这个数组和上一个数组对应 就是每一个音 响多长时间

//普通无点是延时 7 即是800ms

//如果音 下有一条下划线,延时 4

//如果音 下有两条下划线,延时2

//如果音 后加一个点 延时12

//如果音后加一条线 延时16

//如果音后加2条线 延时20

//当然 觉得不好听 可以适当修改延时的值

部分程序

cpp
/* ****************************************** */ // ******** 音乐0 天空之城 /* ****************************************** */ //以下是《天空之城》简谱 //每行对应一小节音符 unsigned int music0[]= { Z6,Z7,/**/H1,Z7,H1,H3,/**/Z7,Z3,Z3, /**/Z6,Z5,Z6,H1,/**/Z5,Z3,Z3, /**/Z4,Z3,Z4,H1, Z3,H1,H1,H1,/**/Z7,Z4,Z4,Z7,/**/Z7,Z6,Z7, /**/H1,Z7,H1,H3,/**/Z7,Z3,Z3, /**/Z6,Z5,Z6,H1, Z5, Z3,/**/Z4,H1,Z7,H1,/**/H2,H2,H2,H1,/**/H1,Z6,Z7,Z5,/**/Z6,H1,H2, /**/H3,H2,H3,H5, H2,Z5,Z5, /**/H1,Z7,H1,H3,/**/H3, /**/Z6,H1,Z7,H2,/**/H1,Z5,Z5, /**/H4,H3,H2,H1, H3, /**/Z3,H3, /**/H6,H5,H5, /**/H3,H2,H1,H1,/**/H2,H1,H2,H5,/**/H3,H3, H6,H5, /**/H3,H2,H1,H1,/**/H2,H1,H2,Z7,/**/Z6,Z6,Z7, /**/Z6,0xff}; //以0xff作为音符的结束标志 //以下是简谱中每个音符的节拍 //"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位 unsigned char music0_JP[ ]= { 4,4, /**/12,4,8,8, /**/20,4,4, /**/12,4,8,8, /**/20,4,4, /**/12,4,4,12, 20,4,4,4, /**/12,4,8,8, /**/20,4,4, /**/12,4,8,8, /**/20,4,4, /**/12,4,8,8, 32, 4, /**/8,4,6,8, /**/4,4,4,16, /**/8,4,6,8, /**/24,4,4, /**/12,4,8,8, 24,4,4, /**/4,4,8,8, /**/32, /**/4,8,8,6, /**/12,4,16, /**/8,8,8,8, 30, /**/20,8, /**/16,8,8, /**/4,4,16,8, /**/8,4,4,8, /**/20,8, 16,16, /**/4,20,8, /**/8,4,4,8, /**/20,4,4, /**/32}; /* ****************************************** */ /* ******** 延时100ms 控制音乐节拍 */ /* ****************************************** */ void delay1() { delay_ms( 100 ); } int main( void ) { unsigned char u = 0, t = 0; WDTCTL = WDTPW + WDTHOLD; /* Stop WDT */ P1DIR |= BIT5; /* P1.0 output */ _EINT(); while ( 1 ) { u = 0, t = 0; while ( music0[u] != 0xff ) /* 只要没有读到结束标志就继续播放 */ { CCR0 = SYSCLK / music0[u] / 2; /*选一个频率 */ for ( t = 0; t < music0_JP[u]; t++ ) /* 控制节拍数 */ delay1(); /* 延时1个节拍单位 */ TACTL = TASSEL_2 + MC_0; /* 关闭 */ u++; /* 播放下一个音符 */ } } } /* Timer A0 interrupt service routine */ #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A( void ) { P1OUT ^= BIT5; }

全部程序

cpp
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!