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

QQ登錄

只需一步,快速開始

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

怎樣讓單片機(jī)程序按鍵后執(zhí)行一次就停止呢

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:603592 發(fā)表于 2019-8-30 21:22 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
就比如兩個(gè)按鍵控制一個(gè)LED 按下按鍵1: LED亮1秒后滅 (只亮一次不循環(huán) )
按下按鍵1: LED亮2秒后滅 (只亮一次不循環(huán) )
像按下去閃爍直接取反就好了 那亮一次改怎么弄  思路框架應(yīng)該是什么樣的

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:370639 發(fā)表于 2019-8-31 08:26 | 只看該作者
檢測(cè)按鍵;亮;延時(shí)1秒;滅,就這么簡(jiǎn)單
回復(fù)

使用道具 舉報(bào)

板凳
ID:56665 發(fā)表于 2019-8-31 09:01 | 只看該作者
陌上輕雨寒 發(fā)表于 2019-8-31 08:26
檢測(cè)按鍵;亮;延時(shí)1秒;滅,就這么簡(jiǎn)單

你這個(gè)放while循環(huán)里面會(huì)一直閃爍的,雖然你想它只執(zhí)行一次,樓主肯定也試過。
回復(fù)

使用道具 舉報(bào)

地板
ID:605695 發(fā)表于 2019-8-31 09:07 | 只看該作者
等待按鍵,按鍵按下任務(wù)執(zhí)行,執(zhí)行完進(jìn)入死循環(huán),只有等單片機(jī)重啟才能再按按鍵。如果想按一次以后都不能用,那就在后備寄存器或者可存儲(chǔ)芯片里存標(biāo)識(shí),上電讀取標(biāo)識(shí)位是否按下過。
回復(fù)

使用道具 舉報(bào)

5#
ID:604919 發(fā)表于 2019-8-31 09:33 | 只看該作者
你對(duì)單片機(jī)還沒有理解清楚!單片機(jī)你可以理解它只執(zhí)行一次。如果沒有循環(huán),它就只運(yùn)行一次。
回復(fù)

使用道具 舉報(bào)

6#
ID:604919 發(fā)表于 2019-8-31 09:34 | 只看該作者
比如:LED=1,如只有這么一條語句,你打開單片機(jī),它就會(huì)只會(huì)執(zhí)行一次。
回復(fù)

使用道具 舉報(bào)

7#
ID:604919 發(fā)表于 2019-8-31 09:35 | 只看該作者
你想要執(zhí)行很多次,就得加循環(huán)。while(1)。
回復(fù)

使用道具 舉報(bào)

8#
ID:604919 發(fā)表于 2019-8-31 09:37 | 只看該作者
如果你用兩個(gè)按鍵來控制一個(gè)LED燈,不需要加循環(huán),就只執(zhí)行一次。
回復(fù)

使用道具 舉報(bào)

9#
ID:604919 發(fā)表于 2019-8-31 09:38 | 只看該作者
1,先用一個(gè)循環(huán)監(jiān)聽是按下按鍵1還是按鍵2,記得加按鍵延遲。
回復(fù)

使用道具 舉報(bào)

10#
ID:604919 發(fā)表于 2019-8-31 09:38 | 只看該作者
在按鍵里分別對(duì)應(yīng)LED亮的時(shí)間長(zhǎng)度。
回復(fù)

使用道具 舉報(bào)

11#
ID:604919 發(fā)表于 2019-8-31 09:40 | 只看該作者
比如按按鍵1,亮1秒后停止。LED=1 ;延遲1秒,LED=0;這就完成了按鍵1的功能。
回復(fù)

使用道具 舉報(bào)

12#
ID:604919 發(fā)表于 2019-8-31 09:41 | 只看該作者
再按鍵2也是一樣。LED=1,延遲2秒,LED=0;完成了按鍵2的操作。
回復(fù)

使用道具 舉報(bào)

