textview 结束后释放_等待按键释放,你的代码如何写?
生活随笔
收集整理的這篇文章主要介紹了
textview 结束后释放_等待按键释放,你的代码如何写?
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天,還是一個(gè)問題,在QQ群(300384358)里有小伙伴一直在問一個(gè)問題,如上圖。一個(gè)按鍵控制電機(jī)的轉(zhuǎn)動(dòng),按鍵按下后,電機(jī)轉(zhuǎn)動(dòng),按鍵釋放,電機(jī)停止,再加一個(gè)按鍵按下時(shí)長的檢測,當(dāng)按下超過5秒后,電機(jī)也得停止。也就說每次按下按鍵后電機(jī)轉(zhuǎn)動(dòng)的時(shí)間不得超過5秒,就算按鍵按下時(shí)時(shí)長超過5秒。
問題其實(shí)很簡單,才開始的小伙伴就是沒想法,其他小伙伴出謀劃策后還是沒解決問題,今天我們就來慢慢叨叨。
這個(gè)問題的難點(diǎn)一是在按鍵按下5秒的識(shí)別,小伙伴說了不要求精確的5秒,大概是5秒就可以了。難點(diǎn)二是按鍵釋放的檢測,好多小伙伴想不到辦法,還是用檢測按鍵按下的if語句,效果不佳,小代在這呢推薦大家用while循環(huán)的方式去實(shí)現(xiàn),具體怎么實(shí)現(xiàn)呢?
往下看
直接上代碼
按鍵識(shí)別還是采用大家最能接受的二次檢測加延時(shí)的方式,便于好理解。小代說的while循環(huán)檢測按鍵釋放,其實(shí) 就是第23行,循環(huán)結(jié)束標(biāo)志是按鍵的狀態(tài)(0或1)再做“非”運(yùn)算。解釋一下,從上面我們的二次檢測加延時(shí)的方式能看出,按鍵按下去后,狀態(tài)值是0,那我們?cè)僮鲆粋€(gè)“非”運(yùn)算后就變成了1,相反,按鍵沒按下的時(shí)候,“非”運(yùn)算后是0,當(dāng)while語句的條件變?yōu)?了,自然循環(huán)就結(jié)束了,這里說的按鍵沒按下,其實(shí)也可以說是按鍵從按下到釋放的這個(gè)過程。我們來捋一捋這段代碼的運(yùn)行,首先到了while(!KEY){}這個(gè)循環(huán),就說明按鍵已經(jīng)按下了,此時(shí)有兩種情況,一種是最簡單的,按下時(shí)間沒到5秒鐘,那按鍵釋放后直接停止電機(jī)轉(zhuǎn)動(dòng)就好,第二種情況是按鍵按下時(shí)長大于等于5秒鐘,這時(shí)需要在按下時(shí)長到5秒的時(shí)候,關(guān)閉電機(jī)。上面我們分析過了,按鍵按下以后,while(!KEY){}循環(huán)繼續(xù)執(zhí)行,只要按鍵釋放,自動(dòng)跳出此循環(huán),這樣一來,我就只需要在這個(gè)while循環(huán)里去檢測時(shí)間有沒有到達(dá)5秒鐘,時(shí)間精確度又不要求太高,那我們完全可以采用簡單的記錄次數(shù)來實(shí)現(xiàn)時(shí)間的計(jì)算,在以上代碼中,我假設(shè)while循環(huán)2000次的時(shí)間是5秒鐘,while循環(huán)一次,對(duì)計(jì)次變量加1,完了再去檢測有沒有大于等于2000了,當(dāng)大于等于2000了,就說明按下時(shí)間大于等于5秒鐘了,此時(shí)我們需要關(guān)閉電機(jī)。當(dāng)出現(xiàn)第一種情況,就是按下時(shí)長小于5秒鐘時(shí)間,這時(shí)直接退出while循環(huán),在循環(huán)后面緊跟著關(guān)閉電機(jī),再把按下計(jì)次變量清零,準(zhǔn)備下一次的按鍵記錄。這樣一來就實(shí)現(xiàn)對(duì)時(shí)間的記錄,分情況控制。分析問題時(shí)我們做了2種情況的分析,寫代碼時(shí),其實(shí)我們只是對(duì)按鍵釋放做了識(shí)別,又在按鍵釋放之前,做了計(jì)次的處理。這樣的按鍵釋放檢測方式可以用在其他的地方比如我們的按鍵調(diào)整時(shí)鐘時(shí)間,計(jì)算器等等。這樣的檢測方式也是有弊端的,第一,我們?cè)谧霭存I釋放時(shí)候,只做了按鍵的檢測,如果有其他實(shí)時(shí)性要求高的代碼段,需要放到這里的while循環(huán)中去,比如數(shù)碼管顯示的動(dòng)態(tài)掃描。第二,循環(huán)計(jì)次的變量,這里我定義成了uint型,最大范圍是65535,當(dāng)記錄次數(shù)大于這個(gè)值的時(shí)候,代碼就有問題了,當(dāng)我們長時(shí)間的按著按鍵不釋放,比如按著1分鐘。要解決這個(gè)問題,需要我們此時(shí)好一個(gè)最長按鍵時(shí)間,比如10秒,只要大于我們要求的時(shí)間就好,當(dāng)?shù)接涗洿螖?shù)大于這個(gè)值后將不再加1運(yùn)算。好了,今天的問題就叨叨到這里,希望我們都有所收獲。·END·
單片機(jī)技術(shù)宅以最簡單的方式服務(wù)初學(xué)者
微信號(hào):單片機(jī)技術(shù)宅總結(jié)
以上是生活随笔為你收集整理的textview 结束后释放_等待按键释放,你的代码如何写?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea 编译spring_Spring
- 下一篇: 拼装机器人感想_学习制作机器人的感想作文