想用c语言写一个按键控制小灯闪烁的程序,就是按一下闪烁,再按就熄灭

想用记录按键次数来实现,即偶数次为闪烁,奇数次为熄灭。请问下面的程序错在哪里?怎么就是不行? void main()
{ while(1)
{ if(k==0) //按键按下
{ delay1ms(20);//延时
if(k==0&&n%2==0) //确定按键按下并且n为偶数(定义初始n为偶数)
{ ledflash(); //灯闪烁
n=n++;//n加1 }
else {
P0=0xff; //否则灯灭,n加1
n=n++;} }

具体是怎么个不行法。

 

像你这种按键程序

因为单片机速度非常快,在你按一下按键时,单片机已经循环了很多次程序。

因此这样就会导致,当你按下时,其实k一直==0  一直在执行动作。

 

所以这种按键需要判断按键是第一次按下(由弹起状态下按下)。而不是一直按着导致的动作。

 

方法:建一个变量保存上一次按键的值

char LastKey;

LastKey = 1;

while(1)
{
    if(k == 0 && LastKey == 1)    //按下,且上一次检测按键时是弹起状态
    {                             //这样才能保证每次按下时只执行一次,
                                    //而不是一直在执行
        Delay1ms(20);
        if(k == 0)                //确定是第一次按下,执行动作
        {
            if((n % 2) == 0)
            {
                LedFlash();
            }
            else
            {
                P0 = 0xFF;
            }
            n++;
        }
    }
    
    LastKey = k;                    //保存按键状态
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-27
帅哥 你没初始化 n吧?、而且貌似你没有定义N 啊。。。
你最好贴出来全部代码
相似回答