![]() |
發(fā)布時間: 2022-1-7 10:40
正文摘要:74HC164是 二位串入、8位并出移位寄存器 時鐘 (CP) 每次由低變高時,數(shù)據(jù)右移一位,輸入到 Q0, Q0 是兩個數(shù)據(jù)輸入端(DSA 和 DSB)的邏輯與,它將上升時鐘沿之前保持一個建立時間的長度。主復位 (MR) 輸入端上的一 ... |
lkc8210 發(fā)表于 2022-1-7 14:52 這個會出現(xiàn)兩鍵同時被按下的情形,會出現(xiàn)顯示不正常問題? |
win_shi 發(fā)表于 2022-1-7 13:31 地板已經(jīng)解釋得很詳細了, 如果你無法保證164輸出單一的低電平, 那么:你只能添加,為了產(chǎn)生單一低電平而操作164的代碼,并在該時間點讀取P26狀態(tài)的代碼,來判斷按鍵了。 |
單片機所有IO口都可以即時作為輸入端或者輸出端。顯示LCD一般最多也就需要12、13個IO口,而89C52有40個IO口可以使用。所以你完全可以拋棄164,直接使用IO口驅動LCD,其他未使用的,選一些出來做動態(tài)掃描鍵盤用。 |
lkc8210 發(fā)表于 2022-1-7 14:52 非常感謝,是我愚鈍,只想著只能輸入串口了,謝謝~~ |
win_shi 發(fā)表于 2022-1-7 13:31 74hc164的輸出是由你控制的 怎么會不知道輸出的并口狀態(tài)呢? 如單片機控制164輸出0xFD 而又撿測到P26 == 0 就說明K1按下 但正如沙發(fā)所說的 這個方式只適合用在動態(tài)掃描 的 LED上 因為你不能保證164輸出單一低電平 如164輸出0xF9而按下的是K2 單片機就可能以為是K1按下 而且如果164的D1長期輸出高點平(機會很小但有可能出現(xiàn)) 就算按下K1 單片機也會撿測不到 以下是我寫的例子 ![]() ![]() |
188610329 發(fā)表于 2022-1-7 13:14 非常感謝您的指導,我也是想用當P26==0時來判斷有按鍵按下,但是不知道怎么去判斷是那個按鍵按下的,查資料說74hc164只支持輸入,所以輸出的并口狀態(tài)如何獲取呢,也就是k1 k2 k3 k4那個是低或者拉高,怎么去識別,還請不吝賜教,非常感謝~ |
在你程序中, 你應該清楚地知道在任意時間點, D1,D2,D3,D4 狀態(tài)的吧? 當P2.6 = 0 的時候, D1~D4 哪個處于 低電平, 說明 這一時刻 與之對應的 K1~K4 中的哪個按鍵被按下。 一般,LCD 不太適合用這個方式因為不需要時時更新LCD的內容。 通常,這個方式比較適合用在動態(tài)掃描 的 LED上 , 接在LED的公共端,在更新位碼的時候順便 判斷一下If(P26 == 0) 就能立刻確定按鍵了。 |
Powered by 單片機教程網(wǎng)