各部分软件分析
延时子函数
//延时子函数
void delay(uint z)
{
uint x,y;
for(x=z; x>0; x--)
for(y=340; y>0; y--);
}
初始化子函数
//初始化子函数
void init()
{
beep=0;
D1=1;
D2=0;
EA=1;//开总中断
TCON=0x01;//外部中断0设置为边沿触发
EX0=1;//开外部中断0
ET0=1;
ET1=1;
TMOD=0x11;//定时器0,1工作在定时状态,均为方式1
}
数码管显示子函数
//数码管显示子函数
void display1()
{
in(table1[aa]); //再传段码
out();
W1=0;;
delay(1); //延迟时间2ms以内
W1=1;
in(table1[cc+1]); //再传段码
out();
W2=0;
delay(1); //延迟时间2ms以内
W2=1;
}
高低音选择子函数
//高低音选择子函数
void yinjie()
{
if(k10==0)
{
delay(5);
if(k10==0)
{
aa=10;
bb=0;//返回10为seg[10]显示C
}
}
if(k9==0)
{
delay(5);
if(k9==0)
{
aa=11;
bb=1;//返回11为seg[11]显示L
}
}
if(k11==0)
{
delay(5);
if(k11==0)
{
aa=12;
bb=2;//返回12为seg[12]显示H
}
}
if(aa==0)
{
aa=13;
}
}
播放音乐子函数
//播放音乐子函数
void display_music()
{
TH0=table2[table4[i]-1];
TL0=table3[table4[i]-1];
while(flag==0)
{
if(i<32)
{
TR0=1;
delay(57*table5[i]);
i++;
}
if(i==32)
{
i=0;
}
}
}
演奏模式子函数
//演奏模式子函数
void display_play()
{
TR0=0;
TR1=0;
yinjie();
WE2=1;//关数码管2
WE1=0;//开数码管1
P0=table1[aa];
if(aa!=13&&flag==1)
{
if(k1==0)
{
TH1=table2[7*bb+cc];
TL1=table3[7*bb+cc];
TR1=1;
while(k1==0)
{
cc=0;
display1();
}
}
if(k2==0)
{
TH1=table2[7*bb+cc];
TL1=table3[7*bb+cc];
TR1=1;
while(k2==0)
{
cc=1;
display1();
}
}
if(k3==0)
{
TH1=table2[7*bb+cc];
TL1=table3[7*bb+cc];
TR1=1;
while(k3==0)
{
cc=2;
display1();
}
}
if(k4==0)
{
TH1=table2[7*bb+cc];
TL1=table3[7*bb+cc];
TR1=1;
while(k4==0)
{
cc=3;
display1();
}
}
if(k5==0)
{
TH1=table2[7*bb+cc];
TL1=table3[7*bb+cc];
TR1=1;
while(k5==0)
{
cc=4;
display1();
}
}
if(k6==0)
{
TH1=table2[7*bb+cc];
TL1=table3[7*bb+cc];
TR1=1;
while(k6==0)
{
cc=5;
display1();
}
}
if(k7==0)
{
TH1=table2[7*bb+cc];
TL1=table3[7*bb+cc];
TR1=1;
while(k7==0)
{
cc=6;
display1();
}
}
}
}
外部0中断子函数
//外部0中断子函数
void wb0() interrupt 0
{
if(k8==0)
{
delay(5);
while(k8==0);
flag=~flag;
D1=~D1;
D2=~D2;
}
}
定时器0中断子函数
//定时器0中断子函数
void t0() interrupt 1
{
TR0=0;
TH0=table2[table4[i]-1];
TL0=table3[table4[i]-1];
beep=~beep;
TR0=1;
}
3.2.9 定时器1中断子函数
//定时器1中断子函数
void t1() interrupt 3
{
TR1=0;
TH1=table2[7*bb+cc];
TL1=table3[7*bb+cc];
beep=~beep;
TR1=1;
}
3.2.10 主函数
//主函数
void main()
{
init();
while(1)
{
if(flag==0)
display_music();
else
display_play();
}
}
|