📄 yinyue.c
字号:
#include <reg51.h>
sbit Y=P1^3; //播放按键
sbit Speaker=P3^7; //扬声器
static unsigned char bdata StateREG;
sbit m=StateREG^0;
unsigned char code * data Mymusic;
unsigned char data l;
void delay(void); //延时函数声明
unsigned char code music[30]=
{0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82,0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x67,0xFE,0x85};
unsigned char code Mmusic[]=
{
0x35,0x31,0x34,0x34,0x24,0x35,0x32,0x32,0x24,0x38,
0x44,0x58,0x48,0x34,0x31,0x34,0x34,0x24,0x38,0x34,
0x7F,0x32,0x34,0x32,0x34,0x24,0x38,0x34,0x24,0x38,
0x43,0x58,0x48,0x34,0x32,0x34,0x38,0x24,0x38,0x34,
0x7F,0x16,0x4C,0x74,0x78,0x64,0x54,0x48,0x54,0x64,
0x58,0x44,0x34,0x24,0x38,0x24,0x14,0x12,0x21,0x14,
0x78,0x68,0x3F,0x4C,0x74,0x78,0x64,0x52,0x42,0x48,
0x53,0x64,0x58,0x44,0x34,0x24,0x38,0x24,0x24,0x38,
0x44,0x58,0x48,0x3C,0xFF
};
//主程序
void main()
{
unsigned int data j;
unsigned char data i;
unsigned char data k;
unsigned char data p11;
unsigned char data p33;
TMOD=0x01; //初始化
IE=0x82;
while(1)
{
j=0;
m=0;
while(Y==1)
{
for(i=0;i<5;i++)
{
delay(); //延时
}
p11=P1;
p33=P3;
while(*(Mmusic+j)!=0xFF)
{
k=*(Mmusic+j)&0x0F;
l=*(Mmusic+j)>>4;
if((p11!=P1)||((p33&0x0f)!=(P3&0x0f)))
{
goto Next;
}
TH0=music[2*l];
TL0=music[2*l+1];
TR0=1;
if ((music[2*l]==0xff)&&(music[2*l+1]==0xff))
{
TR0=0;
}
for(i=k;i>0;--i)
{
delay();
}
TR0=0;
j++;
}
Next: ;
}
}
}
/*单个音符的发声*/
void timer0() interrupt 1 using 1
{
TH0=music[2*l];
TL0=music[2*l+1];
Speaker = !Speaker;
}
/*汇编语句进行精确延时,延时1/4拍时间即187ms*/
void delay(void)
{
#pragma ASM
MOV R3,#02H
D1: MOV R2,#7DH
D2: MOV R1,#0F8H
DJNZ R1,$
DJNZ R2,D2
DJNZ R3,D1
#pragma ENDASM
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -