導航:首頁 > 操作系統 > 單片機掃描口位

單片機掃描口位

發布時間:2022-08-11 11:40:23

單片機埠位循環掃描

這里的R0,R1,R2,R3...是在恆定以裡面已經定義好的,也就是說PORTDbits.R4是一個固定的硬體地址,所以不能這么寫,不過像你這個函數,可以使用更簡單的代碼來代替,
if(PORTD&0XF0)goto DE1;//這個語句就表示了,只要RD4~RD7任何一位為高電平就跳轉到DE1處,跟你上面代碼希望實現的功能是一摸一樣的

㈡ 關於單片機鍵盤掃描問題(行列轉換)

keyscan()
{
unsigned int i;
unsigned char key_h, key_l; //定義行列值
P3 = 0xf0; //將行全部置為0
key_l = P3 & 0xf0; //將P3口讀入列
if(key_l != 0xf0) { //判斷如果有鍵按下
for(i = 0; i < 25; i++); //延時消抖
key_l = P3 & 0xf0; //將P3口讀入列
if(key_l != 0xf0) { //第二次判斷
P3 = key_l | 0x0f; //重置P3口使其顯示出按鍵後的狀態
key_h = P3 & 0x0f; //讀入行
//---------------------------------------------
key_h = key_l + key_h; //保存到key_h
//------------
P3 = 0xf0; //將行全部置為0
while(key_l != 0xf0) //只有處於按下狀態

key_l = P3 & 0xf0; //就再次讀入
//------------
return(key_h); //釋放後返回
//---------------------------------------------
}
}
return 0; //沒有按鍵時返回0
}

㈢ 51單片機怎麼進行埠掃描,現在我在P0口輸入8路信號,什麼時間來不定,來的高低電平時間長短也不定。

通過中斷,查詢中斷標志即可。如果沒有中斷入口,就用實時採集,循環查詢P0口的值。

㈣ 請教大家一個單片機鍵盤掃描的疑問

指令1:任意埠在讀取數據前,必須將埠設置為高電平,這在單片機的教材上是說的很清楚的,請參考單片機的埠的原理圖:將某一位置1就是讓相應埠位的MOSFET截止,外界的信號電壓能有效的使觸發器動作,即保證讀取數據的正確性。

指令2:從鍵盤介面讀取數據。假設有某一按鍵按下,讀取的數據是A=XXXX1101B,注意數據的高四位不予考慮,用「X」表示(注意指令4)。

指令3:數據的各位取反,即變為:A=XXXX0010B。

指令4:數據進行AND操作,只保留低四位,即A=00000010B

指令5:判斷A是否為零:為零(即沒有按鍵按下),則轉向指令1,否則執行接下的指令。

由此可知道,如果沒有按鍵按下,則在指令2讀取的數據(XXXX1111B)經過指令3和4處理之後成為00000000B,即為0。

㈤ 單片機行列式鍵盤掃描原理

單片機行列式鍵盤掃描原理如下:

1、行線P10~P13為輸出線,列線P14~P17為輸入線。一開始單片機將行線(P10~P13)全部輸出低電平,此時讀入列線數據,若列線全為高電平則沒有鍵按下,當列線有出現低電平時調用延時程序以此來去除按鍵抖動。

2、延時完成後再判斷是否有低電平,如果此時讀入列線數據還是有低電平,則說明確實有鍵按下。最後一步確定鍵值。當判斷確實有鍵按下之後,行線輪流輸出低電平,根據讀入列線的數據可以確定鍵值。

3、單片機將P10輸出為低電平,其它P11~P13輸出高電平,此時讀取列線的數據全為高電平,說明沒有在第一行有鍵按下;其次,單片機將P11輸出低電平,其它P10、P12、P13仍為高電平。

4、此時再來讀取列線數據,發現列線讀到的數據有低電平,數值為1011(0x0B),如果我們的鍵盤布局已經確定,那麼0x0B就代表S5的值了。轉到S5鍵功能處理子程序就可以達到目的。

(5)單片機掃描口位擴展閱讀

單片機學習方法

1、基礎理論知識學習

基礎理論知識包括模擬電路、數字電路和C語言知識。。在學習單片機之前,覺得模擬電路和數字電路基礎不好的話,不要急著學習單片機,應該先回顧所學過的模擬電路和數字電路知識,為學習單片機加強基礎。

2、單片機實踐