13#
ID:604919 發(fā)表于 2019-8-31 09:42 | 只看該作者
說得那么詳細(xì)應(yīng)該明白了吧?LED=1燈亮,LED=0燈滅。
回復(fù)

使用道具 舉報(bào)

14#
ID:604919 發(fā)表于 2019-8-31 09:44 | 只看該作者
如果你想弄復(fù)雜一點(diǎn),比如我想連續(xù)按1二次,就會(huì)自動(dòng)執(zhí)行2,你可以加個(gè)計(jì)數(shù)參數(shù)。
回復(fù)

使用道具 舉報(bào)

15#
ID:604919 發(fā)表于 2019-8-31 09:53 | 只看該作者
你要理解兩個(gè)點(diǎn):
1,單片機(jī)程序原本就只會(huì)執(zhí)行一次。是我們?yōu)榱俗寙纹瑱C(jī)一直執(zhí)行下去,才加了循環(huán)。也就是說,不加循環(huán),就只執(zhí)行一次。
2,燈亮和滅無非就是0和1.單片機(jī)的腳出來的無非就是0和1,燈亮就是LED=1,燈滅就是LED=0;取反是算法更簡(jiǎn)單而已。
兩個(gè)按鍵控制一個(gè)LED,按鍵判斷需要循環(huán)進(jìn)行,
先判斷是哪個(gè)按鍵按下了,再?zèng)Q定LED亮燈的時(shí)間長(zhǎng)度。判斷按鍵的時(shí)候記得加上延遲去抖動(dòng)。
比如:按鍵1按下,延遲0.005秒,再判斷是否是按鍵1按下,如果是,執(zhí)行   LED=1,延遲1秒,LED=0;
按鍵2按下,延遲0.005秒,再判斷是否是按鍵2按下,如果是,執(zhí)行   LED=1,延遲2秒,LED=0;
這么詳細(xì),應(yīng)該明白了吧?


回復(fù)

使用道具 舉報(bào)

16#
ID:149144 發(fā)表于 2019-8-31 10:01 | 只看該作者
可以說詳細(xì)點(diǎn)嗎
兩個(gè)按鍵控制…… 按下按鍵 1  …… 按下按鍵 1  ……
只按按鍵 1  為什么還要兩個(gè)按鍵,一個(gè)按鍵就可以了。
按下按鍵要松手嗎,按著的時(shí)候燈亮滅,還是松開的時(shí)候再執(zhí)行 ?
回復(fù)

使用道具 舉報(bào)

17#
ID:516309 發(fā)表于 2019-9-2 08:23 來自手機(jī) | 只看該作者
引用標(biāo)志位不知是否可以
回復(fù)

使用道具 舉報(bào)

18#
ID:606526 發(fā)表于 2019-9-3 12:09 | 只看該作者
不加循環(huán)
回復(fù)

使用道具 舉報(bào)

19#
ID:505787 發(fā)表于 2019-9-4 17:55 | 只看該作者
led點(diǎn)亮,掃描案件,按鍵按下檢查是哪個(gè)按鍵,去抖。進(jìn)入一個(gè)在shile里面搞倆個(gè)while(1)里面設(shè)置好定時(shí)關(guān)閉就行了。燈不亮即便再關(guān)也沒有問題
回復(fù)

使用道具 舉報(bào)

20#
ID:601639 發(fā)表于 2019-9-5 11:03 | 只看該作者
設(shè)置個(gè)標(biāo)志位不就行了,按一次,標(biāo)志位+1,檢測(cè)不到標(biāo)志位,燈就不會(huì)再亮了。想什么時(shí)候亮,再把標(biāo)志位置位回來。
回復(fù)

使用道具 舉報(bào)

21#
ID:547839 發(fā)表于 2019-9-5 20:32 | 只看該作者
用標(biāo)志位,按鍵讀取高低電平,然后判斷條件;蛘哂弥袛,外部中斷
回復(fù)

使用道具 舉報(bào)

