基于单片机的音乐盒程序

#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar count=0,count1=0; //count1 歌曲标志
uchar key,count2,h=1,i;
uchar temp; //temp歌调
uchar s1,s2,m1,m2;
uchar second,minute,j=0;
void delay1(uint z); //延时1ms
sbit key2=P3^2; // 按key2可切换歌曲
sbit key1=P3^3;
sbit fm=P3^7;//蜂鸣器连续的IO口
sbit rs=P2^2;
sbit rw=P2^1;
sbit e=P2^0;
sbit busy=P0^0;
sbit CS1=P2^4;
sbit CS2=P2^3;
//==================字模====================//
char code shu[22][8]={
{0xFF,0x1F,0xEF,0xF7,0xF7,0xEF,0x1F,0xFF},
{0xFF,0xF0,0xEF,0xDF,0xDF,0xEF,0xF0,0xFF},/*"0",0*/
{0xFF,0xEF,0xEF,0x07,0xFF,0xFF,0xFF,0xFF},
{0xFF,0xDF,0xDF,0xC0,0xDF,0xDF,0xFF,0xFF},/*"1",1*/
{0xFF,0x8F,0xF7,0xF7,0xF7,0x77,0x8F,0xFF},
{0xFF,0xCF,0xD7,0xDB,0xDD,0xDE,0xCF,0xFF},/*"2",2*/
{0xFF,0xCF,0xF7,0x77,0x77,0xB7,0xCF,0xFF},
{0xFF,0xE7,0xDF,0xDF,0xDF,0xEE,0xF1,0xFF},/*"3",3*/
{0xFF,0xFF,0x3F,0xDF,0xEF,0x07,0xFF,0xFF},
{0xFF,0xF8,0xFB,0xDB,0xDB,0xC0,0xDB,0xFF},/*"4",4*/
{0xFF,0x07,0xF7,0x77,0x77,0xF7,0xF7,0xFF},
{0xFF,0xE6,0xDE,0xDF,0xDF,0xEE,0xF1,0xFF},/*"5",5*/
{0xFF,0x1F,0xEF,0x77,0x77,0xE7,0xFF,0xFF},
{0xFF,0xF0,0xEE,0xDF,0xDF,0xEE,0xF1,0xFF},/*"6",6*/
{0xFF,0xC7,0xF7,0xF7,0x37,0xC7,0xF7,0xFF},
{0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF},/*"7",7*/
{0xFF,0x8F,0x77,0xF7,0xF7,0x77,0x8F,0xFF},
{0xFF,0xE3,0xDD,0xDE,0xDE,0xDD,0xE3,0xFF},/*"8",8*/
{0xFF,0x1F,0xEF,0xF7,0xF7,0xEF,0x1F,0xFF},
{0xFF,0xFF,0xCE,0xDD,0xDD,0xEE,0xF0,0xFF},/*"9",9*/
{0xFF,0xFF,0xFF,0x3F,0x3F,0xFF,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xCF,0xCF,0xFF,0xFF,0xFF},/*":",0*/
};


