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

想用记录按键次数来实现,即偶数次为闪烁,奇数次为熄灭。请问下面的程序错在哪里?怎么就是不行?voidmain(){while(1){if(k==0)//按键按下{dela... 想用记录按键次数来实现,即偶数次为闪烁,奇数次为熄灭。请问下面的程序错在哪里?怎么就是不行? 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++;} }
展开
 我来答
chinazhsj
2013-11-27 · TA获得超过391个赞
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:142万
展开全部

具体是怎么个不行法。

 

像你这种按键程序

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

因此这样就会导致,当你按下时,其实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;                    //保存按键状态
}
宿兴电子
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡... 点击进入详情页
本回答由宿兴电子提供
yzzc1989
2013-11-27 · 超过62用户采纳过TA的回答
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:158万
展开全部
帅哥 你没初始化 n吧?、而且貌似你没有定义N 啊。。。
你最好贴出来全部代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式