void main()
{
unsigned char i=0,key=0,timer=0,flag1=0;
LED1 = 0;
LcdInit(); //液晶屏初始化
timInit(); //定时器初始化
// AT24C02_Init(); //EEPROM初始化
ledOFF(); //关闭LED灯
InitialSound(); //音乐播放器初始化
displayInit();
while(1)
{
key=key_Scan();
if(key==0x16&&flag==0) //节拍增加
{
total++;
if(total > 210) total = 40;
Pai[0] = Number[total/100];
Pai[1] = Number[total%100/10];
Pai[2] = Number[total%100%10];
lcd_pos(0x40);
for(i=0;i<11;i++)
{
LcdWriteData(ShowData22[i]);
}
for(i=0;i<5;i++)
{
LcdWriteData(Pai[i]);
}
LED1 = 1;
delay_ms(500);
LED1 = 0;
}
if(key==0x17&&flag==0) //节拍减少
{
total--;
if(total < 40) total = 210;
Pai[0] = Number[total/100];
Pai[1] = Number[total%100/10];
Pai[2] = Number[total%100%10];
lcd_pos(0x40);
for(i=0;i<11;i++)
{
LcdWriteData(ShowData22[i]);
}
for(i=0;i<5;i++)
{
LcdWriteData(Pai[i]);
}
LED1 = 1;
delay_ms(500);
LED1 = 0;
}
if(key>0&&key<22&&flag==0) //21键音符
{
num=key-1;
FreqTemp=Freqtab[key-1];
TR0=1;
}
else
{
if(TR0==1) //之前音符键按下,延时一秒停止
{
delay_ms(1000);
TR0=0;
}
}
}
}
void displayInit(void)
{
unsigned char i= 0;
for(i=0;i<16;i++)
{
LcdWriteData(ShowData[i]);
}
lcd_pos(0x40);
for(i=0;i<6;i++)
{
LcdWriteData(ShowData11[i]);
}
for(i=0;i<9;i++)
{
LcdWriteData(ShowData1[i]);
num=ShowData1[i]+6-'0';
TR0=1;
delay_ms(1000);
}
}
//计算数组长度,最大256,针对歌谱,还需增加两个结束符
unsigned char calcArrLen(unsigned char arr[])
{
unsigned char len=0;
while(arr[len]!='\0') //计算歌曲长度
{
len++;
}
return len+2;
}
资料下载地址