unsigned char code xing[14][16]={
{0xFF,0xEF,0xEF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xEF,0xF7,0xF7,0xEF,0x1F,0xFF},
{0xFF,0xDF,0xDF,0xC0,0xDF,0xDF,0xFF,0xFF,0xFF,0xF0,0xEF,0xDF,0xDF,0xEF,0xF0,0xFF},/*"10",0*/
//{0xFF,0x03,0xBB,0xBB,0xBB,0x03,0xEF,0x6F,0xEF,0xEF,0xEF,0x00,0xEF,0xEF,0xEF,0xFF},
//{0xFF,0xF8,0xFB,0xFB,0xFB,0xF8,0xFF,0xFF,0xFC,0xBF,0x7F,0x80,0xFF,0xFF,0xFF,0xFF},/*"应",1*/
//{0xBF,0xBF,0xBB,0xBB,0xBB,0xBB,0x3B,0x3B,0xBB,0xBB,0xB9,0xB9,0x9B,0x9F,0xBF,0xFF},
//{0xFF,0xDF,0x8F,0xC7,0xD3,0xD8,0xDC,0xCE,0xEF,0xED,0xEB,0xE7,0x8F,0xDF,0xFF,0xFF},/*"用",2*/
//{0xFF,0xFF,0x07,0xB7,0xB7,0xB7,0xB7,0x00,0xB7,0xB7,0xB7,0xB7,0x07,0xFF,0xFF,0xFF},
//{0xFF,0xFF,0xF0,0xFB,0xFB,0xFB,0xFB,0xC0,0xBB,0xBB,0xBB,0xBB,0xB0,0xBF,0x8F,0xFF},/*"电",0*/
//{0xFF,0xDF,0xEF,0x73,0x58,0x5B,0x5B,0x5B,0x5B,0x5B,0x5B,0x5B,0xDB,0xFB,0xFB,0xFF},
//{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xCF,0xBF,0x0F,0xFF},/*"子",1*/
{0xFF,0xFF,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xF9,0xFB,0xFF,0xFF,0xFF},
{0xFF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE7,0xEF,0xFF},/*"二",2*/
{0xBD,0xBD,0x01,0xBD,0xBD,0x1F,0xFF,0x00,0xFF,0xBD,0xBD,0x01,0xBD,0xBD,0xBD,0xFF},
{0xEF,0xEF,0xF0,0x77,0xB6,0xDF,0xE7,0xF8,0xDF,0xDF,0xDF,0xC0,0xDF,0xDF,0xDF,0xFF},/*"班",3*/
};
unsigned char code xuehao[20][16]={
{0xFF,0

x1F,0xEF,0xF7,0xF7,0xEF,0x1F,0xFF,0xFF,0xF0,0xEF,0xDF,0xDF,0xEF,0xF0,0xFF},/*"0",0*/
{0xFF,0xEF,0xEF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xDF,0xC0,0xDF,0xDF,0xFF,0xFF},/*"1",1*/
{0xFF,0x8F,0xF7,0xF7,0xF7,0x77,0x8F,0xFF,0xFF,0xCF,0xD7,0xDB,0xDD,0xDE,0xCF,0xFF},/*"2",2*/
{0xFF,0x1F,0xEF,0xF7,0xF7,0xEF,0x1F,0xFF,0xFF,0xF0,0xEF,0xDF,0xDF,0xEF,0xF0,0xFF},/*"0",3*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",4*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",5*/
{0xFF,0x1F,0xEF,0xF7,0xF7,0xEF,0x1F,0xFF,0xFF,0xF0,0xEF,0xDF,0xDF,0xEF,0xF0,0xFF},/*"0",6*/
{0xFF,0xEF,0xEF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xDF,0xC0,0xDF,0xDF,0xFF,0xFF},/*"1",7*/
{0xFF,0xEF,0xEF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xDF,0xC0,0xDF,0xDF,0xFF,0xFF},/*"1",8*/
{0xFF,0xCF,0xF7,0x77,0x77,0xB7,0xCF,0xFF,0xFF,0xE7,0xDF,0xDF,0xDF,0xEE,0xF1,0xFF},/*"3",9*/
};

char code _mamahao[14][16]={
{0xDF,0xDF,0xDF,0x01,0xDF,0xDF,0x01,0xDF,0xDF,0xDF,0xDF,0x01,0xDF,0xDF,0xDF,0xFF},
{0xFF,0xFF,0xFF,0xC0,0xDF,0xDF,0xD8,0xDD,0xDD,0xDD,0xDD,0xD8,0xCF,0xDF,0xFF,0xFF},/*"世",0*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xBF,0xBF,0xBF,0xBF,0xBF,0xFF,0xFF,0xFF},
{0xFF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0x80,0xBF,0xBF,0xBF,0xBF,0xBF,0x9F,0xBF,0xFF},/*"上",1*/
{0xFF,0xFF,0xFF,0x01,0x7D,0x7D,0x7D,0x7D,0x7D,0x7D,0x7D,0x7D,0x01,0xFF,0xFF,0xFF},
{0xFF,0xBF,0xDF,0xCE,0xE7,0xF1,0xFB,0xFF,0xFF,0xFF,0xFD,0xFB,0xE6,0x8F,0xDF,0xFF},/*"只",2*/
{0xFF,0xFB,0x7B,0xBB,0x1B,0xCB,0xD3,0xD8,0xDB,0xDB,0xDB,0x1B,0xFB,0xFB,0xFB,0xFF},
{0xFD,0xFE,0xFF,0xFF,0x00,0xF6,0xF6,0xF6,0xD6,0xB6,0x36,0x80,0xFF,0xFF,0xFF,0xFF},/*"有",3*/
{0xEF,0xEF,0x0F,0xE0,0xEF,0x0F,0xFF,0xFD,0x05,0x7D,0x7D,0x7D,0x01,0x7F,0x7F,0xFF},
{0xBF,0xDD,0xEA,0xF3,0xF4,0x8F,0xDB,0xFB,0xFB,0xFB,0xFB,0xBB,0x7B,0xBF,0xC0,0xFF},/*"妈",4*/
{0xEF,0xEF,0x0F,0xE0,0xEF,0x0F,0xFF,0xFD,0x05,0x7D,0x7D,0x7D,0x01,0x7F,0x7F,0xFF},
{0xBF,0xDD,0xEA,0xF3,0xF4,0x8F,0xDB,0xFB,0xFB,0xFB,0xFB,0xBB,0x7B,0xBF,0xC0,0xFF},/*"妈",5*/
{0xEF,0xEF,0x0F,0xE0,0xEF,0x0F,0x7F,0x7D,0x7D,0x7D,0x0D,0x75,0x79,0x7D,0x7F,0xFF},
{0x7F,0xBC,0xDD,0xEB,0xF3,0x8C,0xDF,0xFF,0xBF,0x7F,0x80,0xFF,0xFF,0xFF,0xFF,0xFF},/*"好",6*/
};

