欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索

按鍵消抖方法與抖動(dòng)原因分析(狀態(tài)機(jī),延時(shí),邏輯關(guān)系消抖)單片機(jī)源程序

查看數(shù): 33886 | 評(píng)論數(shù): 19 | 收藏 37
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2018-8-31 02:34

正文摘要:

本人第一次發(fā)帖,如果有錯(cuò)誤,歡迎大家指正!!!有關(guān)按鍵消抖的話題已經(jīng)有很多人提出來了,在這里我把它進(jìn)行一個(gè)總結(jié)。希望能幫助到大家! 1.按鍵抖動(dòng)的原因        按鍵消抖通常的按鍵所用 ...

回復(fù)

ID:1129643 發(fā)表于 2024-8-31 10:17
看了樓主的貼子對(duì)按鍵消抖又有了新的理解
ID:496636 發(fā)表于 2024-8-17 12:23
貼上宋學(xué)松的程序片段:此程序在1毫秒中斷程序中執(zhí)行
//將一行的 4 個(gè)按鍵值移入緩沖區(qū)
keybuf[keyout][0] = (keybuf[keyout][0] << 1) | KEY_IN_1;
keybuf[keyout][1] = (keybuf[keyout][1] << 1) | KEY_IN_2;
keybuf[keyout][2] = (keybuf[keyout][2] << 1) | KEY_IN_3;
keybuf[keyout][3] = (keybuf[keyout][3] << 1) | KEY_IN_4;
//消抖后更新按鍵狀態(tài)
for (i=0; i<4; i++) //每行 4 個(gè)按鍵,所以循環(huán) 4 次
{
if ((keybuf[keyout][i] & 0x0F) == 0x00)
{ //連續(xù) 4 次掃描值為 0,即 4*4ms 內(nèi)都是按下狀態(tài)時(shí),可認(rèn)為按鍵已穩(wěn)定的按下
KeySta[keyout][i] = 0;
}
else if ((keybuf[keyout][i] & 0x0F) == 0x0F)
{ //連續(xù) 4 次掃描值為 1,即 4*4ms 內(nèi)都是彈起狀態(tài)時(shí),可認(rèn)為按鍵已穩(wěn)定的彈起
KeySta[keyout][i] = 1;
}
}
//執(zhí)行下一次的掃描輸出
keyout++; //輸出索引遞增
keyout = keyout & 0x03; //索引值加到 4 即歸零
switch (keyout) //根據(jù)索引,釋放當(dāng)前輸出引腳,拉低下次的輸出引腳
{
case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break;
case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break;
case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break;
case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break;
default: break;
}
ID:496636 發(fā)表于 2024-8-17 12:16
看了一下,你的狀態(tài)機(jī)消抖,你key_press!=0xff時(shí),表明有鍵按下,賦key_state=1,則執(zhí)行case=1語句,再判斷key_press!=0xff,就幾條語句,也就幾個(gè)微秒而已,延時(shí)很短的,這有問題。
還是手把手教你學(xué)51單片機(jī) 宋學(xué)松處理陣列按鍵程序來得好。
它的思路是:采用中斷的形式,1毫秒中斷,在1毫秒中斷中,使某一行為低電平,其它為高電平。然后把這一行中的按鍵狀態(tài)緩存在狀態(tài)字節(jié)數(shù)組中(4*4的二維數(shù)組中),有四行,則要執(zhí)行4次,花4毫秒才能把各個(gè)按鍵的狀態(tài)存儲(chǔ)一遍。存儲(chǔ)的字節(jié)先左移一位,然后從最低位移入狀態(tài)位(列狀態(tài)),1為按鍵沒按下,0表示按下。通過16次,16毫秒掃描,就存儲(chǔ)了四次矩陣按鍵狀態(tài),這樣存儲(chǔ)在字節(jié)的低四位中。
假設(shè)4次都是1,表明已穩(wěn)定彈起,假設(shè)4次都為0,表明穩(wěn)定鍵下,如果不全是1或是0,則在按鍵過渡期。只要把這16這字節(jié)的數(shù)組與0x0f按位與,就能判斷是不是穩(wěn)定按下,或是穩(wěn)定彈出,如果是,就返回某按鍵值為1或是0,使代表按鍵消抖狀態(tài)的二維數(shù)組中的某個(gè)數(shù)為1或是0
ID:1130610 發(fā)表于 2024-8-17 09:34
寫的非常詳細(xì)
ID:466250 發(fā)表于 2024-8-17 03:09
程序啰里啰唆,采樣后僅判斷2次,完全沒這個(gè)必要的邏輯,后面的keycode重新賦值也根本沒必要,采樣出來本來已經(jīng)是按鍵值,沒必要再次轉(zhuǎn)換。除非還有其他的采樣,要放在一個(gè)8位的byte里面去識(shí)別。
ID:344848 發(fā)表于 2024-8-17 03:04
使用硬件去抖動(dòng)電路:1)RS觸發(fā)器去抖動(dòng),2)單穩(wěn)觸發(fā)器——74HC221,3)同相器組成的積分去抖動(dòng)電路。
ID:1096929 發(fā)表于 2024-8-16 19:18
哎呀,你為什么把每個(gè)按鍵都定義呢,直接橫掃縱掃不就行了
ID:227818 發(fā)表于 2024-8-14 13:40
謝謝大佬
ID:202023 發(fā)表于 2023-8-30 13:19

樓主寫的非常詳細(xì) 好資料,51黑有你更精彩!!!
ID:1083996 發(fā)表于 2023-8-20 09:55
很棒的分析,感謝分享。
ID:224580 發(fā)表于 2023-8-17 14:08
分析很透,佩服這些大神
ID:34149 發(fā)表于 2023-8-15 10:45
分析很透徹!好辦法!
ID:423911 發(fā)表于 2023-8-13 09:16
感謝樓主,非常好的資料,很有用。
ID:202023 發(fā)表于 2023-6-21 11:03
oh,在不解壓下可以打開,解壓了反而打不開了,是我的原因。
ID:202023 發(fā)表于 2023-6-21 11:01
樓主是你的資料有問題,還是我的軟件有問題。

error.JPG (50.54 KB, 下載次數(shù): 125)

error.JPG
ID:202023 發(fā)表于 2023-6-21 10:55
不錯(cuò),萬丈高樓平地起,越是看似簡(jiǎn)單的東西,越要用心去學(xué)。謝謝樓主分享。
ID:15415 發(fā)表于 2023-5-29 16:48
非常好的資料,謝謝樓主
ID:896842 發(fā)表于 2021-3-26 14:36
樓主寫的很好,先收藏研究一下
ID:391536 發(fā)表于 2018-8-31 14:09
樓主寫的非常詳細(xì) 好資料,51黑有你更精彩!!!

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表