#pragma vector=PORT2_VECTOR
__interrupt void Port2(void)
{
_DINT(); //关中断
delay_ms(10); //延迟5ms,消抖 延迟5ms 10ms都行
if((P2IN&BIT2)==0) //如果为低,即按键真的按下了 因为是下降沿触发中断,所以要检测是否为低 (P2IN&BIT2)==0
{
//正弦波
key=222;
tt=1;
LCD_init();
lcd_pos(1,0);
for(i=4;i<10;i++)
{
write_dat(aa[i]);
}
lcd_pos(3,0);
for(k=0;k<6;k++)
{
write_dat(name[keynum][k]);
}
}
if((P2IN&BIT1)==0)
{
delay_ms(1000);
if((P2IN&BIT1)==0)
{
// 锯齿波
key=221;
tt=1;
LCD_init();
lcd_pos(1,0);
for(i=4;i<10;i++)
{
write_dat(bb[i]);
}
lcd_pos(3,0);
for(k=0;k<6;k++)
{
write_dat(name[keynum][k]);
}
}
else
{
if(tt==1)
{
if(keynum<12)
keynum++;
else
keynum=0;
Tccr0=numt1[keynum]+numt2[keynum]+numt3[keynum]+numt4[keynum];
lcd_pos(3,0);
for(k=0;k<6;k++)
{
write_dat(name[keynum][k]);
}
}
}
}
if((P2IN&BIT0)==0)
{
delay_ms(1000);
if((P2IN&BIT0)==0)
{
//三角波
key=220;
tt=1;
LCD_init();
lcd_pos(1,0);
for(i=4;i<10;i++)
{
write_dat(cc[i]);
}
lcd_pos(3,0);
for(k=0;k<6;k++)
{
write_dat(name[keynum][k]);
}
}
else
{
if(tt==1)
{
if(keynum>0)
keynum--;
else
keynum=12;
Tccr0=numt1[keynum]+numt2[keynum]+numt3[keynum]+numt4[keynum];
lcd_pos(3,0);
for(k=0;k<6;k++)
{
write_dat(name[keynum][k]);
}
}
}
}
P2IFG &=~(BIT0+BIT1+BIT2); // P2.2 IFG cleared 软件清除中断标志位
_EINT(); //开中断
} |