|
樓主你這應(yīng)該是獨立按鍵防抖動程序,我首先講一下獨立按鍵掃描原理:
當(dāng)按鍵k1按下時會有幾個毫秒的抖動,也就是不會立馬為低電平,只有過了這個時間段才會徹底穩(wěn)定在低電平,當(dāng)按鍵松開時k1又會回到高電平。
我再啰嗦一下while語句用法:
while是一個循環(huán)語句,如 while(1); 就是一個死循環(huán)語句,程序在里面出不來,我們知道在c語言里規(guī)定“0”為假,非“0”為真,這里括號里是“1”,也就是真,那么就相當(dāng)于 while(真); ,程序是出不來的。
while起什么作用?
回到樓主的程序,假設(shè)程序從21行語句開始,當(dāng)按鍵k1按下時,k1為低電平,滿足if條件語句,程序進(jìn)而調(diào)到22行,這里的delay語句延時消抖,前面也講過為什么消抖,程序進(jìn)而到23行,這里又是一個if語句,但這個if語句不能少。此時按鍵還沒松開,但是已趨于穩(wěn)定,穩(wěn)定在低電平,運行的24行……然后到26行,由于此時K1為低電平,我用“0”代替,那么 !k1 為“1”,while(!k1)相當(dāng)于while(真),程序跳不出去,只有當(dāng)松開按鍵改變k1的電平才能跳出這個循環(huán)。如果不在這里設(shè)置while(!k1),那么程序會一直跑,24行的led會一直閃。 |
|