久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

單片機(jī)學(xué)習(xí):按鍵掃描

 xpxys99 2017-05-14

1、按鍵消抖

通常的按鍵所用開(kāi)關(guān)為機(jī)械彈性開(kāi)關(guān),,當(dāng)機(jī)械觸點(diǎn)斷開(kāi),、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性作用,,一個(gè)按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,,在斷開(kāi)時(shí)也不會(huì)一下子斷開(kāi)。因而在閉合及斷開(kāi)的瞬間均伴隨有一連串的抖動(dòng),,為了不產(chǎn)生這種現(xiàn)象而作的措施就是按鍵消抖,。抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定,一般為5ms~10ms,。

單片機(jī)學(xué)習(xí):按鍵掃描

消抖的方法有硬件消抖和軟件消抖兩種,。

硬件消抖

在鍵數(shù)較少時(shí)可用硬件方法消除鍵抖動(dòng)。下圖所示的RS觸發(fā)器為常用的硬件去抖,。

單片機(jī)學(xué)習(xí):按鍵掃描

圖中兩個(gè)'與非'門(mén)構(gòu)成一個(gè)RS觸發(fā)器,。當(dāng)按鍵未按下時(shí),輸出為0;當(dāng)鍵按下時(shí),,輸出為1,。此時(shí)即使用按鍵的機(jī)械性能,使按鍵因彈性抖動(dòng)而產(chǎn)生瞬時(shí)斷開(kāi)(抖動(dòng)跳開(kāi)B),,只要按鍵不返回原始狀態(tài)A,,雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為0,,不會(huì)產(chǎn)生抖動(dòng)的波形,。也就是說(shuō),即使B點(diǎn)的電壓波形是抖動(dòng)的,,但經(jīng)雙穩(wěn)態(tài)電路之后,,其輸出為正規(guī)的矩形波。這一點(diǎn)通過(guò)分析RS觸發(fā)器的工作過(guò)程很容易得到驗(yàn)證,。

軟件消抖

如果按鍵較多,,常用軟件方法去抖,即檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,,5ms~10ms的延時(shí),,讓前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),,如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下,。當(dāng)檢測(cè)到按鍵釋放后,,也要給5ms~10ms的延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵的處理程序,。一般來(lái)說(shuō),,軟件消抖的方法是不斷檢測(cè)按鍵值,直到按鍵值穩(wěn)定,。實(shí)現(xiàn)方法:假設(shè)未按鍵時(shí)輸入1,,按鍵后輸入為0,抖動(dòng)時(shí)不定,??梢宰鲆韵聶z測(cè):檢測(cè)到按鍵輸入為0之后,延時(shí)5ms~10ms,,再次檢測(cè),,如果按鍵還為0,那么就認(rèn)為有按鍵輸入,。延時(shí)的5ms~10ms恰好避開(kāi)了抖動(dòng)期,。

2、鍵盤(pán)掃描

矩陣式鍵盤(pán)結(jié)構(gòu):輸出行線(xiàn)鎖存器,,輸入列線(xiàn)緩沖器,。

工作過(guò)程: 1.CPU先使行線(xiàn)P1.0為低,其余行線(xiàn)為高 2.CPU讀入輸入緩沖器的狀態(tài),,以確定哪條列線(xiàn)為0狀態(tài),,若此時(shí)P1.7為0,則'C'鍵按下,;若P1.5為0,,則'E'鍵按下 3.若輸入緩沖器(列線(xiàn))狀態(tài)全部為1,說(shuō)明P1.0行沒(méi)有鍵盤(pán)按下,,CPU急繼續(xù)使P1.1為0,,其余行線(xiàn)為高,再讀入輸入緩沖器的狀態(tài),,以確定哪條列線(xiàn)為0,,從而判斷是哪個(gè)鍵盤(pán)按下 4.當(dāng)判斷那個(gè)鍵盤(pán)按下后,程序轉(zhuǎn)入相應(yīng)的鍵盤(pán)處理程序

單片機(jī)學(xué)習(xí):按鍵掃描

矩陣式鍵盤(pán)結(jié)構(gòu):輸出行線(xiàn)鎖存器,,輸入列線(xiàn)緩沖器,。 工作過(guò)程: 1.CPU先使行線(xiàn)P1.0為低,其余行線(xiàn)為高 2.CPU讀入輸入緩沖器的狀態(tài),,以確定哪條列線(xiàn)為0狀態(tài),,若此時(shí)P1.7為0,,則'C'鍵按下,;若P1.5為0,,則'E'鍵按下 3.若輸入緩沖器(列線(xiàn))狀態(tài)全部為1,說(shuō)明P1.0行沒(méi)有鍵盤(pán)按下,,CPU急繼續(xù)使P1.1為0,,其余行線(xiàn)為高,再讀入輸入緩沖器的狀態(tài),,以確定哪條列線(xiàn)為0,,從而判斷是哪個(gè)鍵盤(pán)按下 4.當(dāng)判斷那個(gè)鍵盤(pán)按下后,程序轉(zhuǎn)入相應(yīng)的鍵盤(pán)處理程序 把每個(gè)鍵都分成水平和垂直的兩端接入,,比如說(shuō)掃描碼是從垂直的入,,那就代表那一行所接收到的掃描碼是同一個(gè)bit,而讀入掃描碼的則是水平,,掃描的動(dòng)作是先輸入掃描碼,,再去讀取輸入的值,經(jīng)過(guò)比對(duì)之后就可知道是哪個(gè)鍵被按下,。 比如說(shuō)掃描碼送入01111111,,前面的0111是代表此時(shí)掃描第一行P1.0列,而后面的1111是讓讀取的4行接腳先設(shè)為VDD,,若此時(shí)第一行的第三列按鍵被按下,,那讀取的結(jié)果就會(huì)變成01111101(注意1111變成1101),其中LSB的第三個(gè)bit會(huì)由1變成0,,這是因?yàn)檫@個(gè)按鍵被按下之后,,會(huì)被垂直的掃描碼電位short,而把讀取的LSB的bit電位拉到0,,此即為掃描原理,。

3、實(shí)例電路

單片機(jī)學(xué)習(xí):按鍵掃描

4,、掃描程序(僅供參考)

//鍵盤(pán)掃描程序

uchar Keys_Scan()

{

uchar Tmp,KeyNo=0;

//高四位置0,,放入四行

P1=0x0F;

DeMS(1);

Tmp =P1^0x0F;

//判斷按鍵發(fā)生于0~3列的哪一列

switch(Tmp)

{

case 1:KeyNo=0;break;

case 2:KeyNo=1;break;

case 4:KeyNo=2;break;

case 8:KeyNo=3;break;

default:KeyNo=16; //無(wú)鍵按下

}

//低四位置0,放入四列

P1=0xF0;

Tmp =P1>>4^0x0F;

//0~3行分別附加起始值0,,4,,8,12

switch (Tmp)

{

case 1:KeyNo +=0;break;

case 2:KeyNo +=4;break;

case 4:KeyNo +=8;break;

case 8:KeyNo +=12;

}

return KeyNo;

}


本篇由小編整理發(fā)布,,侵刪,。希望對(duì)大家有幫助。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀(guān)點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多