22#
ID:484951 發(fā)表于 2019-9-5 21:57 | 只看該作者
用中斷,在中斷服務(wù)函數(shù)里面啟動(dòng)LED延時(shí)之后關(guān)閉
回復(fù)

使用道具 舉報(bào)

23#
ID:608245 發(fā)表于 2019-9-6 06:11 | 只看該作者
1)main函數(shù)里不寫控制邏輯,只寫初始化代碼?刂芁ED的邏輯寫在外部中斷里。
回復(fù)

使用道具 舉報(bào)

24#
ID:608245 發(fā)表于 2019-9-6 06:13 | 只看該作者
2)不開中斷,在main函數(shù)里不斷檢測(cè)兩個(gè)按鍵狀態(tài)。同時(shí)用兩個(gè)全局變量記錄燈是不是已經(jīng)亮過了。如果沒亮過那么檢測(cè)到按鍵按下就點(diǎn)亮。如果已經(jīng)亮過了那即使檢測(cè)到按鍵按下也不點(diǎn)亮。
回復(fù)

使用道具 舉報(bào)

25#
ID:426861 發(fā)表于 2019-9-6 10:42 | 只看該作者
條件判斷啊,C語言的基礎(chǔ)知識(shí)
回復(fù)

使用道具 舉報(bào)

26#
ID:584556 發(fā)表于 2019-9-6 15:25 | 只看該作者
這種問題入門后都比較簡(jiǎn)單了,第一步先檢查按鍵是否按下,如果按下則執(zhí)行你的操作(如點(diǎn)燈),判斷按鍵是否松開,如果按鍵松開則不進(jìn)行操作(如熄滅燈)
回復(fù)

使用道具 舉報(bào)

27#
ID:1005338 發(fā)表于 2022-5-24 10:45 | 只看該作者
void main()
{       
                LED1=0;        //點(diǎn)亮
                delay_ms(5000); //大約延時(shí)450ms
                LED1=1;        //熄滅
                delay_ms(5000);        
}
像以上程序,雖然沒有循環(huán),但實(shí)際運(yùn)行起來后一直不停地亮、滅、亮、滅,這是為什么?
回復(fù)

使用道具 舉報(bào)

28#
ID:1029096 發(fā)表于 2022-5-24 10:48 | 只看該作者
用個(gè)if語句
回復(fù)

使用道具 舉報(bào)

29#
ID:1004455 發(fā)表于 2022-5-24 11:11 | 只看該作者
不要寫在while里面就不會(huì)一直循環(huán),寫個(gè)按鍵,當(dāng)按鍵按下led燈亮一下就好了
回復(fù)

使用道具 舉報(bào)

30#
ID:1005338 發(fā)表于 2022-5-24 11:27 | 只看該作者
LXJG 發(fā)表于 2022-5-24 11:11
不要寫在while里面就不會(huì)一直循環(huán),寫個(gè)按鍵,當(dāng)按鍵按下led燈亮一下就好了

如果寫個(gè)按鍵是可以解決,那是因?yàn)榘存I沒有被再次按下,就不會(huì)再亮燈。
但上面這個(gè)簡(jiǎn)單的程序中,明顯是沒有while循環(huán)的,為什么程序會(huì)重復(fù)執(zhí)行呢?
我一直也有這個(gè)困惑,main主程序是不是一直會(huì)自動(dòng)重復(fù)循環(huán)?結(jié)束了再?gòu)念^再來?51單片機(jī)是不是默認(rèn)的就是這樣?
回復(fù)

使用道具 舉報(bào)

31#
ID:1005338 發(fā)表于 2022-5-24 12:05 | 只看該作者
51好黑電子論壇 發(fā)表于 2019-8-31 09:33
你對(duì)單片機(jī)還沒有理解清楚!單片機(jī)你可以理解它只執(zhí)行一次。如果沒有循環(huán),它就只運(yùn)行一次。

我試過多次了,雖然沒有while,它也會(huì)重復(fù)執(zhí)行main
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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