輕觸按鍵:相當于是一種電子開關,按下時開關接通,松開時開關斷開,實現(xiàn)原理是通過輕觸按鍵內部的金屬彈片受力彈動來實現(xiàn)接通和斷開
獨立按鍵原理圖
這里總共有四個獨立按鍵,它們公共的一段都接到了GND電源的負極,另一端引出了四個編號是連接到單片機板子中的MCU上面,還有一段是接到了IO口上。
那我們就知道了單片機上電的時候所有的IO口默認都是高電平,那么就是當是如果按鍵沒有按下的時候那么這個IO口保證的就是高電平,按下的話那么這個IO口就變成低電平了。寄存器會檢測IO口的電平,然后在讀回來這個寄存器當中。如果按鍵松開去讀取這個寄存器那么它其實就是一個高電平默認為1的一個高電平,反之。那么根據(jù)這個現(xiàn)象我們可以得知我們的獨立按鍵是不是被按下了。
通過查詢原理圖得知:K1=P3_1,則代碼如下
#includesbit led1=P2^0;
sbit key1=P3^1;
void main()
{while(1)
{if(key1==0)
{ led1=0;
}
else
{ led1=1;
}
}
}
如果通過獨立1鍵或獨立2鍵都能控制亮滅該怎么寫,這里就用到C語言的邏輯符號
回顧一下
那么代碼應該如下
#includesbit led1=P2^0;
sbit key1=P3^1;
sbit key2=P3^0;
void main()
{while(1)
{if(key1==0||key2==0)
{ led1=0;
}
else
{ led1=1;
}
}
}
二、消除按鍵抖動
2.1 按鍵的抖動對于機械開關,當機械觸點斷開、閉合時,由于機械觸點的彈性作用,一個開關在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開,所以在開關閉合及斷開的瞬間會伴隨一連串的抖動
在按鍵閉合的時候會產(chǎn)生一些抖動,沒有按鍵按下的話它就是一個高電平(1)(單片機上電的時候所有的IO口默認都是高電平)。在我們按下按鍵的時候它就會變成(0),并且由于它的是機械觸電會彈開,然后上下抖動幾下,然后才會穩(wěn)定的變成(0)。抖動的時間上面圖中也表示的是(510)ms。當抖動消失的時候進入了一個穩(wěn)定的低電平(0),這個持續(xù)時間是看你手什么時候松開這個按鍵。在松手的時候也會產(chǎn)生抖動,它也不會突然變成高電平(1),也會抖動產(chǎn)生時間為(510)ms。最后,松手。
按鍵的消抖有兩種方法:
加個線,把這個線通過這些電路里面進行一些觸發(fā)器等等,通過一些電路來進行操作,把這個抖動進行一些過沖,然后再給我們單片機進行點上。比較麻煩!
通過軟件來進行一個延遲函數(shù),把這個消抖進行操作!
根據(jù)上面的敘述轉換成代碼
#includesbit led1=P2^0;
sbit key1=P3^1;
void delay(int i)
{while(i--);
}
void main()
{while(1)
{if(key1==0)
{ delay(20);
while(key1==0);
delay(20);
led1=~led1;
}
}
}
三、獨立按鍵控制LED顯示二進制直接上代碼
#includesbit key1=P3^1;
void Delay(int i)
{while(i--);
}
int main(void)
{unsigned char LEDNum = 0;
while(1)
{if(key1==0)
{ Delay(20);
while(key1==0);
Delay(20);
LEDNum++;
P2=~LEDNum;
}
}
}
這里用 unsigned char 類型是因為:無符號字符型(所占1字節(jié) = 8bit位)剛好對應著8位二進制的數(shù)據(jù),那這八位二進制的正好這個P2口和這個寄存器51單片機保持一致。
注意:P2口上電之后和單片機的IO上電一樣都是默認的是高電平! 1111 1111
LEDNum取反給P2的話,其實變量取反給P2的值上它是并不會改變這個變量的值。它的值還是沒有取反的值。在等號右邊的話,它并不會改變LEDNum的值。其實就是取反當中你取反的值是右值就不會被改變。
四、獨立按鍵控制LED燈移位#includesbit key1=P3^1;
sbit key2=P3^0;
void Delay(int i)
{while(i--);
}
int main(void)
{unsigned char LEDNum = 0;
P2=0xFE;
while(1)
{if(key1==0)
{ Delay(20);
while(key1==0);
Delay(20);
LEDNum++;
if(LEDNum>=8)
{ LEDNum=0;
}
P2=~(0x01< Delay(20);
while(key2==0);
Delay(20);
LEDNum--;
if(LEDNum==0)
{ LEDNum=7;
}
P2=~(0x01<
P2口當中的P一定是要大寫的,標識符一定要嚴格區(qū)分大小寫!
當你在定義一個局部變量的時候一定要注意賦值初始值,在全局變量定義的話默認為0!
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當前標題:MCU-51:獨立按鍵控制LED燈的動作-創(chuàng)新互聯(lián)
文章路徑:http://www.chinadenli.net/article46/dhejeg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站導航、外貿網(wǎng)站建設、品牌網(wǎng)站設計、微信小程序、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容