标题: 怎样用单片机C语言编写一个按钮按一下LED一直亮,再按一下一直灭? [打印本页]

作者: goldbirderman    时间: 2021-4-22 17:18
标题: 怎样用单片机C语言编写一个按钮按一下LED一直亮,再按一下一直灭?
  由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家

    用C语言编写,用一个按钮和LED灯,按一下一直亮,不灭,然后再按一下就一直灭?

作者: grant110    时间: 2021-4-22 19:40
检测与按钮连接的端口是否处于低电平(或者高电平),如果检测到端口低电平(高电平),就令与led相连的端口高(低)
作者: goldbirderman    时间: 2021-4-22 19:45
grant110 发表于 2021-4-22 19:40
检测与按钮连接的端口是否处于低电平(或者高电平),如果检测到端口低电平(高电平),就令与led相连的端 ...

我可以在低电平LED1 = 0 上面给个while()吗?

作者: goldbirderman    时间: 2021-4-22 19:46
grant110 发表于 2021-4-22 19:40
检测与按钮连接的端口是否处于低电平(或者高电平),如果检测到端口低电平(高电平),就令与led相连的端 ...

我想要的是有没有这样的程序?
作者: grant110    时间: 2021-4-22 19:52
外面就是while(1==key)

作者: goldbirderman    时间: 2021-4-22 20:27
grant110 发表于 2021-4-22 19:52
外面就是while(1==key)

那就可以一直低电平状态?
作者: Armstong    时间: 2021-4-22 20:31
goldbirderman 发表于 2021-4-22 20:27
那就可以一直低电平状态?

是的。
while(1==key)
{
GPIO=1;
}

作者: 林大侠    时间: 2021-4-22 21:07
这个简单,就直接用检测按键,然后用松键检测(!key),IO口取反即可,例如 D1=~D1
作者: dw1826522830    时间: 2021-4-22 21:14
while(1)
{
    if(0 == KEY)
     {
          delay(15);
          if(0 == KEY)
          {
                 LED =~LED;
          }
      }
}
作者: goldbirderman    时间: 2021-4-22 21:21
林大侠 发表于 2021-4-22 21:07
这个简单,就直接用检测按键,然后用松键检测(!key),IO口取反即可,例如 D1=~D1

这个试过了,按钮放手灯就灭掉
作者: ANT1987    时间: 2021-4-23 09:00
按键防抖后加松手检测 while(!key);
作者: 蓝色弹珠    时间: 2021-4-23 09:09
goldbirderman 发表于 2021-4-22 21:21
这个试过了,按钮放手灯就灭掉

if(key==1)//检测按下,
{
while(!key);//放开
   led=~led;
}
作者: wangjianye    时间: 2021-4-23 09:45
按下去之后给一个返回值
作者: 小韩嵌入式    时间: 2021-4-23 09:51
可以用中断的方法实现。不用中断的话,用死循环也行。不同的电路连接方法,编程不一样
作者: 727742898    时间: 2021-4-23 10:44
你用个标志位不就行了,按一下改变一次标志位的值,然后判断该值控制亮灭。区分长按,长按不要改变标志位。
作者: Wongrui    时间: 2021-4-23 17:06
一、如果按钮使用的是带自锁的(可以理解成单刀双掷开关)
那么就可以检测按键状态,Key==1.则点亮,若Key==0,则熄灭;

二、如果按钮使用的是轻触开关BUTTON,
方法一:反转法
led=0;   //先给led一个初始值
if(key==1)//按键按下,
{
while(!key);//按键释放放开
   led=~led;
}


方法二:中断法
led=0;   //先给led一个初始值
interrupt key==1;
led=~le
作者: lxbhcy    时间: 2021-4-23 17:45
设置一个变量,按下一次改变一次变量,根据变量来控制灯的亮灭
作者: paladina    时间: 2021-4-23 22:44
lxbhcy 发表于 2021-4-23 17:45
设置一个变量,按下一次改变一次变量,根据变量来控制灯的亮灭

我也觉得是这样,按一次 计数1 ,第二次计数2 ,计数大于2就死循环不就行了,最好结合中断来实现按键的检测
作者: haokey    时间: 2021-4-28 11:17
按键的程序先处理好啊,按一次就处理一次代码,按键扫描也要消抖和做按下提起判断。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1