单片机 当开关按下时 语音模块不能只播报一次

c语言学的不好,来请教一下大家
这是一个灯条的程序,p07为灯条的负极,正极接了5V。在灯条中间我加了一个开关。我的想法是当开关按下时,灯亮。且语音播报:灯已打开。
不知道如何让语音模块只播报一次。

void main()
 {    int key=0;
    p07=0;
    while(1)
       {p23=1;//p23为语音触发端,为0时触发播放语音
         if(p07!=0)
            {key=1;}
         if(key==1)
             {p23=0;delay_ms(1000);key=0;}
      }
 }

现在这个程序会一直播报语音 好像是因为即使第二个if最后写了key=0,但是不能阻止第一个if 又让key=1(因为开关按下p07灯亮)
请问一下大家应该怎么改?

硬件设计有问题,这样的硬件设计没法完成你需要的功能。
需要更改硬件设计

p07一直是等于0