按键开关灯 51单片机

我想实现按键开关的 就是按一下开灯,再按一下关灯,

#include"reg52.h"

unsigned int i;
unsigned char a;

sbit led=P2^0;
sbit k1=P3^1;
    void dalay(unsigned int i)
    {
        while(i--);
    }
    
    void main()
    {
        while(1)
        {
            if(k1==0)
            {
                dalay(2000);
                while(k1==0)
                {dalay(5000);
                
                led=~led;
                }
            }
        }
    }
    

现实是按键的时候灯在闪  很不好用   有时候反应还不一样  开发板买的是普中的

求好人

img


我的思路是按键灯就亮,再按一次灯就灭,即使长按键也是如此,即长按键第一次灯亮,长按键第二次灯灭,循环

新手一个多谅解 多指教 感谢感谢

https://blog.csdn.net/weixin_63568691/article/details/128751280
以上是我的回答,如果有其他疑问,我们可以继续探讨,望采纳该回答

第二个while那边处理有问题

(1)灯闪:首先要看你 k1 是如何读入的,硬件是如何处理的。一般来说按键开关输入要进行处理防抖,硬件实现或软件实现都可以。
(2)有时候反应不一样:有时候 是什么时候?反应指什么?不一样 是哪里不一样?提问不描述清楚,不是让人猜谜吗?