⑴ 簡單的51系列單片機控制4*4矩陣鍵盤顯示電路圖
這個太簡單了,很多書上都有,我想,你自己找本書,看看吧.
⑵ 51單片機矩陣4*4鍵盤程序,P0口接一個數碼管,P2口接矩陣鍵盤
////給你一個例子,自己再改改:
/*-----------------------------------------------
名稱:矩陣鍵盤
論壇:www.doflye.net
編寫:shifang
日期:2009.5
修改:無
內容:
------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#include"keyboard.h"
#include"delay.h"
#define KeyPort P1
/*------------------------------------------------
按鍵掃描函數,返回掃描鍵值
------------------------------------------------*/
unsigned char KeyScan(void) //鍵盤掃描函數,使用行列反轉掃描法
{
unsigned char cord_h,cord_l;//行列值中間變數
KeyPort=0x0f; //行線輸出全為0
cord_h=KeyPort&0x0f; //讀入列線值
if(cord_h!=0x0f) //先檢測有無按鍵按下
{
DelayMs(10); //去抖
if((KeyPort&0x0f)!=0x0f)
{
cord_h=KeyPort&0x0f; //讀入列線值
KeyPort=cord_h|0xf0; //輸出當前列線值
cord_l=KeyPort&0xf0; //讀入行線值
while((KeyPort&0xf0)!=0xf0);//等待松開並輸出
return(cord_h+cord_l);//鍵盤最後組合碼值
}
}return(0xff); //返回該值
}
/*------------------------------------------------
按鍵值處理函數,返回掃鍵值
可以根據需要改變返回值
| 1 | 2 | 3 | + |
| 4 | 5 | 6 | - |
| 7 | 8 | 9 | * |
| 0 | . | = | / |
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 1 ;break;//0 按下相應的鍵顯示相對應的碼值
case 0x7d:return 2 ;break;//1
case 0x7b:return 3 ;break;//2
case 0x77:return '+';break;//3
case 0xbe:return 4 ;break;//4
case 0xbd:return 5 ;break;//5
case 0xbb:return 6 ;break;//6
case 0xb7:return '-';break;//7
case 0xde:return 7 ;break;//8
case 0xdd:return 8 ;break;//9
case 0xdb:return 9 ;break;//a
case 0xd7:return 'x';break;//b
case 0xee:return 0 ;break;//c
case 0xed:return '.';break;//d
case 0xeb:return '=';break;//e
case 0xe7:return '/';break;//f
default:return 0xff;break;
}
}
⑶ 51單片機怎麼讀取矩陣鍵盤是不是只要把vcc和GND給接上,然後讀取高低鍵盤就可以了
先給P-11送上低電平,再查詢p-14~p-17哪個為低電平,若p-17為低電平,表示S4按下了
沒有?再給P-12送上低電平,再查詢p-14~p-17哪個為低電平,若p-17為低電平,表示S8按下了
........
⑷ 關於51單片機矩陣鍵盤的問題。
(1)P3口是准雙向IO口(注意與雙向IO口的區別),它 的硬體結構決定著,讀取之前先寫1,再讀取,讀取的結果才可能是正確的,你可以區域查查書。
(2)4X4 矩陣鍵盤的8根線直接連在IO上,而獨立按鍵有一根線固定是接地的,這就意味著必須採取掃面或者線反轉的方法。比如其中一根行線賦0,相當於這一行的四個按鍵變成了四個獨立按鍵,在讀取列線的值就知道了究竟哪個按鍵被按下了。 此時P3口就出現了特定的電平組合,相當於特徵碼了,然後再認為映射一下功能就可以了。
⑸ 矩陣鍵盤與單片機怎麼連接
用單片機的I/O口與矩陣連接
有專門的電路,網路上有借鑒的
⑹ 矩陣鍵盤與單片機怎麼連接
矩陣鍵盤是行x列,需要看你矩陣的多少而定,接單片機IO口P0、P1都可以
矩陣鍵盤就是個按鍵陣列,不需要電源和地,電源和地是接單片機的
⑺ 51單片機矩陣4*4鍵盤程序,P0口接一個數碼管,P2口接矩陣鍵盤,C語言的
51單片機矩陣4*4鍵盤程序,模擬實例 供參考。
⑻ 51單片機P0口接矩陣鍵盤可以嗎
首先說下P0口和P1、P2、P3口的區別,關於LED和鍵盤的
P0作為輸出口,未加負載時有4V電壓,但由於晶元內部對P0未接5V+電阻,所以接上負載之後電壓會下降。以LED燈負載為例,接上300歐姆電阻+黃色led,P0口的電壓只有2.4V,led不會亮,所以必須要加上拉電阻。
P1、P2、P3內部都有電源供電,所以加LED這種小負載時電壓不會下降很多。
P0接鍵盤的時候是作為輸入口,這時,P0內部的鎖存器發揮功效,可以鎖存住數據。
鍵盤輸入電路是這樣:
如果是IO——按鍵——地線,也就是不加上拉電阻的接法,接到P0口後,按鍵1次,P0口自動鎖存住低電平,即使沒有上拉電阻,但由於接了mos管電路(如圖),松開按鍵後,VCC的電流不會導通到地線,所以IO口會恢復高電平,可以進行下次邏輯判斷。
結論:P0口只有在用於IO驅動時才需要加上拉電阻,鍵盤不需要
ps:這些你可以下個模擬軟體研究,proteus,它可以把keil生成的工程文件虛擬燒錄到單片機中,用法很簡單,和multisim一樣
⑼ 51單片機如何與電腦鍵盤相接,USB的
我自己沒做過,但是51單片機處理USB協議太吃力了,建議你使用32位的單片機,STM32F103ZET6之類的,或者換成矩陣鍵盤,按鍵也比較多了。
以下是我在網上找的一些參考,希望能夠對你有幫助:
如果是USB介面,那麼你要懂USB協議,而且單片機的速度要足夠快,一般的51怕是做不了,得用USB晶元,比如南京沁恆的CH375,單片機做主機,USB鍵盤做從機。
USB協議是很復雜的,不是一天兩天就能搞得通的,程序也很復雜,就不附上了,如果你是初學者,那麼不建議你一開始就調試USB,你可以嘗試下圓口的PS2鍵盤,那個比較容易
用
帶
USB
介面的
51內核
單片機吧
買個讀片子機,把程序燒進去,ok
你知道USB協議有多復雜嗎?!還用51來讀?
要是說在鍵盤上接一個USB轉串口的晶元,然後用51來讀串口,這樣更可行一些
還不如老老實實用矩陣鍵盤呢
單片機最小系統板不能直接和PC機USB相連,如果是支持ISP下載的單片機,可以通過USB轉232(TTL電平),單片機的串口RXD(P3.0)接232的TXD,單片機的串口TXD(P3.1)接232的RXD。
USB轉232(TTL電平)下載器需要裝驅動程序,採用的晶元不同驅動不同,請對應安裝。
如果單片機從USB取電,板上要有電源開關。
⑽ 矩陣鍵盤如何與開發板連接
矩陣鍵盤與開發板連接:矩陣鍵盤是行x列,需要看你矩陣的多少而定,接單片機IO口P0、P1都可以,矩陣鍵盤就是個按鍵陣列,不需要電源和地,電源和地是接單片機的。
IN0~IN4連接到微控制器上的任何IO埠,只要在編程期間設置IO,P0~P3中的任何四個IO都可以。當然,為了方便起見,通常並聯在一起,例如P2_0至P2_3。驅動模塊的驅動電源輸入不應取自MCU板,而應使用其他電源為其供電。
行列掃描法原理:
第一步, 使行線為編程的輸入線,列線是輸出線,拉低所有的列線,判斷行線的變化,如果有按鍵按下,按鍵按下的對應行線被拉低,否則所有的行線都為高電平。
第二步,在第一步判斷有鍵按下後, 延時10ms消除機械抖動,再次讀取行值,如果此行線還處於低電平狀態則進入下 一步,否則返回第一步重新判斷。
第三步,開始掃描按鍵位置,採用逐 行掃描,每間隔1ms的時間,分別拉低第一列,第二列,第三列。