:
1.基本原理:單片機模擬USB鍵盤是通過將叢鎮單片機的I/O口接入一個USB介面,利用單片機編寫程序來控制USB介面實現鍵盤功能。
2.硬體組成:單片機模擬USB鍵盤需余鄭空要一個USB介面,一個單片機主控晶元和一些按鍵,還有一些電路電阻和其他元件協同完成鍵盤的功能。
3.程序編寫:需要編寫一個程序,使單片機可以識別接入的USB介面,然後使用單片機的I/O口控制按鍵,使I/O口發出的信號以USB的標准格式輸出到USB介面,從而實現USB鍵盤的功能。
4.應用豎瞎場景:單片機模擬USB鍵盤可以應用於智能家居、自動化控制、游戲機、模擬終端等場景。
❷ 單片機中計算機鍵盤怎麼找到的
單片機中計算機鍵盤怎麼找到的?答案如下:方法如下:鍵盤工作原理鍵盤工作原理1. 按鍵輸入的特點按鍵輸入的特點 鍵盤實質上是一組按鍵開關的組合。通常使用的是觸鍵盤實質上是一組按鍵開關的組合。通常使用的是觸點式的機械彈性開關。利用機械觸點的通斷,實現點式的機械彈性開關。利用機械觸點的通斷,實現按下按下時開關導通,釋放時開關斷開時開關導通,釋放時開關斷開的功能。的亮閉功能。 按鍵觸點的一端和單片機的按鍵觸點的一端和單片機的I/OI/O埠引腳連接,另一埠引腳連接,另一端與電壓信號相連,觸點的通斷即可引起埠引腳上的端與電壓信號相連,觸點的通斷即可引起埠引腳上的電壓變化,單片機通過程序讀入電壓變化,單片機通過程序讀入I/OI/O埠引腳電平信號埠引腳電平信號便可判斷按鍵的狀態。如下圖所示。便可判斷按鍵的狀態。如下圖所示。當按鍵未按下壓時,當按鍵未按下壓時,Px.nPx.n埠為高電平埠為高電平; ;按壓按鍵後為按壓按鍵後為低電平。低電平。按鍵在閉合和斷開時,觸點會存在抖動現象:按鍵在閉合和斷開時,觸點會存在抖動現象: 圖為鍵閉合時列線電壓波形。鍵閉合和斷開過程中存在抖圖為鍵閉合時列線電壓波形。鍵閉合和斷開過程中存在抖動期動期( (呈現一串負脈沖呈現一串負脈沖) ),抖動時間長短與開關的機械特性有關,抖動時間長短與開關的機辯碰械特性有關,一般為一般為5 51010msms之間之間;穩定閉合期由操作員的按鍵動作所確定,;穩定閉合期由操作員的按鍵動作所確定,一般為數百毫秒到幾秒。為了保證一般為數百毫秒到幾秒。為了保證CPUCPU對鍵的閉合做一次處理對鍵的閉合做一次處理,必須去除抖動必須去除抖動,在鍵的穩定閉合或斷開時,讀鍵的狀態。,在鍵的穩定閉合或斷開時,讀鍵的狀態。軟體消抖方法:當判別到鍵攜鍵談盤上有鍵閉合後,延時一段時間再軟體消抖方法:當判別到鍵盤上有鍵閉合後,延時一段時間再 判別鍵盤的狀態,若仍有鍵閉合,則認為鍵盤判別鍵盤的狀態,若仍有鍵閉合,則認為鍵盤 上有一個鍵處於穩定的閉合狀態,否則認為鍵上有一個鍵處於穩定的閉合狀態,否則認為鍵 抖動。抖動。 鍵盤有兩種結構:獨立式按鍵和矩陣式按鍵。鍵盤有兩種結構:獨立式按鍵和矩陣式按鍵。
❸ 單片機行列式鍵盤掃描原理
單片鎮返機行列式鍵盤掃描原理如下:
1、行線P10~P13為輸出線,列線P14~P17為輸入線。一開始單片機將行線(P10~P13)全部輸出低電平,此時讀入列線數據,若列線全為高電平則沒有鍵按下,當列線有出現低電平時調用延時程序以此來去除按鍵抖動。
2、延時完成後再判斷是否有低電平,如果此時讀入列線數據還是有低電平,則說明確實有鍵按下。最後一步確定鍵值。當判斷確實有鍵按下之後,行線輪流輸出低電平,根據讀入列線的數據可以確定鍵值。
3、單片機將P10輸出為低電平,其它P11~P13輸前緩出高電平,此時讀取列線的數據全為高電平,說明沒有在第一行有鍵按下;其次,單片機將P11輸出低電平,其它P10、P12、P13仍為高電平。
4、此時再來讀取列線數據,發現列線讀到的數據有低電平,數值為1011(0x0B),如果我們的鍵盤布局已經確定,那麼0x0B就代表S5的值了。轉到S5鍵功能處理子程序就可以達到目的。
(3)單片機電腦鍵盤擴展閱讀
單片機學習方法
1、基礎理論知識學習
基礎理論知識包括模擬電路、數字電路和C語言知識。。在學習單片機御悔飢之前,覺得模擬電路和數字電路基礎不好的話,不要急著學習單片機,應該先回顧所學過的模擬電路和數字電路知識,為學習單片機加強基礎。
2、單片機實踐
准備一台電腦、一塊單片機開發板、一套視頻教程、一本單片機教材和一本C語言教材。電腦是用來編寫和編譯程序,並將程序代碼下載到單片機上;開發板來運行單片機程序,驗證實際效果。
❹ 單片機的鍵盤介面電路可以完成哪些功能
可以完成以下功能:
1、實現按鍵掃描:通過鍵盤介面電路,可以將外部按鍵輸入轉換為數字信號明差悉,單片機可以周期性地掃描鍵盤介面,檢測是否有按鍵被按下,從而實現按鍵的輸入檢測和處理。
2、實現按鍵去抖:由於機械按鍵的特性,按鍵可能會出現抖動現象,導致單片機檢測到多次按激乎鍵,通過鍵盤介面電路,可以實現按鍵去抖,保證單片機慶團只檢測到有效的按鍵信號。
❺ 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取電,板上要有電源開關。
❻ 單片機怎麼控制電腦鍵盤輸入
進入軟體,最基礎的創建工程我就不說了,直接到按鍵程序,寫程序,首先要了解按鍵,對於按鍵,分為獨立式和矩陣式按鍵。
先說說獨立式按鍵,這個十分簡單,特點是每個按鍵佔用一條I/O線,當按鍵數量較多時,I/O口利用率不高,但程序編制簡單。所以,如果按鍵就那麼兩三個的話用起來還是占優勢的哦。這樣的開關程序就是一個檢測過程,看I/O埠是否低電平,如果是則有按鍵按下,否則就沒有。如下是獨立式按鍵的接法。
步驟閱讀
3
復雜的是矩陣式按鍵,但是他也有很大的優勢,電路連接復雜,但提高了I/O口利用率,軟體編程較復雜。要是你的東西有很多的按鍵要操作,那麼採用這種方式的優勢就十分明顯了。如下圖就是矩陣式按鍵,矩陣式按鍵的程序較獨立式按鍵復雜的多,方法也很多,基本的有線翻轉法,掃描法,計演算法,因為程序很復雜的原因,在這里就不一一講解了,有興趣的自己可以查查資料。
❼ 單片機控制的鍵盤多用於鍵盤工作方式
編程掃描方式。單片機控制的鍵盤官方參數顯示,多用於鍵盤工作方磨薯孝式是編程掃描方式。單片機手攜是一種集成電路晶元,是採用超大規模集成電瞎稿路技術把具有數據處理能力的中央處理器。
❽ 單片機的按鍵功能是什麼
你們知道單片機的每個按鍵的具體功能嗎?下面是我收集整理關於單片機的每個按鍵的具體功能的資料以供大家參考學習,希望大家喜歡。·
鍵盤的分類:
鍵盤分編碼鍵盤和非編碼鍵盤。
鍵盤上閉合鍵的識別由專用的硬體編碼器實現,並產態慧困生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤;
而靠軟體編程來識別的稱為非編碼鍵盤。
在單片機組成的各種系統中,用的最多的是非編碼鍵盤。也有用到編碼鍵盤的。
非編碼鍵盤有分為:獨立鍵盤和行列式(又稱為矩陣式)鍵盤。
本文主要討論矩陣鍵盤(獨立鍵盤比較簡單可以與此類比),下面是矩陣鍵盤的電路連接圖。
如果單片機檢測到的是抖動部分,則無法按鍵判斷是否有效,所以我們需要加入防抖程序。
註:也可以通過硬體防抖,如上圖(b)。
功能:矩陣鍵盤
(按相應的按鍵,數碼管從0~F的顯示)
單片機:AT89S52
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DAT=P0^3;
sbit CLK=P0^2;
uchar temp,h;
void delay(uint); //延遲程序
void sendbyte(uchar); //數碼管顯示
void keyscan(); //按鍵掃描
uchar code tab[]={
0xed,0x09,0xbc,0x9d,0x59,0xd5,
0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,
0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全滅
void main (void)
{
sendbyte(16); //初始時數碼管無顯示
while(1)
{
keyscan(); //按鍵掃描
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void sendbyte(uchar byte)
{
uchar num,c;
num=tab[byte];
for(c=0;c<8;c++)
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1; //右移位賦值
}
}
void keyscan()
{
/*第一行按鍵的掃描*/
P2=0xfe; //確定第一行的按鍵有效
temp=P2; //將其賦給一個變數(處理I/O口時,一般先賦值給一個變數,然後通過處理變數來處理I/O口)
temp=temp&0xf0; //用於檢測第一行的哪個按鍵按下
while(temp!=0xf0) /*這個部分只要是用來消除按下抖動的*/
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0) //這個地方,已經消除了按下抖動,P2口的值已經確定
{
temp=P2; //將P2口得值賦給變數
switch(temp) //這個switch語句,用來確定哪一個按鍵按下時,數碼管的顯示值
{
case 0x7e:h=0;
break; //這個break很重要,表示如果有匹配的值,就跳出switch語句,防止程序跳不出來。
case 0xbe:h=1;
break;
case 0xde:h=2;
break;
case 0xee:h=3;
break;
default : h=16;
break;
}
while(temp!=0xf0) /*這個部分只要是用來消除釋放抖動的*/
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h); //送給數碼管顯示
}
}
/*第二行按鍵的掃描*/
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7d:h=4;
break;
case 0xbd:h=5;
break;
case 0xdd:h=6;
break;
case 0xed:h=7;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第三行按鍵的掃描*/
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7b:h=8;
break;
case 0xbb:h=9;
break;
case 0xdb:h=10;
break;
case 0xeb:h=11;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第四行按鍵的掃描*/
P2=0xf7;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x77:h=12;
break;
case 0xb7:h=13;
break;
case 0xd7:h=14;
break;
case 0xe7:h=15;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}