#include "ioCC2530.h"
void delay(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<535;j++);
}
void delay_us(unsigned int us)
{
unsigned int i;
for(i=0;i<us;i++);
}
void playNote(unsigned int halfPeriod, unsigned int duration)
{
unsigned int t, cycles;
cycles = duration * 1000 / (2 * halfPeriod);
for(t=0; t<cycles; t++)
{
P0_6 = 1;
delay_us(halfPeriod);
P0_6 = 0;
delay_us(halfPeriod);
}
P0_6 = 0;
delay(150); // 每个音符后停80ms,平衡“时长”和“听感”
}
// 乐句间长停顿(区分段落,进一步延长总时长,模拟“唱歌换气”)
void phrasePause()
{
P0_6 = 0;
delay(300); // 每段歌词结束后停300ms,避免段落拥挤
}
// 音符定义(保留原音调,确保旋律准确)
#define DO 568 // 中音1
#define RE 506 // 中音2
#define MI 453 // 中音3
#define FA 425 // 中音4
#define SO 382 // 中音5
#define LA 340 // 中音6
#define SI 303 // 中音7
#define DO_H 284 // 高音1(补充结尾长音,丰富旋律)
#define QUARTER 500 // 四分音符(比原来延长约54%,基础单位延长)
#define HALF 500 // 二分音符(=2*四分音符,时长翻倍)
#define WHOLE 500 // 全音符(=4*四分音符,更长的持续时间)
#define EIGHTH 500 // 八分音符(=0.5*四分音符,相应延长)
void main( )
{
// 引脚配置(只保留蜂鸣器必要配置,减少冗余)
P0SEL &= 0xBF; // P0_6设为普通IO口
P0DIR |= 0x40; // P0_6设为输出模式
P0_6 = 0; // 初始化蜂鸣器为低电平(不发声)
delay(500); // 上电等待500ms,避免启动杂音
while(1)
{
// -------------------------- 第一段:一闪一闪亮晶晶,满天都是小星星(约8秒) --------------------------
playNote(DO, QUARTER);
playNote(DO, QUARTER);
playNote(SO, QUARTER);
playNote(SO, QUARTER);
playNote(LA, QUARTER);
playNote(LA, QUARTER);
playNote(SO, HALF);
phrasePause(); // 乐句停顿300ms
playNote(FA, QUARTER);
// 4
playNote(FA, QUARTER);
// 4
playNote(MI, QUARTER);
// 3
playNote(MI, QUARTER);
// 3
playNote(RE, QUARTER);
// 2
playNote(RE, QUARTER);
// 2
playNote(DO, HALF);
// 1(长音)
phrasePause(); // 乐句停顿300ms
// -------------------------- 第二段:挂在天空放光明,好像许多小眼睛(约8秒) --------------------------
playNote(SO, QUARTER);
playNote(SO, QUARTER);
playNote(FA, QUARTER);
playNote(FA, QUARTER);
playNote(MI, QUARTER);
playNote(MI, QUARTER);
playNote(RE, HALF);
phrasePause(); // 乐句停顿300ms
playNote(SO, QUARTER);
playNote(SO, QUARTER);
playNote(FA, QUARTER);
playNote(FA, QUARTER);
playNote(MI, QUARTER);
playNote(MI, QUARTER);
playNote(RE, HALF);
phrasePause();
delay(500);
}
}优化发声,更贴近原曲小星星
最新发布