用ch552单片机编写程序实现“小星星'这首歌的演奏
时间: 2024-03-23 12:42:50 浏览: 16
好的,下面是用CH552单片机编写程序实现“小星星”这首歌的演奏的代码:
```
#include <ch552.h>
#define C 262 // 定义中央C的频率
#define D 294 // 定义D的频率
#define E 330 // 定义E的频率
#define F 349 // 定义F的频率
#define G 392 // 定义G的频率
#define A 440 // 定义A的频率
#define B 494 // 定义B的频率
void delay(unsigned int t);
void play(unsigned int freq, unsigned int duration);
void main()
{
while(1)
{
play(C, 500); // 播放中央C,时长500ms
play(C, 500);
play(G, 500);
play(G, 500);
play(A, 500);
play(A, 500);
play(G, 1000);
play(F, 500);
play(F, 500);
play(E, 500);
play(E, 500);
play(D, 500);
play(D, 500);
play(C, 1000);
play(G, 500);
play(G, 500);
play(F, 500);
play(F, 500);
play(E, 500);
play(E, 500);
play(D, 1000);
play(G, 500);
play(G, 500);
play(F, 500);
play(F, 500);
play(E, 500);
play(E, 500);
play(D, 1000);
play(C, 500);
play(C, 500);
play(G, 500);
play(G, 500);
play(A, 500);
play(A, 500);
play(G, 1000);
play(F, 500);
play(F, 500);
play(E, 500);
play(E, 500);
play(D, 500);
play(D, 500);
play(C, 1000);
}
}
void delay(unsigned int t)
{
unsigned int i, j;
for(i=0; i<t; i++)
for(j=0; j<100; j++);
}
void play(unsigned int freq, unsigned int duration)
{
unsigned int i;
unsigned int half_period = 1000000 / (2 * freq); // 计算半周期的时间
for(i=0; i<duration/half_period; i++)
{
P1_1 = 0; // 点亮LED
delay(half_period);
P1_1 = 1; // 熄灭LED
delay(half_period);
}
}
```
以上代码实现了“小星星”这首歌的演奏。程序中定义了各个音符的频率,然后通过调用play函数播放各个音符,每个音符的时长为500ms或1000ms。play函数中通过计算半周期的时间来生成相应频率的声音,同时点亮LED,使得演奏过程中LED也会跟着闪烁。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)