久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 怎樣讓單片機程序按鍵后執行一次就停止呢 [打印本頁]

作者: 我在東北玩51    時間: 2019-8-30 21:22
標題: 怎樣讓單片機程序按鍵后執行一次就停止呢
就比如兩個按鍵控制一個LED 按下按鍵1: LED亮1秒后滅 (只亮一次不循環 )
按下按鍵1: LED亮2秒后滅 (只亮一次不循環 )
像按下去閃爍直接取反就好了 那亮一次改怎么弄  思路框架應該是什么樣的


作者: 陌上輕雨寒    時間: 2019-8-31 08:26
檢測按鍵;亮;延時1秒;滅,就這么簡單
作者: m182892    時間: 2019-8-31 09:01
陌上輕雨寒 發表于 2019-8-31 08:26
檢測按鍵;亮;延時1秒;滅,就這么簡單

你這個放while循環里面會一直閃爍的,雖然你想它只執行一次,樓主肯定也試過。
作者: qazwsx22    時間: 2019-8-31 09:07
等待按鍵,按鍵按下任務執行,執行完進入死循環,只有等單片機重啟才能再按按鍵。如果想按一次以后都不能用,那就在后備寄存器或者可存儲芯片里存標識,上電讀取標識位是否按下過。
作者: 51好黑電子論壇    時間: 2019-8-31 09:33
你對單片機還沒有理解清楚!單片機你可以理解它只執行一次。如果沒有循環,它就只運行一次。
作者: 51好黑電子論壇    時間: 2019-8-31 09:34
比如:LED=1,如只有這么一條語句,你打開單片機,它就會只會執行一次。
作者: 51好黑電子論壇    時間: 2019-8-31 09:35
你想要執行很多次,就得加循環。while(1)。
作者: 51好黑電子論壇    時間: 2019-8-31 09:37
如果你用兩個按鍵來控制一個LED燈,不需要加循環,就只執行一次。
作者: 51好黑電子論壇    時間: 2019-8-31 09:38
1,先用一個循環監聽是按下按鍵1還是按鍵2,記得加按鍵延遲。
作者: 51好黑電子論壇    時間: 2019-8-31 09:38
在按鍵里分別對應LED亮的時間長度。
作者: 51好黑電子論壇    時間: 2019-8-31 09:40
比如按按鍵1,亮1秒后停止。LED=1 ;延遲1秒,LED=0;這就完成了按鍵1的功能。
作者: 51好黑電子論壇    時間: 2019-8-31 09:41
再按鍵2也是一樣。LED=1,延遲2秒,LED=0;完成了按鍵2的操作。
作者: 51好黑電子論壇    時間: 2019-8-31 09:42
說得那么詳細應該明白了吧?LED=1燈亮,LED=0燈滅。
作者: 51好黑電子論壇    時間: 2019-8-31 09:44
如果你想弄復雜一點,比如我想連續按1二次,就會自動執行2,你可以加個計數參數。
作者: 51好黑電子論壇    時間: 2019-8-31 09:53
你要理解兩個點:
1,單片機程序原本就只會執行一次。是我們為了讓單片機一直執行下去,才加了循環。也就是說,不加循環,就只執行一次。
2,燈亮和滅無非就是0和1.單片機的腳出來的無非就是0和1,燈亮就是LED=1,燈滅就是LED=0;取反是算法更簡單而已。
兩個按鍵控制一個LED,按鍵判斷需要循環進行,
先判斷是哪個按鍵按下了,再決定LED亮燈的時間長度。判斷按鍵的時候記得加上延遲去抖動。
比如:按鍵1按下,延遲0.005秒,再判斷是否是按鍵1按下,如果是,執行   LED=1,延遲1秒,LED=0;
按鍵2按下,延遲0.005秒,再判斷是否是按鍵2按下,如果是,執行   LED=1,延遲2秒,LED=0;
這么詳細,應該明白了吧?