char code _ganen[14][16]={
{0xFF,0xFF,0x03,0xEB,0x2B,0xAB,0xAB,0x2B,0xFB,0xC0,0x3B,0xBA,0xC9,0xFB,0xFF,0xFF},
{0xFB,0xBC,0x8F,0xFF,0xC6,0xBE,0xBE,0xB6,0xAF,0xBD,0xBE,0x9E,0xF5,0xCB,0xD8,0xFF},/*"感",0*/
{0xFF,0xFF,0xFF,0x00,0x7E,0x76,0x36,0x56,0x60,0x56,0x36,0x76,0x00,0xFF,0xFF,0xFF},
{0xFF,0xCF,0xF3,0xFF,0xC3,0xBF,0xBF,0xBD,0xB3,0xBF,0xBF,0x8F,0xFB,0xC7,0xEF,0xFF},/*"恩",1*/
{0xFF,0x07,0x73,0x74,0x77,0x07,0xBF,0xCF,0x70,0xF7,0xF7,0xF7,0xF7,0x07,0xFF,0xFF},
{0xFF,0x80,0xEF,0xEF,0xEF,0xC0,0xFF,0xFF,0xFF,0xFC,0xD9,0xBF,0xDF,0xE0,0xFF,0xFF},/*"的",2*/
{0xFF,0x7F,0xFF,0xFF,0x0F,0xFF,0xFE,0xFD,0xE3,0xF7,0xFF,0xBF,0x7F,0xFF,0xFF,0xFF},
{0xFB,0xFC,0xFF,0xFF,0xC0,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0x87,0xFF,0xF8,0xFD,0xFF},/*"心",3*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x

FF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",2*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",3*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",4*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",5*/
};

char code _qnzl[14][16]={
{0xBF,0xBF,0xBB,0xBB,0xBB,0xBB,0xBB,0x03,0xBD,0xBD,0xBD,0xBC,0xBD,0x9F,0xBF,0xFF},
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*"千",0*/
{0xBF,0xDF,0xEF,0xF3,0x1C,0xDD,0xDD,0xDD,0x01,0xDD,0xDD,0xDD,0xDD,0xFD,0xFF,0xFF},
{0xFB,0xFB,0xFB,0xFB,0xF8,0xFB,0xFB,0xFB,0x00,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFF},/*"年",1*/
{0xFF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF6,0xF5,0xF3,0x77,0xB7,0xD7,0xE3,0xF7,0xFF,0xFF},
{0xDF,0x9F,0xCF,0xF7,0xE7,0xDB,0xDB,0xDD,0xBE,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xFF},/*"之",2*/
{0x7F,0x7B,0xBB,0xCB,0xFB,0x03,0xFA,0xF9,0xFB,0x03,0xFB,0xEB,0xDB,0x3B,0xBB,0xFF},
{0xFF,0xDF,0xC7,0xFF,0xC3,0xBE,0xBF,0xBB,0xA7,0xBE,0xBF,0x8F,0xFB,0xF7,0xCF,0xFF},/*"恋",3*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",2*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",3*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",4*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",5*/
};

/* 于键消抖的延时函数 */
void delay5()
{ uint t;
for (t=400;t>0;t--);
}

