找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10293|回復(fù): 18
打印 上一主題 下一主題
收起左側(cè)

怎樣用單片機(jī)C語言編寫一個(gè)按鈕按一下LED一直亮,再按一下一直滅?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:103131 發(fā)表于 2021-4-22 17:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  由于本論壇禁止直接求程序,禁止伸手黨,所以向大家請(qǐng)教一下大致的實(shí)現(xiàn)方法與思路,理清頭緒后我自己來寫程序去實(shí)現(xiàn),謝謝大家

    用C語言編寫,用一個(gè)按鈕和LED燈,按一下一直亮,不滅,然后再按一下就一直滅?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:910466 發(fā)表于 2021-4-22 19:40 | 只看該作者
檢測(cè)與按鈕連接的端口是否處于低電平(或者高電平),如果檢測(cè)到端口低電平(高電平),就令與led相連的端口高(低)
回復(fù)

使用道具 舉報(bào)

板凳
ID:103131 發(fā)表于 2021-4-22 19:45 | 只看該作者
grant110 發(fā)表于 2021-4-22 19:40
檢測(cè)與按鈕連接的端口是否處于低電平(或者高電平),如果檢測(cè)到端口低電平(高電平),就令與led相連的端 ...

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

使用道具 舉報(bào)

地板
ID:103131 發(fā)表于 2021-4-22 19:46 | 只看該作者
grant110 發(fā)表于 2021-4-22 19:40
檢測(cè)與按鈕連接的端口是否處于低電平(或者高電平),如果檢測(cè)到端口低電平(高電平),就令與led相連的端 ...

我想要的是有沒有這樣的程序?
回復(fù)

使用道具 舉報(bào)

5#
ID:910466 發(fā)表于 2021-4-22 19:52 | 只看該作者
外面就是while(1==key)
回復(fù)

使用道具 舉報(bào)

6#
ID:103131 發(fā)表于 2021-4-22 20:27 | 只看該作者
grant110 發(fā)表于 2021-4-22 19:52
外面就是while(1==key)

那就可以一直低電平狀態(tài)?
回復(fù)

使用道具 舉報(bào)

7#
ID:910513 發(fā)表于 2021-4-22 20:31 | 只看該作者
goldbirderman 發(fā)表于 2021-4-22 20:27
那就可以一直低電平狀態(tài)?

是的。
while(1==key)
{
GPIO=1;
}
回復(fù)

使用道具 舉報(bào)

8#
ID:883167 發(fā)表于 2021-4-22 21:07 | 只看該作者
這個(gè)簡(jiǎn)單,就直接用檢測(cè)按鍵,然后用松鍵檢測(cè)(!key),IO口取反即可,例如 D1=~D1
回復(fù)

使用道具 舉報(bào)

9#
ID:756277 發(fā)表于 2021-4-22 21:14 | 只看該作者
while(1)
{
    if(0 == KEY)
     {
          delay(15);
          if(0 == KEY)
          {
                 LED =~LED;
          }
      }
}
回復(fù)

使用道具 舉報(bào)

10#
ID:103131 發(fā)表于 2021-4-22 21:21 | 只看該作者
林大俠 發(fā)表于 2021-4-22 21:07
這個(gè)簡(jiǎn)單,就直接用檢測(cè)按鍵,然后用松鍵檢測(cè)(!key),IO口取反即可,例如 D1=~D1

這個(gè)試過了,按鈕放手燈就滅掉
回復(fù)

使用道具 舉報(bào)

11#
ID:894154 發(fā)表于 2021-4-23 09:00 | 只看該作者
按鍵防抖后加松手檢測(cè) while(!key);
回復(fù)

使用道具 舉報(bào)

12#
ID:723547 發(fā)表于 2021-4-23 09:09 | 只看該作者
goldbirderman 發(fā)表于 2021-4-22 21:21
這個(gè)試過了,按鈕放手燈就滅掉

if(key==1)//檢測(cè)按下,
{
while(!key);//放開
   led=~led;
}
回復(fù)

使用道具 舉報(bào)

13#
ID:909627 發(fā)表于 2021-4-23 09:45 | 只看該作者
按下去之后給一個(gè)返回值
回復(fù)

使用道具 舉報(bào)

14#
ID:891208 發(fā)表于 2021-4-23 09:51 | 只看該作者
可以用中斷的方法實(shí)現(xiàn)。不用中斷的話,用死循環(huán)也行。不同的電路連接方法,編程不一樣
回復(fù)

使用道具 舉報(bào)

15#
ID:326430 發(fā)表于 2021-4-23 10:44 | 只看該作者
你用個(gè)標(biāo)志位不就行了,按一下改變一次標(biāo)志位的值,然后判斷該值控制亮滅。區(qū)分長(zhǎng)按,長(zhǎng)按不要改變標(biāo)志位。
回復(fù)

使用道具 舉報(bào)

16#
ID:495628 發(fā)表于 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
回復(fù)

使用道具 舉報(bào)

17#
ID:808700 發(fā)表于 2021-4-23 17:45 | 只看該作者
設(shè)置一個(gè)變量,按下一次改變一次變量,根據(jù)變量來控制燈的亮滅
回復(fù)

使用道具 舉報(bào)

18#
ID:796531 發(fā)表于 2021-4-23 22:44 | 只看該作者
lxbhcy 發(fā)表于 2021-4-23 17:45
設(shè)置一個(gè)變量,按下一次改變一次變量,根據(jù)變量來控制燈的亮滅

我也覺得是這樣,按一次 計(jì)數(shù)1 ,第二次計(jì)數(shù)2 ,計(jì)數(shù)大于2就死循環(huán)不就行了,最好結(jié)合中斷來實(shí)現(xiàn)按鍵的檢測(cè)

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

19#
ID:569384 發(fā)表于 2021-4-28 11:17 | 只看該作者
按鍵的程序先處理好啊,按一次就處理一次代碼,按鍵掃描也要消抖和做按下提起判斷。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表