作者: cuihaodianzi    時間: 2019-8-31 10:01
可以說詳細點嗎
兩個按鍵控制…… 按下按鍵 1  …… 按下按鍵 1  ……
只按按鍵 1  為什么還要兩個按鍵,一個按鍵就可以了。
按下按鍵要松手嗎,按著的時候燈亮滅,還是松開的時候再執行 ?
作者: 王杰666    時間: 2019-9-2 08:23
引用標志位不知是否可以
作者: a731370129    時間: 2019-9-3 12:09
不加循環
作者: zhangyucheng02    時間: 2019-9-4 17:55
led點亮,掃描案件,按鍵按下檢查是哪個按鍵,去抖。進入一個在shile里面搞倆個while(1)里面設置好定時關閉就行了。燈不亮即便再關也沒有問題
作者: 那個誰和誰    時間: 2019-9-5 11:03
設置個標志位不就行了,按一次,標志位+1,檢測不到標志位,燈就不會再亮了。想什么時候亮,再把標志位置位回來。
作者: glory_gm    時間: 2019-9-5 20:32
用標志位,按鍵讀取高低電平,然后判斷條件。或者用中斷,外部中斷
作者: 納愛斯牙牙樂    時間: 2019-9-5 21:57
用中斷,在中斷服務函數里面啟動LED延時之后關閉
作者: GSdreamer    時間: 2019-9-6 06:11
1)main函數里不寫控制邏輯,只寫初始化代碼。控制LED的邏輯寫在外部中斷里。
作者: GSdreamer    時間: 2019-9-6 06:13
2)不開中斷,在main函數里不斷檢測兩個按鍵狀態。同時用兩個全局變量記錄燈是不是已經亮過了。如果沒亮過那么檢測到按鍵按下就點亮。如果已經亮過了那即使檢測到按鍵按下也不點亮。
作者: 天風情    時間: 2019-9-6 10:42
條件判斷啊,C語言的基礎知識
作者: 一泓秋    時間: 2019-9-6 15:25
這種問題入門后都比較簡單了,第一步先檢查按鍵是否按下,如果按下則執行你的操作(如點燈),判斷按鍵是否松開,如果按鍵松開則不進行操作(如熄滅燈)
作者: niejiangong    時間: 2022-5-24 10:45
void main()
{       
                LED1=0;        //點亮
                delay_ms(5000); //大約延時450ms
                LED1=1;        //熄滅
                delay_ms(5000);        
}
像以上程序,雖然沒有循環,但實際運行起來后一直不停地亮、滅、亮、滅,這是為什么?
作者: xuxiaojian    時間: 2022-5-24 10:48
用個if語句
作者: LXJG    時間: 2022-5-24 11:11
不要寫在while里面就不會一直循環,寫個按鍵,當按鍵按下led燈亮一下就好了

作者: niejiangong    時間: 2022-5-24 11:27
LXJG 發表于 2022-5-24 11:11
不要寫在while里面就不會一直循環,寫個按鍵,當按鍵按下led燈亮一下就好了

如果寫個按鍵是可以解決,那是因為按鍵沒有被再次按下,就不會再亮燈。
但上面這個簡單的程序中,明顯是沒有while循環的,為什么程序會重復執行呢?
我一直也有這個困惑,main主程序是不是一直會自動重復循環?結束了再從頭再來?51單片機是不是默認的就是這樣?
作者: niejiangong    時間: 2022-5-24 12:05
51好黑電子論壇 發表于 2019-8-31 09:33
你對單片機還沒有理解清楚!單片機你可以理解它只執行一次。如果沒有循環,它就只運行一次。

我試過多次了,雖然沒有while,它也會重復執行main




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 99成人| 精品久久久一区 | 可以免费观看的av | 99久久中文字幕三级久久日本 | 一级黄色毛片免费 | 国产一区视频在线 | 欧日韩在线| 日韩国产欧美一区 | 亚洲风情在线观看 | 久草新在线 | 欧美日韩久久精品 | 国产精品美女一区二区三区 | 久久精品国产免费 | 国产在线观看一区二区三区 | 最新超碰 | 99热精品在线观看 | 国产免费福利小视频 | 一级看片免费视频 | 国产一区二区在线免费观看 | 精品久久久久国产 | 国产精品久久久久久久久久久久久 | 亚洲二区在线观看 | 夜夜爽99久久国产综合精品女不卡 | 精品欧美一区二区在线观看视频 | 国产亚洲一区二区三区在线 | 日韩一区在线播放 | 蜜桃av鲁一鲁一鲁一鲁 | 国产毛片av | 成年网站在线观看 | 国产一区二区中文字幕 | 国产高清一区二区 | 国产美女一区二区 | 亚洲手机在线 | 国产一级在线观看 | 日韩高清一区 | 欧美福利三区 | 国产色99精品9i | 欧洲精品码一区二区三区免费看 | 综合久久av| 精品不卡 | 成人在线免费 |