/*======音乐按键扫描函数======= */
uchar keyscan(void) //键盘扫描
{ {unsigned char key_l,key,s;
key_l=P1&0x0f;
if(key_l!=0x0f) // 判断是否有按键按下
{ delay5() ; //消抖
if(key_l!=0x0f) //再次判断是否有按键按下
{
key_l=P1&0x0f; //扫描列 得到列值
P1=0X7f; //0111 1111
if(P1!=0x7f) key=P1;
P1=0Xbf; //1011 1111
if(P1!=0xbf) key=P1;
P1=0Xdf;
if(P1!=0xdf) key=P1;
P1=0Xef;
if(P1!=0xef) key=P1;
P1=0x0f;
} delay1(1000);
}
switch(key)
{
case 0xeb: count1=1;i=0; TR1=1;second=0;s1=0;s2=0; break;
case 0xd7: count1=2;i=0; TR1=1;second=0;s1=0;s2=0; break;
case 0xdb: count1=3;i=0; TR1=1;second=0;s1=0;s2=0; break;
case 0xdd: count1=4;i=0; TR1=1;second=0;s1=0;s2=0; break;
case 0xb7: count1=5;i=0; TR1=1;second=0;s1=0;s2=0; break;
case 0xbb: count1=6;i=0; TR1=1;second=0;s1=0;s2=0; break;
case 0xbd: count1=7;i=0;

TR1=1;second=0;s1=0;s2=0; break;
case 0x77: count1=8;i=0; TR1=1;second=0;s1=0;s2=0; break;
case 0x7b: count1=9;i=0; second=0;s1=0;s2=0; TR1=1; break;
case 0x7d: count1=10;i=0; second=0;s1=0;s2=0; TR1=1; break;
case 0xe7: count2=1;count1=1;break; //开机键ON/C
case 0xed: count2=2;h=0; s=second;delay1(100); TR1=1;second=0;s1=0;s2=0; break; //暂停键 =
case 0xee: count1=count1+1;i=0; delay1(100); TR1=1;second=0;s1=0;s2=0;
if(count1==4) count1=1;break; //下一曲 +
case 0xde: count1=count1-1;i=0; delay1(100); TR1=1; second=0;s1=0;s2=0;
if(count1==0) count1=3;break; //上一曲 -
case 0xbe: count2=5;h=1; TR0=1; s=second; break; TR1=1; //播放键
default:break;
}
P1 = 0x0f;
}
}
//=======外部中断INT0==========//
void ZD() interrupt 0
{
keyscan();
}
//===========显示延迟=======================//
delay2(int a)
{int b;
for(;a>0;a--)
for(b=0;b<255;b++);
}
check() //查忙
{e=1;
rw=1;
rs=0;
P0=0xff;
if(busy);
}
/*写指令程序*/
wc(unsigned char dat)
{check();
e=0;
rw=0;
rs=0;
P0=dat;
e=1;
e=0;
}
/* 写数据程序*/
wd(unsigned char dat)
{check();
e=0;
rw=0;
rs=1;
P0=dat;
e=1;
e=0;
}

