MCU-51:獨(dú)立按鍵控制LED燈的動(dòng)作-創(chuàng)新互聯(lián)

目錄
  • 一、獨(dú)立按鍵
  • 二、獨(dú)立按鍵控制LED亮滅
  • 二、消除按鍵抖動(dòng)
    • 2.1 按鍵的抖動(dòng)
    • 2.2 控制LED燈狀態(tài)-消除按鍵抖動(dòng)
    • 三、獨(dú)立按鍵控制LED顯示二進(jìn)制
  • 四、獨(dú)立按鍵控制LED燈移位

創(chuàng)新互聯(lián)專注于莒南企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城系統(tǒng)網(wǎng)站開發(fā)。莒南網(wǎng)站建設(shè)公司,為莒南等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)一、獨(dú)立按鍵

輕觸按鍵:相當(dāng)于是一種電子開關(guān),按下時(shí)開關(guān)接通,松開時(shí)開關(guān)斷開,實(shí)現(xiàn)原理是通過輕觸按鍵內(nèi)部的金屬彈片受力彈動(dòng)來實(shí)現(xiàn)接通和斷開
在這里插入圖片描述
獨(dú)立按鍵原理圖
在這里插入圖片描述
這里總共有四個(gè)獨(dú)立按鍵,它們公共的一段都接到了GND電源的負(fù)極,另一端引出了四個(gè)編號(hào)是連接到單片機(jī)板子中的MCU上面,還有一段是接到了IO口上。
那我們就知道了單片機(jī)上電的時(shí)候所有的IO口默認(rèn)都是高電平,那么就是當(dāng)是如果按鍵沒有按下的時(shí)候那么這個(gè)IO口保證的就是高電平,按下的話那么這個(gè)IO口就變成低電平了。寄存器會(huì)檢測(cè)IO口的電平,然后在讀回來這個(gè)寄存器當(dāng)中。如果按鍵松開去讀取這個(gè)寄存器那么它其實(shí)就是一個(gè)高電平默認(rèn)為1的一個(gè)高電平,反之。那么根據(jù)這個(gè)現(xiàn)象我們可以得知我們的獨(dú)立按鍵是不是被按下了。

二、獨(dú)立按鍵控制LED亮滅

通過查詢?cè)韴D得知:K1=P3_1,則代碼如下

#includesbit led1=P2^0;
sbit key1=P3^1;
void main()
{while(1)
	{if(key1==0)
		{	led1=0;
		}
		else
		{	led1=1;
		}
	}
}

如果通過獨(dú)立1鍵或獨(dú)立2鍵都能控制亮滅該怎么寫,這里就用到C語言的邏輯符號(hào)
回顧一下
在這里插入圖片描述
在這里插入圖片描述
那么代碼應(yīng)該如下

#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;
		}
	}
}
二、消除按鍵抖動(dòng) 2.1 按鍵的抖動(dòng)

對(duì)于機(jī)械開關(guān),當(dāng)機(jī)械觸點(diǎn)斷開、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)開關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開時(shí)也不會(huì)一下子斷開,所以在開關(guān)閉合及斷開的瞬間會(huì)伴隨一連串的抖動(dòng)
在這里插入圖片描述
在按鍵閉合的時(shí)候會(huì)產(chǎn)生一些抖動(dòng),沒有按鍵按下的話它就是一個(gè)高電平(1)(單片機(jī)上電的時(shí)候所有的IO口默認(rèn)都是高電平)。在我們按下按鍵的時(shí)候它就會(huì)變成(0),并且由于它的是機(jī)械觸電會(huì)彈開,然后上下抖動(dòng)幾下,然后才會(huì)穩(wěn)定的變成(0)。抖動(dòng)的時(shí)間上面圖中也表示的是(510)ms。當(dāng)抖動(dòng)消失的時(shí)候進(jìn)入了一個(gè)穩(wěn)定的低電平(0),這個(gè)持續(xù)時(shí)間是看你手什么時(shí)候松開這個(gè)按鍵。在松手的時(shí)候也會(huì)產(chǎn)生抖動(dòng),它也不會(huì)突然變成高電平(1),也會(huì)抖動(dòng)產(chǎn)生時(shí)間為(510)ms。最后,松手。

按鍵的消抖有兩種方法:
加個(gè)線,把這個(gè)線通過這些電路里面進(jìn)行一些觸發(fā)器等等,通過一些電路來進(jìn)行操作,把這個(gè)抖動(dòng)進(jìn)行一些過沖,然后再給我們單片機(jī)進(jìn)行點(diǎn)上。比較麻煩!
通過軟件來進(jìn)行一個(gè)延遲函數(shù),把這個(gè)消抖進(jìn)行操作!

2.2 控制LED燈狀態(tài)-消除按鍵抖動(dòng)

根據(jù)上面的敘述轉(zhuǎn)換成代碼

#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;
		}
	}
}
三、獨(dú)立按鍵控制LED顯示二進(jìn)制

直接上代碼

#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 類型是因?yàn)椋簾o符號(hào)字符型(所占1字節(jié) = 8bit位)剛好對(duì)應(yīng)著8位二進(jìn)制的數(shù)據(jù),那這八位二進(jìn)制的正好這個(gè)P2口和這個(gè)寄存器51單片機(jī)保持一致。

注意:P2口上電之后和單片機(jī)的IO上電一樣都是默認(rèn)的是高電平! 1111 1111

LEDNum取反給P2的話,其實(shí)變量取反給P2的值上它是并不會(huì)改變這個(gè)變量的值。它的值還是沒有取反的值。在等號(hào)右邊的話,它并不會(huì)改變LEDNum的值。其實(shí)就是取反當(dāng)中你取反的值是右值就不會(huì)被改變。

四、獨(dú)立按鍵控制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口當(dāng)中的P一定是要大寫的,標(biāo)識(shí)符一定要嚴(yán)格區(qū)分大小寫!
當(dāng)你在定義一個(gè)局部變量的時(shí)候一定要注意賦值初始值,在全局變量定義的話默認(rèn)為0!

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前標(biāo)題:MCU-51:獨(dú)立按鍵控制LED燈的動(dòng)作-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article46/dhejeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)網(wǎng)站導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)微信小程序、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)