以下是一个使用51单片机播放《平凡之路》的简单示例代码:
```c
#include <reg52.h>
// 定义端口
sbit SPK=P1^5; // 蜂鸣器控制端口
// 定义音符频率
#define C4 262
#define D4 294
#define E4 330
#define F4 349
#define G4 392
#define A4 440
#define B4 494
#define C5 523
// 定义音符时长
#define W 200 // 全音符
#define H 100 // 二分之一音符
#define Q 50 // 四分之一音符
#define E 25 // 八分之一音符
// 延时函数
void Delay(unsigned int t)
{
unsigned int i;
while(t--)
{
for(i=0; i<100; i++);
}
}
// 发声函数
void Play(int tone, int time)
{
unsigned int n;
n=1000000/tone;
while(time--)
{
while(n--)
{
SPK=~SPK;
Delay(1);
}
n=1000000/tone;
}
}
// 主函数
void main()
{
int melody[]={
E4, E4, F4, G4, G4, F4, E4, D4, C4, C4, D4, E4, E4, D4, D4,
E4, E4, F4, G4, G4, F4, E4, D4, C4, C4, D4, E4, D4, C4, C4
}; // 平凡之路的简谱
int rhythm[]={
Q, Q, Q, Q, Q, Q, H, Q, Q, Q, Q, Q, Q, H, Q,
Q, Q, Q, Q, Q, Q, H, Q, Q, Q, Q, Q, H, Q, Q
}; // 曲子的节奏
int i;
for(i=0; i<30; i++)
{
Play(melody[i], rhythm[i]);
}
}
```
这个代码中,我们使用了两个数组分别存储了曲子的音符和时长。在主函数中,我们使用了一个循环来依次发出每个音符。在发声函数中,我们根据音符的频率和时长来控制蜂鸣器的发声。你可以根据自己的需要修改代码中的曲谱和节奏,来实现更加复杂的音乐播放器。