void zifu(unsigned char page,unsigned char lineadd,int n,int a, unsigned char table[][8])
{ int j,k,i;
unsigned char temp[16];
if(lineadd<0X80) //128列
{CS1=0;
CS2=1;} //左半屏left
for(j=2*a;j{
if(lineadd>=0X80)
{
CS1=1; //right
CS2=0;
lineadd=lineadd-0X40;
}
for(k=0;k<8;k++)
{temp[k]=table[j][k];}
j+=1;
for(k=0;k<8;k++)
{temp[8+k]=table[j][k];}
wc(page);
wc(lineadd);
for(i=0;i<8;i++)
{ wd(temp[i]);}
wc(page+1);
wc(lineadd);
for(i=8;i<16;i++)
{ wd(temp[i]);}
lineadd+=8;
} }
void hanzi(unsigned char page,unsigned char lineadd,int n,unsigned char table[][16])
{unsigned char temp[32];
int j,k,i;
if(lineadd<0X80)
{CS1=0;
CS2=1;} //left
for(j=0;j{
if(lineadd>=0X80)
{
CS1=1; //right
CS2=0;
lineadd=lineadd-0X40;
}
for(k=0;k<16;k++)
{temp[k]=table[j][k];}
j+=1;
for(k=0;k<16;k++)
{temp[16+k]=table[j][k];}
wc(page);
wc(lineadd);
for(i=0;i<16;i++)
{ wd(temp[i]);}
wc(page+1);
wc(lineadd);
for(i=16;i<32;i++)
{ wd(temp[i]);}
lineadd+=16;
}
}

//------------------简谱音调对应的定时器初值--------//
//适合11.0592M的晶振
uchar code cuzhi[]={
0xff,0xff,/

/占位 停顿
0xFC,0x8E,//中音1-7
0xFC,0xED,
0xFD,0x43,
0xFD,0x6A,
0xFD,0xB3,
0xFD,0xF3,
0xFE,0x2D,
0xFE,0x47, //高音1-7
0xFE,0x76,
0xFE,0xA1,
0xFE,0xC7,
0xFE,0xD9,
0xFE,0xF9,
0xFF,0x16
};
/* 函数声明*/
void delay1(uint z);//延时1mS
void delay(uint z); //延时165ms,即十六分音符
void song();
void beep(); //蜂鸣器叫一声
/* 初始化程序 */
void inti()
{ wc(0X3f);//显示开关关 0011 1111
wc(0XC0);//修改显示起始行 1100 0000
wc(0XB8);//修改页地址,x地址 1011 1000
wc(0X40);//修改列地址,y地址 0100 0000
}

uchar timeh,timel,i;
//---------------------------简谱---------------------------------------
//编程规则:字节高位是简谱,低位是节拍持续时间,
//代表多少个十六分音符
//1-7代表中音,8-E代表高音,0代表停顿
//最后的0是结束标志
//===================== 歌曲 ============//

uchar code mamahao[]={ //世上只有妈妈好
//世上只有妈妈好
0x68,0x52,0x34,0x54,0x84,0x62,0x52,0x68,
//世上只有妈妈好
0x34,0x52,0x62,0x54,0x34,0x12,0xc2,0x52,0x32,0x28,
//有妈的孩子像个宝
0x24,0x32,0x54,0x52,0x62,0x34,0x24,0x18,
//投进了妈妈的怀抱
0x54,0x32,0x22,0x12,0xc2,0x12,0xb8,0x04,0xff,
//幸福享不了
};

uchar code ganen[]={//感恩的心
0x12,0x14,0x22,0x32,0x54,
//我来自偶然,
0x32,0x84,0x72,0x62,0x54,
//像一颗尘土,
0x02,0x62,0x62,0x52,0x54,0x12,0x22,0x32,0x28,
//有谁看出我的脆弱,
0x12,0x14,0x22,0x32,0x54,
//我来自何方,
0x32,0x84,0x92,0x82,0x54,
//我情归何处,
0x32,0x24,0x21,0x61,0x54,0x22,0x32,0x12,0x18,
//谁在下一刻呼唤我,
0x22,0x24,0x12,0x24,0x11,0x21,0x34,0x32,0x21,0x31,0x34,
//天地虽宽 这条路却难走
0x12,0x22,0x22,0x22,0x11,0x21,0x22,0x64,0x52,0x52,0x32,0x38,
//我看遍这人间坎坷辛苦
0x31,0x52,0x51,0x52,0x31,0x51,0x58,
//我还有多少爱
0x31,0x82,0x81,0x82,0x31,0x61,0x68,
//我还有多少泪
0x62,0x62,0x62,0x51,0x61,0x64,0x61,0x82,0x61,0x9c,
//要苍天知道 我不认输
0x52,0xa4,0x92,0xa4,0x32,0x84,0x72,0x64,
//感恩的心 感谢有你
0x62,0x94,0x82,0x94,
//伴我一生
0x61,0x81,0x92,0x91,0x91,0x92,0x81,0xa1,0xa2,0x92,0x94,
//让我有勇气做我自己
0x52,0xa4,0x92,0xa4,0x32,0x84,0x72,0x64,
//感恩的心 感谢命运
0x52,0x62,0x81,0x81,0x82,0x92,0xa2,0x94,0x82,0x72,0x82,0x88,
//花开花落我一样会珍惜
};

uchar code qnzl[]={ //千年之恋
0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,
//前奏
0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
//竹林的灯火 到过的沙漠
0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,
//七色的国度 不断飘逸风中
0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
//有一种神秘 灰色的旋涡
0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,
//将我卷入了迷雾中
0x63,0xA1,0xA2,0x62,0x92,

0x82,0x52,
//看不清的双手
0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,
//一朵花传来谁经过的温柔
0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,
//穿越千年的伤痛
0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
//只为求一个结果
0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
//你留下的轮廓 指引我
0x42,0x63,0x83,0x83,0x91,0x91,
//黑夜中不寂寞
0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,
//穿越千年的哀愁
0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
//是你在尽头等我
0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
//最美丽的感动 会值得
0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff//结束标志
//用一生守候
};

//===========计时程序=========//
void jishi()
{ s1=s2=m1=m2=0;
s1=second/10; //秒十位
s2=second%10; //秒个位
m1=minute/10;
m2=minute%10;
}
void timer() interrupt 3 //T1分秒计时
{ TH1=15536/256;
TL1=15536%256;
j++;
if(j==20)
{j=0;
if(second++>=60)
{second=0;
minute++;
}
}
}
void show()
{jishi();
zifu(0xba,0x40,2,m1,&shu);
zifu(0xba,0x48,2,m2,&shu);
zifu(0xba,0x50,2,0x0a,&shu);
zifu(0xba,0x58,2,s1,&shu);
zifu(0xba,0x60,2,s2,&shu);

}

//=========唱歌显示歌名============//
void song()
{
uint temp; //temp歌调
uchar jp; //jp是简谱
while(1)
{ if(h==0)
{ do{TR0=0; //停止T0工作
fm=1;}while(h==0);}
if(count1==0)
break;
// if(count1==1){ inti(); while(1) {hanzi(0xb8,0x40,14,&_muqin);show();break; } temp=muqin[i]; }
if(count1==1){ inti(); while(1) {hanzi(0xb8,0x40,14,&_mamahao);show();break;} temp=mamahao[i]; }
// if(count1==3){ inti(); while(1) {hanzi(0xb8,0x40,14,&_exql);show(); break; } temp=exql[i]; }
if(count1==2){ inti(); while(1) {hanzi(0xb8,0x40,14,&_ganen);show(); break; } temp=ganen[i]; }
// if(count1==5){ inti(); while(1) {hanzi(0xb8,0x40,14,&_qizige);show();break; } temp=qizige[i]; }
// if(count1==6){ inti(); while(1) {hanzi(0xb8,0x40,14,&_xqw);show();break; } temp=xqw[i]; }
// if(count1==7){ inti(); while(1) {hanzi(0xb8,0x40,14,&_zpy);show();break; } temp=zpy[i]; }
if(count1==3){ inti(); while(1) {hanzi(0xb8,0x40,14,&_qnzl);show(); break; } temp=qnzl[i]; }
// if(count1==9){ inti(); while(1) {hanzi(0xb8,0x40,14,&_tiger);show(); break; } temp=tiger[i]; }
// if(count1==10){ inti(); while(1) {hanzi(0xb8,0x40,14,&_jmszl);show();break; } temp=jmszl[i]; }
if(temp==0xff)
break;
jp=temp/16; // 取高4位
if(jp!=0)
{
timeh=cuzhi[jp*2];// 初值
timel=cuzhi[jp*2+1];
}
else
{
TR0=0; //停止T0工作
fm=1;//关蜂鸣器
}
delay(temp%16); // 取低4位
TR0=0; //唱完一个音停10mS
fm=1;
delay1(10);
TR0=1;
i++;
}
TR0=0;
fm=1;

}
void timer0() interrupt 1 //用于

产生各种音调 T0
{
TH0=timeh;
TL0=timel;
fm=~fm;
}
void delay(uint z) //延时165ms,即十六分音符
{ uint x,y;
for(x=z;x>0;x--)
for(y=19000;y>0;y--);
}
void delay1(uint z) //显示延时1ms
{ uint x,y;
for(x=z;x>0;x--)
for(y=112;y>0;y--);
}

/*======== 主函数 ======== */
main()
{ P1=0x0f;
EA=1;// 开总中断
EX0=1;
TMOD=0x11;//T0工作在方式1
TH0=0;
TL0=0;
ET0=1; //开定时器T0
ET1=1;
TH1=15536/256;
TL1=15526%256;
while(1)
{ if(count2==1)
{
inti();
while(1)
{ //zifu(0xb8,0x50,14,0,&wel);
hanzi(0xbc,0x40,14,&xing);
zifu(0xbe,0x40,20,0,&xuehao);
break;
}
}
song();
delay1(10);
}
}

相关文档
最新文档