📄 音乐盒.c
字号:
#include<REG51.h>
#define uchar unsigned char
#define uint unsigned int
uint timer_number,i;
uchar cnt=0;
uint simple_code,code_h,code_l;
sbit speaker=P1^0;
sbit key=P1^6;
bit flag=0;
void display(uchar);
void delaynms(uchar);
void delay(uchar);
void Seclet(void);
void delay1();
void process(void);
uchar code tab_disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint code tab0[]={64260,64400,64524,64580,64684,64777,64820,64898,
64968,65030,65058,65110,65157,65178,65217}; //各种音符的定时初值。
uchar code tab1[]={0x83,0x81,0x94,0x84,
0xB4,0xA8,
0x83,0x81,0x94,0x84,
0xC4,0xB8, //第一段
0x83,0x81,0xF4,0xD4,
0xB4,0xA4,0x94,
0xE2,0x01,0xE1,0xD4,0xB4,
0xC4,0xB8,0x00};//第二段*/
uchar code tab2[]={0x52,0x61,0x81,0x52,0x21,0x41,
0x54,0x02,0x62,
0x84,0x71,0x81,0x92,
0x84,0x04,
//2
0xB2, 0xB2,0x92,0xB2,
0x82,0x01,0x91,0x82,0x62,
0x52,0x52,0x22,0x52,
0x44,0x04,
//3
0x52,0x01,0x61,0x52,0x42,
0x22,0x21,0x41,0x54,
0x82,0x01,0x81,0x72,0x82,
0x92,0x72,0x84,
//4
0x92,0x92,0x81,0x91,0xA2,
0x94,0x02,0x82,
0x62,0x92,0x82,0x52,
0x64,0x04,
//5
0x82,0x91,0xB1,0x92,0x81,0x61,
0x52,0x61,0x81,0x51,0x61,0x42,
0x22,0x01,0x41,0x61,0x81,0x52,
0x44,0x04,0x00};
uchar code tab3[]={
//甜蜜蜜
0x11,0x21,0x41,0x51,0x64,0x0c,0x14,0x22,0x11,0x21,0x44,0x08,
0x64,0x82,0x92,0x64,0x02,0x42,0x52,0x41,0x52,0x61,
0x81,0x64,0x04,0x52,0x52,0x52,0x51,0x61,0x51,0x41,0x42,0x21,
0x11,0x12,0x44,0x02,0x52,0x62,0x02,0x51,0x61,0x51,0x61,0x81,
0x54,0x08,0x64,0x82,0x92,0x64,0x02,0x42,0x52,0x41,
0x52,0x61,0x81,0x64,0x04,0x52,0x52,0x52,0x51,0x61,0x51,0x41,
0x42,0x21,0x12,0x02,0x44,0x02,0x62,0x51,0x41,0x42,0x21,0x11,
0x12,0x44,0x08,0x64,0x04,0x14,0x21,0x41,0x11,0x21,
0x44,0x08,0x22,0x42,0x22,0x42,0x22,0x21,0x41,0x21,
0x11,0x12,0x64,0x08,0x22,0x42,0x22,0x42,0x22,0x21,
0x41,0x21,0x11,0x12,0x64,0x04,0x64,0x02,0x81,0x91,0x84,0x02,
0x81,0x91,0x84,0x02,0x81,0x91,0x82,0x81,0x91,0x82,0x81,0x91,
0x84,0x04,0x64,0x82,0x92,0x64,0x02,0x42,0x52,0x41,0x52,0x61,
0x81,0x64,0x04,0x52,0x52,0x52,0x51,0x61,0x51,0x41,0x42,0x21,
0x12,0x02,0x44,0x02,0x62,0x51,0x41,0x42,0x21,0x11,0x12,0x44,
0x08,0x64,0x08,0x14,0x21,0x41,0x11,0x21,
0x44,0x08,0x64,0x82,0x92,0x64,0x02,0x42,0x52,0x41,
0x52,0x82,0x64,0x04,0x52,0x52,0x52,0x62,0x52,0x32,0x22,0x12,
0x44,0x02,0x52,0x62,0x51,0x62,0x82,0x54,0x04,0x52,0x32,0x22,
0x12,0x08
};
code uchar tab4[]={//1
0x02,0x41,0x51,0x62,0x62,0x52,0x42,0x24,0x02,0x41,0x51,0x62,0x62,0x52,0x42,0x24,0x03,0x21,0x62,0x55,0x03,0x51,0x51,0x61,0x81,0x61,
//2
0x6c,0x02,0x41,0x51,0x62,0x62,0x52,0x42,0x24,0x02,0x41,0x51,0x62,0x82,0x61,0x51,0x41,0x21,0x24,0x03,0x61,
//3
0x58,0x03,0x51,0x52,0x22,0x52,0x45,0x04,0x02,0x41,0x51,0x62,0x62,0x52,0x42,0x24,0x02,0x41,0x51,
//4
0x62,0x62,0x52,0x42,0x24,0x03,0x21,0x62,0x55,0x03,0x41,0x51,0x61,0x81,0x61,0x6c,0x02,0x41,0x51,
//5
0x62,0x62,0x52,0x42,0x24,0x02,0x41,0x51,0x62,0x82,0x61,0x51,0x41,0x21,0x24,0x03,0x61,0x54,0x03,0x61,0x54,0x21,0x41,0x51,0x41,
//6
0x4c,0x02,0x61,0x81,0x82,0x62,0x62,0xb1,0x91,0x94,0x91,0x81,0x91,0xb1,0x91,0x81,0x82,0x82,0x92,0x81,0x51,0x62,0x02,0x61,0x81,0x82,0x62,0x52,0x42,0x54,0x01,0x51,0x51,0x61,
//7
0x71,0x71,0x71,0x81,0x82,0x92,0x84,0x02,0x61,0x81,0x82,0x62,0x62,0xb1,0x91,0x94,0x91,0x81,0x91,0xb1,0x91,0x81,0x82,0x82,0x92,0x81,0x51,0x62,0x02,0x61,0x81,
//8
0x82,0x61,0x61,0x62,0x51,0x41,0x54,0x01,0x51,0x51,0x61,0x71,0x61,0x71,0x81,0x88,0x52,0x62,0x52,0x45,0x48,0x44,0x00};
uchar code tab5[]={// 月亮代表我的心
//1
0x02,0x12,0x45,0x62,0x85,0x42,0x35,0x62,0x84,0x02,0x82,0x95,0xa2,0xb5,0x92,
//2
0x8c,0x62,0x52,0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,
//3
0x55,0x42,0x24,0x64,0x5c,0x02,0x12,0x45,0x62,0x85,0x42,0x35,0x62,0x84,0x02,0x82,0x95,0xa2,0xb5,0x92,0x8c,0x62,0x52,0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,0x55,0x22,0x34,0x42,0x52,0x4c,0x84,
//4
0x65,0x52,0x44,0x84,0x3c,0x22,0x32,0x25,0x34,0x24,0x14,0x6c,0x84,
//5
0x65,0x52,0x44,0x84,0x3c,0x22,0x32,0x45,0x42,0x45,0x51,0x61,0x5c,0x02,0x12,
//6
0x45,0x62,0x85,0x42,0x35,0x62,0x85,0x82,0x95,0xa2,0xb5,0x92,0x8c,0x62,0x52,
//7
0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,0x55,0x22,0x34,0x42,0x52,0x4c,
//重复
0x62,0x52,0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,0x55,0x22,0x34,0x42,
0x52,0x4c,0x62,0x52,0x45,0x42,0x44,0x62,0x52,0x45,0x42,0x44,0x52,0x62,0x55,0x22,0x34,0x42,0x52,0x4c,0xf,00};
uchar code tab6[]={ //2
0x82,0x62, 0x64,0x82,0x52,0x54,0x62,0x52,
//3
0x52,0x42,0x48,0x42,0x32,0x22,0x32,0x42,
0x32,0x42,0x42,0x52,0x62, 0x6C,0x82,0x62,
0x64,0x82,0x52,0x54,0x62,0x52,0x52,0x42,
0x48,0x42,0x32,
//4
0x22,0x32,0x42,0x32,0x32,0x42,0x42,0x52,
0x48,0x02,0x82,0x92,0xA2,0xB4,0xA2,0xB2,
0xA2,0x92,0x92,0x81,0x71,0x84,0x32,0x82,
0x44,0x52,0x62, 0x72,0x62,0x52,0x42,0x34,0x82,0x62,
//5
0x64,0x82,0x52,0x54,0x62,0x52,0x52,0x42,0x48,0x42,
0x32,0x22,0x32,0x42,0x32,0x32,0x42,0x42,0x52,0x6C,
0x82,0x62,
//6
0x64,0x82,0xC2,0xC4,0xB2,0xA2,
0xA2,0xB2,0xA8,0x42,0x32,
0x22,0x32,0x42,0x32,0x32,0x42,0x42,0x52,
0x48,0x02,0x82,0x92,0xA2,
//7
0xB4,0xA2,0xB2,0xA2,0x92,0x82,0x92,
0x92,0x82,0x84,0x82,0x42,0x52,0x62,
0x74,0x62,0x72,0x82,0x42,0x52,0x62,
0x62,0x62,0x64,0x02,0x92,0xA2,
//8
0xB4,0xA2,0xB2,0xC2,0xB2,0xC2,0xD2,
0xD2,0x82,0x84,0x82,0x42,0x52,0x62,
0x74,0x62,0x72,0x62,0x52,0x52,0x42,
0x32,0x42,0x48,0x02,0x82,
0xD2,0xC2,0x82,0xD2,0xC4,0xC2,0xF2,
//9
0x02,0x72,0x62,0x72,0x82,0xA2,0xA2,0xC2,
0xBC,0x82,0x62,
0x32,0x42,0x44,0x02,0x82,0x92,0x0A2,
0xB4,0xA2,0xB2,0xC2,0xB2,0xA2,0x92,
//10
0x92,0x82,0x84,0x02,0x42,0x52,0x62,
0x74,0x62,0x72,0x82,0x42,0x42,0x92,
0x92,0x82,0x84,0x02,0x82,0x92,0xA2,
0xB4,0xA2,0xB2,0xC2,0xA2,0xC2,0xD2,
//11
0xD2,0x82,0x84,0x02,0x42,0x52,0x62,
0x74,0x62,0x72,0x82,0x42,0x44,
0x51,0x61,0x51,0x41,0x4C,
0x08,0x02,0x82,0x92,0x0A2,
0xB4,0xA2,0xB2,0xA2,0x92,0x82,0x72,
//12
0x72,0x82,0x8C,
0x72,0x62,0x52,0x42,0xA4,0xA4,
0xBF,0x00
};
uchar code tab7[]={
//同桌的你
0x52,0x52,0x52,0x52,0x32,0x42,
0x56,0x76,0x62,0x62,0x62,0x62,
0x42,0x62,0x56,0x56,0x52,0x52,
0x52,0x52,0x72,0x62,0x46,0x44,
0xf2,0x42,0x42,0x42,0x42,0x33,
0x21,0x16,0x14,0xf2,0x82,0x82,
0x82,0x82,0x52,0x62,0x84,0x82,
0xa6,0x92,0x92,0x92,0x93,0x81,
0x72,0x66,0x66,0x72,0x72,0x72,
0x72,0x72,0x82,0x96,0x54,0xf2,
0x72,0x72,0x82,0x92,0x82,0x72,
0x86,0x86,0x00
};
uchar code tab8[]={
//路边的野花不要采
0xc2,0xa1,0xc1,0xd4,0xc2,0xa1,
0xc1,0xd4,0xc2,0xa1,0xc1,0xd2,
0xc2,0xa2,0xa2,0xa4,0xc2,0xa1,
0xc1,0xd4,0xc2,0xa1,0xc1,0xd4,
0xc2,0xa1,0xc1,0x92,0xa2,0x82,
0x82,0x84,0xa4,0xa2,0xc2,0x62,
0x84,0x62,0x84,0x94,0xa2,0x96,
0x94,0x92,0x72,0x62,0x62,0x32,
0x52,0x63,0x91,0x72,0x62,0x62,
0x56,0x84,0x82,0x62,0x62,0x92,
0x72,0x62,0x52,0x62,0x92,0x72,
0x72,0x66,0x63,0x81,0x32,0x52,
0x62,0x52,0x64,0x63,0x81,0x32,
0x52,0x64,0x64,0x62,0x84,0x92,
0xa4,0x94,0x98,0x98,0xc4,0x72,
0x62,0x32,0x56,0x62,0x51,0x61,
0x72,0x62,0x52,0x22,0x54,0x62,
0x51,0x61,0x72,0x62,0x54,0xf4,
0xc4,0xc4,0xa2,0xd2,0xc4,0xa2,
0x92,0xa2,0xc2,0xc2,0x96,0xa4,
0x64,0x82,0x92,0xa4,0x92,0x82,
0x62,0x52,0x86,0x72,0x72,0x62,
0x72,0x62,0x92,0x74,0x32,0x52,
0x62,0x92,0x72,0x72,0x66,0x82,
0x92,0xa2,0xc2,0xc2,0x94,0x52,
0x62,0x82,0x92,0xa2,0xa2,0x86,
0x88,0x84,0xf4,0x00
};
uchar code tab9[]={
//小芳
0xa1,0x61,0x61,0x61,0x62,0xa2,
0xa2,0x62,0x94,0x93,0x61,0x62,
0x92,0x92,0x62,0x84,0x82,0x32,
0x32,0x81,0x81,0x81,0x31,0x74,
0x72,0x52,0x51,0x61,0x72,0x68,
0xa1,0x61,0x61,0x61,0x62,0xa2,
0xa2,0x62,0x94,0x92,0x61,0x61,
0x62,0x92,0x92,0x62,0x84,0x82,
0x32,0x33,0x81,0x82,0x32,0x74,
0x72,0x52,0x51,0x61,0x72,0x68,
0xc1,0xa3,0xa4,0x91,0xa2,0x61,
0x84,0xf1,0x91,0x91,0x91,0x93,
0x61,0x82,0x91,0xa1,0xa4,0xc1,
0xa3,0xa4,0x91,0xa2,0x61,0x62,
0x82,0x91,0x91,0x91,0x82,0x71,
0x61,0x68,0xd1,0xd1,0xd1,0xc1,
0xa1,0xa1,0xa1,0xc1,0xd1,0xd1,
0xd1,0xb1,0xa4,0xf1,0x91,0x91,
0x91,0x93,0x61,0x81,0x81,0x81,
0x91,0xa4,0xd1,0xd1,0xd1,0xc1,
0xa1,0xa1,0xa1,0xc1,0xd1,0xd1,
0xd1,0xb1,0xa4,0x81,0x82,0x81,
0x71,0x61,0x71,0x61,0x68,0x00 };
main()
{
TMOD=0x01;
ET0=1;
EA=1;
while(1)
{
Seclet();
aa: display(cnt);
switch(cnt)
{
case 0:
do
{simple_code=tab1[i]; Seclet();
if(flag){flag=0;goto aa;}
process();}while(simple_code!=0);
cnt++;
break;
case 1:
do
{simple_code=tab2[i];Seclet();
if(flag){flag=0;goto aa;}
process();}while(simple_code!=0);
cnt++;
break;
case 2:
do
{simple_code=tab3[i]; Seclet();
if(flag){flag=0;goto aa;}
process();}while(simple_code!=0);
cnt++;
break;
case 3:
do
{simple_code=tab4[i]; Seclet();
if(flag){flag=0;goto aa;}
process();}while(simple_code!=0);
cnt++;
break;
case 4:
do
{simple_code=tab5[i]; Seclet();
if(flag){flag=0;goto aa;}
process();}while(simple_code!=0);
cnt++;
break;
case 5:
do
{simple_code=tab6[i]; Seclet();
if(flag){flag=0;goto aa;}
process();}while(simple_code!=0);
cnt++;
break;
case 6:
do
{simple_code=tab7[i]; Seclet();
if(flag){flag=0;goto aa;}
process();}while(simple_code!=0);
cnt++;
break;
case 7:
do
{simple_code=tab8[i]; Seclet();
if(flag){flag=0;goto aa;}
process();}while(simple_code!=0);
cnt++;
break;
case 8:
do
{simple_code=tab9[i]; Seclet();
if(flag){flag=0;goto aa;}
process();}while(simple_code!=0);
cnt=0;
break;
default:
break;
}
i=0;
delay(3);
}
}
void timer0_int(void) interrupt 1 using 0
{
TH0=timer_number/256;
TL0=timer_number%256;
speaker=!speaker;
}
void delay(uchar count)
{
uint z;
for(z=0;z<count;z++)
{delay1();}
}
void process(void)
{
code_h=simple_code/0x10;
code_l=simple_code%0x10;
i++;
if(code_h!=0)
{
timer_number=tab0[code_h-1];
TR0=1;
delay(code_l);
}
else{ TR0=0;
delay(code_l);}
}
void delaynms(uchar x )
{
uchar j;
while(x--)
{
for(j=0;j<120;j++)
{;}
}
}
void display(uchar dis)
{
P0=tab_disp[dis];
P2=0x01;
}
void Seclet(void)
{
if(!key)
{
delaynms(10);
if(!key)
{
while(!key);
cnt++;
flag=1;
TH0=0;
TL0=0;
i=0;
if(cnt==10)cnt=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -