標(biāo)題: 怎樣用單片機(jī)C語(yǔ)言編寫一個(gè)按鈕按一下LED一直亮,再按一下一直滅? [打印本頁(yè)]

作者: goldbirderman    時(shí)間: 2021-4-22 17:18
標(biāo)題: 怎樣用單片機(jī)C語(yǔ)言編寫一個(gè)按鈕按一下LED一直亮,再按一下一直滅?
  由于本論壇禁止直接求程序,禁止伸手黨,所以向大家請(qǐng)教一下大致的實(shí)現(xiàn)方法與思路,理清頭緒后我自己來(lái)寫程序去實(shí)現(xiàn),謝謝大家

    用C語(yǔ)言編寫,用一個(gè)按鈕和LED燈,按一下一直亮,不滅,然后再按一下就一直滅?

作者: grant110    時(shí)間: 2021-4-22 19:40
檢測(cè)與按鈕連接的端口是否處于低電平(或者高電平),如果檢測(cè)到端口低電平(高電平),就令與led相連的端口高(低)
作者: goldbirderman    時(shí)間: 2021-4-22 19:45
grant110 發(fā)表于 2021-4-22 19:40
檢測(cè)與按鈕連接的端口是否處于低電平(或者高電平),如果檢測(cè)到端口低電平(高電平),就令與led相連的端 ...

我可以在低電平LED1 = 0 上面給個(gè)while()嗎?

作者: goldbirderman    時(shí)間: 2021-4-22 19:46
grant110 發(fā)表于 2021-4-22 19:40
檢測(cè)與按鈕連接的端口是否處于低電平(或者高電平),如果檢測(cè)到端口低電平(高電平),就令與led相連的端 ...

我想要的是有沒(méi)有這樣的程序?
作者: grant110    時(shí)間: 2021-4-22 19:52
外面就是while(1==key)

作者: goldbirderman    時(shí)間: 2021-4-22 20:27
grant110 發(fā)表于 2021-4-22 19:52
外面就是while(1==key)

那就可以一直低電平狀態(tài)?
作者: Armstong    時(shí)間: 2021-4-22 20:31
goldbirderman 發(fā)表于 2021-4-22 20:27
那就可以一直低電平狀態(tài)?

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

作者: 林大俠    時(shí)間: 2021-4-22 21:07
這個(gè)簡(jiǎn)單,就直接用檢測(cè)按鍵,然后用松鍵檢測(cè)(!key),IO口取反即可,例如 D1=~D1
作者: dw1826522830    時(shí)間: 2021-4-22 21:14
while(1)
{
    if(0 == KEY)
     {
          delay(15);
          if(0 == KEY)
          {
                 LED =~LED;
          }
      }
}
作者: goldbirderman    時(shí)間: 2021-4-22 21:21
林大俠 發(fā)表于 2021-4-22 21:07
這個(gè)簡(jiǎn)單,就直接用檢測(cè)按鍵,然后用松鍵檢測(cè)(!key),IO口取反即可,例如 D1=~D1

這個(gè)試過(guò)了,按鈕放手燈就滅掉
作者: ANT1987    時(shí)間: 2021-4-23 09:00
按鍵防抖后加松手檢測(cè) while(!key);
作者: 藍(lán)色彈珠    時(shí)間: 2021-4-23 09:09
goldbirderman 發(fā)表于 2021-4-22 21:21
這個(gè)試過(guò)了,按鈕放手燈就滅掉

if(key==1)//檢測(cè)按下,
{
while(!key);//放開
   led=~led;
}
作者: wangjianye    時(shí)間: 2021-4-23 09:45
按下去之后給一個(gè)返回值
作者: 小韓嵌入式    時(shí)間: 2021-4-23 09:51
可以用中斷的方法實(shí)現(xiàn)。不用中斷的話,用死循環(huán)也行。不同的電路連接方法,編程不一樣
作者: 727742898    時(shí)間: 2021-4-23 10:44
你用個(gè)標(biāo)志位不就行了,按一下改變一次標(biāo)志位的值,然后判斷該值控制亮滅。區(qū)分長(zhǎng)按,長(zhǎng)按不要改變標(biāo)志位。
作者: Wongrui    時(shí)間: 2021-4-23 17:06
一、如果按鈕使用的是帶自鎖的(可以理解成單刀雙擲開關(guān))
那么就可以檢測(cè)按鍵狀態(tài),Key==1.則點(diǎn)亮,若Key==0,則熄滅;

二、如果按鈕使用的是輕觸開關(guān)BUTTON,
方法一:反轉(zhuǎn)法
led=0;   //先給led一個(gè)初始值
if(key==1)//按鍵按下,
{
while(!key);//按鍵釋放放開
   led=~led;
}


方法二:中斷法
led=0;   //先給led一個(gè)初始值
interrupt key==1;
led=~le
作者: lxbhcy    時(shí)間: 2021-4-23 17:45
設(shè)置一個(gè)變量,按下一次改變一次變量,根據(jù)變量來(lái)控制燈的亮滅
作者: paladina    時(shí)間: 2021-4-23 22:44
lxbhcy 發(fā)表于 2021-4-23 17:45
設(shè)置一個(gè)變量,按下一次改變一次變量,根據(jù)變量來(lái)控制燈的亮滅

我也覺(jué)得是這樣,按一次 計(jì)數(shù)1 ,第二次計(jì)數(shù)2 ,計(jì)數(shù)大于2就死循環(huán)不就行了,最好結(jié)合中斷來(lái)實(shí)現(xiàn)按鍵的檢測(cè)
作者: haokey    時(shí)間: 2021-4-28 11:17
按鍵的程序先處理好啊,按一次就處理一次代碼,按鍵掃描也要消抖和做按下提起判斷。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1