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

標題: 關于矩陣鍵盤多按鍵同時按下的問題 [打印本頁]

作者: 18674201426    時間: 2021-1-27 13:00
標題: 關于矩陣鍵盤多按鍵同時按下的問題
我是初學51單片機和C語言,前段時間學過矩陣按鍵后就有一個關于電腦鍵盤多按鍵的問題。
就是一般教程里面的矩陣鍵盤的程序都是行列掃描反轉來檢測位的,然后松開按鍵通過while程序來檢測,但是遇到多按鍵的問題就無解了。比如我想按下1鍵的時候1數碼管顯示1,不松手再按下4則4數碼管顯示4,再不松手按7數碼管7顯示7,哪個按鍵松開則關掉哪個。
再比如像電腦鍵盤,要輸入大寫A,如果只按照教程的按鍵程序,當我們按下shift的時候,由于沒有松手,那程序會一直卡在while,那么按下A和其他鍵的時候是無法檢測的。如果不寫松手檢測程序,我查了一下現在鍵盤大多使用的是第二套掃描碼,也就是通斷都發數據,那如果不寫松手檢測,也就不會發送斷碼,那輸入也是有問題的。更不用說Ctrl+Alt+這種組合按鍵了,那更沒法用了。
想了幾天也沒有頭緒,希望有經驗的大神能幫我解惑。謝謝!

作者: 18674201426    時間: 2021-1-27 16:06
自頂一下
作者: 笨笨兔    時間: 2021-1-27 16:59
首先說說你想做什么?
按鍵掃描有很多種方式的,按需來完成既定功能。
作者: 盧盧    時間: 2021-1-27 17:07
還有長按短按
作者: 18674201426    時間: 2021-1-27 17:18
本帖最后由 18674201426 于 2021-1-27 18:25 編輯
笨笨兔 發表于 2021-1-27 16:59
首先說說你想做什么?
按鍵掃描有很多種方式的,按需來完成既定功能。

我寫的您可能沒看太清楚,就比如我想按下1鍵的時候1數碼管顯示1,不松手再按下4則4數碼管顯示4,再不松手按7數碼管7顯示7,哪個按鍵松開則關掉哪個。其實實現什么功能倒是次要的,數碼管顯示無非就是段選。我主要是想知道怎樣在按鍵1按下后,按下其他按鍵不會有沖突,因為用循環函數判斷鍵位是否松開會卡住cpu直到按鍵松開為止。就像電腦鍵盤一樣,截圖就是Ctrl+Alt+A的3鍵組合,用循環函數判斷鍵位是否松開,根本無法實現這個功能。
作者: 18674201426    時間: 2021-1-27 17:23
盧盧 發表于 2021-1-27 17:07
還有長按短按

長按短按應該還是能直接用延時函數實現的,直接在短按后面繼續延時就可以了,如果不需要短按的功能,可以在長按程序開始時關掉短按相關的處理
作者: xianfajushi    時間: 2021-1-27 19:28
設計組合鍵是輕而易舉的事,組合鍵也對應一個鍵值。
作者: xianfajushi    時間: 2021-1-27 19:29
組合鍵可以同時按下也可分開按下
作者: 18674201426    時間: 2021-1-27 21:16
xianfajushi 發表于 2021-1-27 19:28
設計組合鍵是輕而易舉的事,組合鍵也對應一個鍵值。

輕而易舉的事嗎?額,,,,您能抽空幫我寫一個簡單的我學習一下嗎,怎么實現的。
就比如1,2,3,4這四個鍵,組成2x2的矩陣鍵盤,1按下 燈1亮,2按下 燈2亮,,3按下 燈3亮,4按下 4燈亮。
重點是:按下任意鍵在不松開的情況下,按下其他鍵,相應的燈都會亮,松開哪個按鍵,哪個燈就熄滅。
只有這樣,當1鍵和2鍵同時按下的時候,經過延時,設定燈5亮,這樣的組合鍵才能實現。
希望能幫我寫個程序看看,謝謝大神!
作者: xianfajushi    時間: 2021-1-28 07:44
很簡單檢測沒有按鍵釋放就重新掃描,把對應的值定義為需要的即可,寫代碼似乎不需要看你悟性。
作者: 羅程峰8200    時間: 2021-1-28 08:21
真正寫按鍵程序是沒人用while的,一般一個程序里面只有一個主while,其他地方基本不用到,一些初學者總是容易被一些低級教程坑害,按鍵設計可以這樣,當你按鍵按下時系統里面就生成標識,抬起時就抹除標識,這樣無論什么時候只要標識還在就可以直接屏蔽當前操作,這樣你做其他操作也不會影響當前值,因為你的案件沒有抬起相當于屏蔽了此按鍵,如果是組合按鍵寫法是不一樣的,需要在一定的時間內完成和一直都生效是兩種不同的寫法,根據邏輯功能設置是必要的,不能一概而論
作者: 黃youhui    時間: 2021-1-28 08:43
18674201426 發表于 2021-1-27 21:16
輕而易舉的事嗎?額,,,,您能抽空幫我寫一個簡單的我學習一下嗎,怎么實現的。
就比如1,2,3 ...


按鍵掃描會嗎?
簡單點:掃描到第一個按鍵A后直接退出延時10ms再次掃描重復3次,若是后三次沒出現新的按鍵值就直接輸出A,掃描到其他按鍵就組合。
延時10ms和重復3次這個你可以看情況自己決定是否要
復雜點:4個按鍵值做一個4位的數組,從頭到尾掃描一次,有檢測被按下就對應的數組位置置1,然后檢測有少少個1,就知道按了幾個按鍵了。或者
作者: 笨笨兔    時間: 2021-1-28 08:47
18674201426 發表于 2021-1-27 17:18
我寫的您可能沒看太清楚,就比如我想按下1鍵的時候1數碼管顯示1,不松手再按下4則4數碼管顯示4,再不松手 ...

這個很好實現。
按鍵用定時器查詢,定時中斷消抖。
兩次查詢的不同,把那個多出來的發送出去即可。
按鍵可不管抬起。
作者: cheney03    時間: 2021-1-28 08:49
程序能傳上來研究嗎?




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1