51单片机播放小星星
时间: 2023-12-06 07:36:20 浏览: 127
51单片机的音乐播放
以下是51单片机播放小星星的代码实现:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep = P1^5; // 蜂鸣器控制引脚
// 延时函数
void Delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
// 播放音符函数
void PlayMusic(uchar note, uchar beat)
{
uint time;
switch(note)
{
case 1: time = 3822; break; // C
case 2: time = 3405; break; // D
case 3: time = 3034; break; // E
case 4: time = 2863; break; // F
case 5: time = 2551; break; // G
case 6: time = 2273; break; // A
case 7: time = 2024; break; // B
default: time = 0; break;
}
while(beat--)
{
TH0 = (65536 - time) / 256;
TL0 = (65536 - time) % 256;
TR0 = 1;
while(!TF0);
TR0 = 0;
TF0 = 0;
Delay(1);
}
}
// 播放小星星函数
void PlayStar()
{
uchar FreqSelect;
uchar MusicSelect = 0;
uchar Music[] = {1,1,5,5,6,6,5,4,4,3,3,2,2,1,5,5,4,4,3,3,2,5,5,4,4,3,3,2,1,1,5,5,6,6,5,4,4,3,3,2,2,1};
uchar Beat[] = {1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,2};
while(MusicSelect < 40)
{
FreqSelect = Music[MusicSelect];
MusicSelect++;
PlayMusic(FreqSelect, Beat[MusicSelect-1]);
}
}
// 主函数
void main()
{
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0xff; // 定时器0初始值
TL0 = 0xff;
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启总中断
while(1)
{
PlayStar(); // 播放小星星
Delay(500); // 延时500ms
}
}
// 定时器0中断服务函数
void Timer0() interrupt 1
{
beep = ~beep; // 翻转蜂鸣器控制引脚
}
```
阅读全文