51单片机两只老虎 c语言,基于51单片机做音乐盒(两只老虎)
时间: 2023-08-21 10:02:41 浏览: 88
好的,你想了解基于51单片机做音乐盒(两只老虎)的相关内容,我可以为你提供一些帮助。
首先,你需要了解51单片机的基本原理和编程方法,以及如何使用它的定时器和PWM输出来生成音乐。此外,你还需要了解如何使用按键控制音乐的播放和停止。
以下是一个简单的基于51单片机的两只老虎音乐盒程序示例,供你参考:
```
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//定义音符频率
#define C4 0x1fd //中央C
#define D4 0x1a7 //D
#define E4 0x17c //E
#define F4 0x15e //F
#define G4 0x13d //G
#define A4 0x119 //A
#define B4 0x0fa //B
#define C5 0x0e3 //高C
uchar code song[] = {C4,C4,D4,D4,E4,E4,D4,G4,G4,F4,F4,E4,E4,D4};
uchar code beat[] = {1,1,1,1,1,1,2,1,1,1,1,1,2};
//延时函数
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
//初始化定时器
void Init_Timer0()
{
TMOD &= 0xf0;
TMOD |= 0x01; //16位定时器模式
TH0 = 0x0b;
TL0 = 0xdc;
ET0 = 1; //开定时器中断
TR0 = 1; //启动定时器
EA = 1; //开总中断
}
//定时器中断服务程序
void Timer0_ISR() interrupt 1
{
static uchar i = 0;
static uint j = 0;
TH0 = 0x0b;
TL0 = 0xdc;
j++;
if(j >= beat[i])
{
i++;
j = 0;
if(i >= sizeof(song))
i = 0;
}
if(j == 0)
P1 = song[i];
else if(j == beat[i]/2)
P1 = 0;
}
int main()
{
Init_Timer0();
while(1);
return 0;
}
```
在这个程序中,我们使用定时器0的中断来生成音乐。我们使用两个数组来存储音符频率和拍子长度,然后在定时器中断服务程序中不断地切换音符并控制它们的播放和停止。我们还使用了一个简单的延时函数来产生音符之间的间隔。
在硬件方面,你需要连接一个扬声器到单片机的输出引脚,以便能够听到音乐的播放。你还需要连接一些按键到单片机的输入引脚,以便能够控制音乐的播放和停止。
希望这个示例程序能够对你有所帮助。如果你有任何问题,可以随时问我。