准備一台電腦、一塊單片機開發板、一套視頻教程、一本單片機教材和一本C語言教材。電腦是用來編寫和編譯程序,並將程序代碼下載到單片機上;開發板來運行單片機程序,驗證實際效果。

㈥ 請教大家一個單片機C程序問題,關於埠掃描篩選的

原計劃是順序輸出0000~1111。

如果希望「屏蔽」某些數值的輸出,可以設定一個數組PINGBI[],裡面有 16個元素,其中某個元素為1,就屏蔽 這個數字 的 輸出。

參考程序如下:
for(i = 0; i < 16; i++)
if(PINGBI[i] == 0) P1 = i;

㈦ 單片機5個IO口掃描25個按鍵的程序,怎麼只能掃描到下面5個鍵

本文以循序漸進的思路,引導大家思考如何用最少的IO驅動更多的按鍵,並依次給出5種方案原理圖提供參考。在實際項目中我們經常會遇到有按鍵輸入的需求,但有的時候為了節省資源成本,我們都會選擇在不增加硬體的情況下使用最少的控制器IO驅動更多的按鍵,那麼具體是怎麼做的呢,下面我們就以用5個IO引腳為例,講下怎麼設計可以實現更多的按鍵?共有5種設計思路,下面依次介紹。

思路一

首先通常想到的可能是下面這樣的設計:

這樣我們可以先識別K01、K02、K03、K04、K05,若沒有按鍵按下然後再和思路四的設計一樣去識別其他按鍵。但這樣存在一個問題,如果IO1配置為0,IO5讀到0,那麼怎麼知道是K51按下還是K05按下呢,這里只需要在程序里做下判斷,先判斷下是不是K05按下,若不是就是K51,因為按鍵K01、K02、K03、K04、K05在5個IO口都為讀取的情況下,就可以識別,不需要掃描識別處理,相當於這5個按鍵優先順序高與其他按鍵。

總結

綜合上述,5個IO口最多可以識別25個按鍵,思路五程序上處理比較麻煩,若實際中只按思路四設計,也可識別20個按鍵,那麼如果有N個IO口可識別多少按鍵呢?這里給出如下公式:

假設有N個IO口按照思路三可以識別N*(N-1)/2個;

按照思路四可識別N*(N-1)個;

按照思路5可以識別N*(N-1)+N個。

最後再說下,如果實際設計時,還是按思路四設計好,軟體也沒那麼麻煩。如果是你的話你會選擇哪種方法呢?你還有沒有其他的設計方法呢?

㈧ 這是51單片機的鍵盤掃描程序,鍵盤是4*4的 p1口的高四位是行,低四位是列。高手們能幫忙分析一下嗎 我實在

for循環是先從行p1.4開始每一位掃描,再接著下一行同樣的方式,if語句是用異或判斷按鍵是否有變化,有變化就變換相應的寄存器

㈨ 51單片機鍵盤掃描

你用的是低位,你為什麼又置高位,看你的程序有點分不清楚一樣哦!~
你的P3口最低位的採集,而你的CASE用的又不是這樣的
你的這個while很可能就是死循環

㈩ 51單片機如何編程實現I/O口順序掃描

……
while(1) //循環
{
xx = P2;//讀出

xx &= 0x0F; //保留P2^0~P2^3的信息

if (xx == 0) break; //都為零就跳出循環

}//不都為零,就繼續循環

//執行後面的操作。。

……

閱讀全文

與單片機掃描口位相關的資料

熱點內容
androidapi中文合集 瀏覽:658
win7下安裝linux虛擬機 瀏覽:838
雲主機用別的伺服器嗎 瀏覽:922
黑馬買入指標源碼副圖 瀏覽:962
微軟為什麼會把伺服器放在水底 瀏覽:257
php截取字元串中文 瀏覽:21
虛擬機和編譯軟體哪個好 瀏覽:750
存儲伺服器為什麼比通用伺服器難 瀏覽:373
用php列印出前一天的時間 瀏覽:369
2010編譯方法 瀏覽:239
華為哪裡查看隱藏app 瀏覽:889
linux網卡重置 瀏覽:830
框架柱低於四米箍筋全高加密 瀏覽:694
米二如何安卓版本升級到高安卓版 瀏覽:783
安卓手機數據慢怎麼辦 瀏覽:727
雙底買賣指標公式源碼無未來函數 瀏覽:685
我的世界伺服器換電腦怎麼玩 瀏覽:215
linux內核源碼內存調優 瀏覽:789
活塞壓縮機廠家 瀏覽:492
java程序員macos 瀏覽:982