#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit buzzer=P1^5;
sbit DIN=P2^0;
sbit CS=P2^1;
sbit CLK=P2^2;
unsigned char keys;
unsigned char key;
unsigned char mus;
unsigned char ch;
unsigned char ch1,ch2;
unsigned char flag;
unsigned int choose=1;
unsigned int flag_start;
/*声明音阶数组 Do Re Mi Fa So La Si Do_H*/
unsigned char code tone[8]={115,102,91,86,77,68,61,57};
uchar code disp1[8][8]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80},//Do
{0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40},//Re
{0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20},//Mi
{0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10},//Fa
{0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08},//So
{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04},//La
{0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02},//Si
{0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}//Do_H*
};
//------小星星-----
uchar code music1[42]={
0x77,0x77,0xbb,0xbb,0xdb,0xdb,0xbb,
0x7b,0x7b,0xd7,0xd7,0xb7,0xb7,0x77,
0xbb,0xbb,0x7b,0x7b,0xd7,0xd7,0xb7,
0xbb,0xbb,0x7b,0x7b,0xd7,0xd7,0xb7,
0x77,0x77,0xbb,0xbb,0xdb,0xdb,0xbb,
0x7b,0x7b,0xd7,0xd7,0xb7,0xb7,0x77
};
//------我爱我的幼儿园-----
uchar code music2[28]={
0x77,0xb7,0xd7,0x7b,0xbb,0xbb,0xbb,
0xbb,0xbb,0xd7,0x77,0xb7,0xd7,0xb7,
0x77,0xb7,0xd7,0x7b,0xbb,0xbb,0xbb,
0xbb,0xbb,0xd7,0x77,0xb7,0xd7,0x77
};
//-----粉刷匠-----
uchar code music3[48]={
0xbb,0xd7,0xbb,0xd7,0xbb,0xd7,0x77,
0xb7,0x7b,0xd7,0xb7,0xbb,
0xbb,0xd7,0xbb,0xd7,0xbb,0xd7,0x77,
0xb7,0x7b,0xd7,0xb7,0x77,
0xb7,0xb7,0x7b,0x7b,0xd7,0x77,0xbb,
0xb7,0x7b,0xd7,0xb7,0xbb,
0xbb,0xd7,0xbb,0xd7,0xbb,0xd7,0x77,
0xb7,0x7b,0xd7,0xb7,0x77
};
void display(unsigned char);
void sound(int);
void delay(int);
uchar keyscan(void);
void writebyte(unsigned char);
void write_MAX7219(unsigned char,unsigned char);
void init();
void UART_init();
void UART_SER (void);
void sing();
void sing_1();
void sing_2();
//--------主程序--------
void main()
{
// uchar j;
// uchar key_1,key_2;
UART_init();
while(1)
{
key=keyscan();
sing();
if(flag)
{
sing_2();
flag=0;
}
}
}
//--------发声函数------
void sound(int x)
{
int i;
for(i=0;i<100;i++)
{
buzzer=0;
delay(tone[x]);
buzzer=1;
delay(tone[x]);
}
}
//-------延时函数--------
void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<1;j++);
}
//------矩阵键盘---------
uchar keyscan(void)
{
uchar cord_h,cord_l;
P0=0x0f;
cord_h=P0&0x0f;
if(cord_h!=0x0f)
{
delay(200);
if(cord_h!=0x0f)
{
cord_h=P0&0x0f;
P0=cord_h|0xf0;
cord_l=P0&0xf0;
return(cord_h+cord_l);
}
}
return(0xff);
}
//-------点阵LED-------
void writebyte(uchar sj)
{
uchar i;
CS=0;
for(i=0;i<8;i++)
{
CLK=0;
DIN=sj&0x80;
sj=sj<<1;
CLK=1;
}
}
void write_MAX7219(uchar address,uchar date)
{
CS=0;
writebyte(address);
writebyte(date);
CS=1;
}
void init()
{
write_MAX7219(0x09,0x00);
write_MAX7219(0x0a,0x01);
write_MAX7219(0x0b,0x07);
write_MAX7219(0x0c,0x01);
write_MAX7219(0x0f,0x00);
}
//-------串口通信-------
void UART_init()
{
SCON=0x50;
TMOD=0x20;
TH1=0xfd; //Baud rate=9600
TL1=0xfd;
TR1=1;
ES=1;
EA=1;
}
void UART_SER (void) interrupt 4
{
if(RI)
{
RI=0;
ch=SBUF;
ch1=SBUF;
ch2=SBUF;
flag=1;
}
if(TI)
{
TI=0;
}
}
//--------播放操作--------
void sing()
{
uchar i;
if(key==0x77)//1
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[0][i-1]);
delay(50);
sound(0);
}
else if(key==0xb7)//2
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[1][i-1]);
delay(50);
sound(1);
}
else if(key==0xd7)//3
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[2][i-1]);
delay(50);
sound(2);
}
else if(key==0x7b)//4
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[3][i-1]);
delay(50);
sound(3);
}
else if(key==0xbb)//5
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[4][i-1]);
delay(50);
sound(4);
}
else if(key==0xdb)//6
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[5][i-1]);
delay(50);
sound(5);
}
else if(key==0x7d)//7
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[6][i-1]);
delay(50);
sound(6);
}
else if(key==0xbd)//8
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[7][i-1]);
delay(50);
sound(7);
}
}
//------存储歌曲------
void sing_1()
{
uchar i;
if(mus==0x77)//1
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[0][i-1]);
delay(50);
sound(0);
}
else if(mus==0xb7)//2
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[1][i-1]);
delay(50);
sound(1);
}
else if(mus==0xd7)//3
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[2][i-1]);
delay(50);
sound(2);
}
else if(mus==0x7b)//4
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[3][i-1]);
delay(50);
sound(3);
}
else if(mus==0xbb)//5
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[4][i-1]);
delay(50);
sound(4);
}
else if(mus==0xdb)//6
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[5][i-1]);
delay(50);
sound(5);
}
else if(mus==0x7d)//7
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[6][i-1]);
delay(50);
sound(6);
}
else if(mus==0xbd)//8
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[7][i-1]);
delay(50);
sound(7);
}
}
//-------上位机-------
void sing_2()
{
uchar i,j;
if(ch=='1')//1
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[0][i-1]);
delay(50);
sound(0);
}
else if(ch=='2')//2
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[1][i-1]);
delay(50);
sound(1);
}
else if(ch=='3')//3
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[2][i-1]);
delay(50);
sound(2);
}
else if(ch=='4')//4
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[3][i-1]);
delay(50);
sound(3);
}
else if(ch=='5')//5
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[4][i-1]);
delay(50);
sound(4);
}
else if(ch=='6')//6
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[5][i-1]);
delay(50);
sound(5);
}
else if(ch=='7')//7
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[6][i-1]);
delay(50);
sound(6);
}
else if(ch=='8')//8
{
init();
for(i=1;i<9;i++)
write_MAX7219(i,disp1[7][i-1]);
delay(50);
sound(7);
}
else if(ch=='9')//开始播放
{
flag_start=1;
if(choose==1&&flag_start==1)
{
for(j=0;j<42;j++)
{
delay(200);
mus=music1[j];
if(ch1=='a')//暂停
{
ch1='0';
while(1)
{
if(ch1=='a')
{
ch1='0';
break;
}
}
}
else if(ch1=='c')//停止
{
break;
}
else if(ch1=='d')//下一首
{
choose=2;
break;
}
else if(ch1=='e')//上一首
{
choose=3;
break;
}
sing_1();
}
}
else if(choose==2&&flag_start==1)
{
for(j=0;j<28;j++)
{
delay(200);
mus=music2[j];
if(ch1=='a')//
{
ch1='0';
while(1)
{
if(ch1=='a')
{
ch1='0';
break;
}
}
}
else if(ch1=='c')
{
break;
}
else if(ch1=='d')
{
choose=3;
break;
}
else if(ch1=='e')
{
choose=1;
break;
}
sing_1();
}
}
else if(choose==3&&flag_start==1)
{
for(j=0;j<48;j++)
{
delay(200);
mus=music3[j];
if(ch1=='a')//
{
ch1='0';
while(1)
{
if(ch1=='a')
{
ch1='0';
break;
}
}