導航:首頁 > 操作系統 > ps2單片機

ps2單片機

發布時間:2022-04-28 16:18:52

㈠ 51單片機模擬PS2鍵盤,實現「A」鍵的連打功能!

得發送一連串的通碼PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
delay_50ms();
PS2key_sendto_host(0x1c);
.
.
.
PS2key_sendto_host(0xf0);
delay_50ms();
PS2key_sendto_host(0x1c);
這樣就能實現連打的功能了。

㈡ 單片機模擬ps2滑鼠發送上下移動編碼,發送的是什麼編碼,求大神指點

標準的PS/2滑鼠支持下面的輸入X左右位移,Y上下位移,左鍵、中鍵和右鍵。滑鼠以一個固定的頻率讀取這些輸入並更新不同的計數器然後標記出反映的移動和按鍵狀態,而Microsoft的Intellimouse它既支持標准輸入也支持滾輪和兩個附加的按鍵。
標準的PS/2滑鼠發送位移和按鍵信息給主機採用如下的3位元組數據包格式:
滑鼠有4個模式:Reset、Stream、Remote、Wrap,各個模式具體的介紹詳見《PS2技術參考》一文,通常我們使用Stream模式,即一旦滑鼠檢測到位移或發現一個或多個滑鼠鍵的狀態改變了,就發送位移數據包數據報告的最大速率被認為是采樣速率。參數的范圍從10采樣點/秒到200采樣點/秒。這個參數的預設值是100采樣點/秒,主機可以用設置采樣速率0xF3命令來改變它Stream模式是操作的預設模式。
微軟的Intellimouse工作起來象標準的PS/2滑鼠(也就是使用3位元組位移數據包,和標准PS/2滑鼠一樣回應所有命令,報告設備ID0x00)。要進入滾輪模式,主機應該發送如下的命令序列: 0xf3 0xc8 0xf3 0x64 0xf3 0x50
Set sample rate 200 Set sample rate 100 Set sample rate 80
主機然後應該發布「獲得設備ID」命令(0xF2)並等待回應,再將ps2滑鼠使能(0xf4)。如果安裝的是是標准PS/2滑鼠(非Intellimouse),它回應設備ID0x00。在這種情況下,主機回辨認出實際這個設備沒有滾輪並繼續把它當作是標准PS/2滑鼠。但是,如果安裝的是微軟的Intellimouse,它返回的ID是0x03。這就告訴主機掛接的定點設備有滾輪並且主機認為滑鼠使用4位元組的位移數據包:
Z位移是2的補碼表示滾輪的自上次數據報告以來的位移,有效值的范圍在-8到+7這意味著數值實際只有低四位;高四位僅用作符號擴展位。
更多命令及詳解,可下載:
命令集具體介紹詳見《PS2技術參考》資料。

㈢ 單片機模擬ps2鍵盤需要驅動

不需要寫上位機驅動,PS2是串列通信,只需要按照通信格式發送相應的數據就可以了。具體的呢可以查一下PS2方面的資料。

㈣ 單片機如何通過ps2向pc傳輸數據

第一,首先要知道PS/2介面跟PC是怎樣連的。PC里的ps/2一般接鍵盤或滑鼠。
PS/2的針腳 :
6* u *5
4* *3
2* *1
1 n/c 不連
2 DATA KeyData-
3 VCC Power,+5VDC 電源5伏
4 GND GND 地線
5 n/c 不連
6 CLK Clock- 時鍾線

接線黃、紅、白、綠對應的針腳如下

鍵盤 滑鼠
黃 藍 3
紅 橙 4
白 白 6
綠 綠 2
接下來,你要知道數據是怎樣經過ps/2介面傳輸到pc的?
數據是變成了2進制數後經過ps/2介面傳遞到PC的,常用串列方式傳遞數據。
所以單片機要用串列方式和ps/2通訊。即單片機的TXD做移位脈沖,接PS/2的6腳;RXD是數據線,接PS/2的2腳.
還不明白給hychyc_2008發消息。

ps2是11位。
PS/2幀的第一位是起始位,為0,然後是8位數據位,發送鍵盤掃描碼的一個位元組(掃描碼為1-4個位元組),然後是奇偶校驗位,最後是停止位,為1。這些是在數據線(即1號引腳線)上發送的。無鍵按下時,數據線和始終線都保持為1。當有鍵按下時,時鍾線CLOCK送出脈沖,同時數據線送出數據。主機(此處是89c51 MCU)在始終脈沖的下降沿對數據線采樣獲得數據。鍵盤掃描碼包括通碼和斷碼,當鍵按下時發送通碼,抬起時發送斷碼。更詳細的內容可參考所附的《PS/2 技術參考》。
根據上述原理,我這樣設計了實驗:將鍵盤的脈沖線接至89c51的外部中斷輸入口(INT0或INT1),當鍵按下和抬起時有脈沖產生,此脈沖引發MCU 中斷。將鍵盤的DATA線連至89c51的輸入口(如P1.0)。在中斷處理程序中,從輸入口讀入數據,然後通過循環移位對讀進的數據位進行處理,1(起始位)、10(奇偶校驗)、11(停止位)可拋棄,如不嫌麻煩也可將奇偶校驗位加以應用。當一個數據幀收完後,將處理後剩下的2-9位(即掃描碼)通過串口發至PC機,通過PC機的串口監視軟體(如「串口調試助手」)來查看。硬體連線和源碼如下:

源碼:

ORG 0000H
AJMP MAIN;轉入主程序
ORG 0003H ;外部中斷P3.2腳INT0入口地址
AJMP INT ;轉入外部中斷服務子程序
;以下為主程序進行CPU中斷方式設置
MAIN:MOV SCON,#50H;設置成串口1方式
MOV TMOD,#20H;波特率發生器T1工作在模式2上
MOV PCON,#80H;波特率翻倍為2400x2=4800BPS
MOV TH1,#0F3H;預置初值(按照波特率2400BPS預置初值)
MOV TL1,#0F3H;預置初值(按照波特率2400BPS預置初值)

SETB EA ;打開CPU總中斷請求
SETB IT0 ;設定INT0的觸發方式為脈沖負邊沿觸發
SETB EX0 ;打開INT0中斷請求
SJMP $

INT: CLR EA ;暫時關閉CPU的所有中斷請求
CJNE R0,#0,L1
L3: INC R0
SJMP L5
L1: CJNE R0,#9,L2
SJMP L3
L2: CJNE R0,#10,L4
SETB TR1;啟動定時器T1
MOV SBUF,A
MOV R0,#0
L5: SETB EA ;允許中斷
RETI ;退出子程序
L4: MOV C,P1.0
RRC A
SJMP L3

END
搞定後,當按下和釋放鍵時,會在PC機上顯示其掃描碼。
忘了說明一點,通電時鍵盤會自檢,此時鍵盤上三個燈全亮,自檢完成後熄滅,並向主機發送十六進制字元AA.。
以上取自某網頁。

㈤ 單片機PS2鍵盤解碼

sbit Key_Data = P3^3 ; //定義Keyboard引腳
sbit Key_CLK = P3^2; //使用中斷
bit BF=0;
bit Shift; //定義上檔鍵標志
bit Key_UP; //定義通碼斷碼標志
unsigned char KeyV;
unsigned char IntNum;
unsigned char DisNum;/*-----------------------------------------------
外部中斷讀入信息
-----------------------------------------------*/
void Keyboard_out(void) interrupt 0
{
if ((IntNum > 0) && (IntNum < 9))
{
KeyV = KeyV >> 1; //因鍵盤數據是低>>高,結合上一句所以右移一位
if (Key_Data)
KeyV = KeyV | 0x80; //當鍵盤數據線為1時到最高位
}
IntNum++;
while (!Key_CLK); //等待PS/2CLK拉高 if (IntNum > 10)
{
IntNum = 0; //當中斷11次後表示一幀數據收完,清變數准備下一次接收
BF = 1; //標識有字元輸入完了
EA = 0; //關中斷等顯示完後再開中斷
}
}/*-----------------------------------------------
解碼信息
注意:如SHIFT+G為12H 34H F0H 34H F0H 12H
也就是說shift的通碼+G的通碼+shift的斷碼+G的斷碼
-----------------------------------------------*/
void Decode(unsigned char ScanCode) //
{
unsigned char TempCyc,Val;
if (!Key_UP) //當鍵盤按下時
{
switch (ScanCode)
{
case 0xF0 : // 當收到0xF0,Key_UP置1表示斷碼開始
Key_UP = 1;
break; case 0x12 : // 左 SHIFT
Shift = 1;
break; case 0x59 : // 右 SHIFT
Shift = 1;
break; default:
if(!Shift) //如果SHIFT沒按下
{
for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表顯示
if (UnShifted[TempCyc][0] == ScanCode)
{
Val= UnShifted[TempCyc][1];
LCD_Write_Char(DisNum%16,DisNum/16,Val);
DisNum++;
if(DisNum==33)
{
LCD_Clear(); //清屏
DisNum=0; //重頭寫數據
}
}
}
else //按下SHIFT
{
for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表顯示
if (Shifted[TempCyc][0] == ScanCode)
{
Val= Shifted[TempCyc][1];
LCD_Write_Char(DisNum%16,DisNum/16,Val);
DisNum++;
if(DisNum==33)
{
LCD_Clear(); //清屏
DisNum=0; //重頭寫數據
}
}
}
break;
}
}
else
{
Key_UP = 0;
switch (ScanCode) //當鍵松開時不處理判碼,如G 34H F0H 34H 那麼第二個34H不會被處理
{
case 0x12 : // 左 SHIFT
Shift = 0;
break; case 0x59 : // 右 SHIFT
Shift = 0;
break;
}
}
BF = 0; //標識字元處理完了} /*-----------------------------------------------
ps2初始化(實際初始化外部中斷)
-----------------------------------------------*/
void PS2_Init(void)
{
IT1 = 0; //設外部中斷1為低電平觸發
EA = 1; //外部中斷開
EX0 = 1; //開中斷
}
/*-----------------------------------------------
讀取鍵盤值
-----------------------------------------------*/
void Read_KeyBoard(void)
{ if (BF)
Decode(KeyV);
else
EA = 1; //開中斷
}

㈥ 與單片機有關的ps2鍵盤是什麼呀

ps2鍵盤就是我們平常電腦用的鍵盤,ps2鍵盤實際上就是一個按鍵編碼器,然後單片機要做的就是將ps2鍵盤發過來的鍵盤編碼進行解碼,最後在數碼管上或是液晶上顯示出來

㈦ 用51單片機實現PS2鍵盤輸入,用LCD液晶顯示

PS2數據線接在普通口還真不好辦
數據線接在中斷腳就很容易寫啦

PS2接串口就更加方便啦

PS2鍵盤按鍵輸出原理至少要弄懂
明白原理就很容易寫啦

㈧ 單片機製作PS/2鍵盤如何初始化

/*********************************************************************/
/************************PS2 Command Process**************************/
/*********************************************************************/
void receive_process ( )
{
uchar command;

if ( !Check_command( ) ) return;

command = PS2_Recbyte ( );

if ( !command ) return;

switch( command )
{
case 0xff: // reset command
ps2_send ( 0xfa );
reset ( );
break;
case 0xfe: // re-send command
ps2_send ( 0xfa );
re_send ( );
break;
case 0xf6: // Set default
ps2_send ( 0xfa );
scan_on=1;
break;
case 0xf5: // Set default and Disable Keyboard
LED_ALARM = 0;
ps2_send ( 0xfa );
scan_on=0;
break;
case 0xf4: // Enable Keyboard
ps2_send ( 0xfa );
scan_on=1;
break;
case 0xf3: // Set Typematic Rate/Delay
ps2_send ( 0xfa );
break;
case 0xf2: // Read ID
ps2_send ( 0xfa );
ps2_send ( 0xAB );
ps2_send ( 0x83 );
break;
case 0xee: // respond command
ps2_send ( 0xee );
case 0xed: // set/reset led status command
ps2_send ( 0xfa );
receive_led ( );
break;
case 0x00:
ps2_send ( 0xfe );
break;
default:
ps2_send ( 0xfa ); // other command, just send a response of 0xFA
break;
}
}

㈨ 為什麼ps2手柄遙控51單片機的小車,按鍵松開後電機還會持續驅動一段時間

單片機在使用電機的應用中,普通電機在運轉時如果仃止(斷電)會有一個慣性過程(所以會繼續轉一小段時間),使用步進電機就不會有這種現象(不過驅動程序需要有步進編碼控制),普通電機要去除這個慣性過程可以在仃止(斷電)時加一個短暫的反響驅動就可以(不過硬體電路需要有正反向驅動)。

閱讀全文

與ps2單片機相關的資料

熱點內容
河北視頻加密有哪些 瀏覽:649
桌面兩個微信怎麼都加密碼 瀏覽:276
長沙單身程序員 瀏覽:883
伺服器下載異常是因為什麼 瀏覽:703
java防刷 瀏覽:842
3dmax取消當前命令 瀏覽:359
顯示當前模式下所有可執行的命令 瀏覽:758
為什麼程序員拿了股份還要高薪 瀏覽:946
電腦運行命令里的記錄能刪嗎 瀏覽:697
linuxwss 瀏覽:848
一個軟體需要登錄伺服器地址 瀏覽:923
哪裡有解壓程序 瀏覽:299
java靜態方法內存 瀏覽:545
我的世界ec伺服器如何帶vip 瀏覽:737
什麼是由解析器域名和伺服器構成 瀏覽:414
自動識別電影信息源碼 瀏覽:850
柱筋箍筋加密區怎麼算 瀏覽:48
鋼筋中加密15倍是什麼意思 瀏覽:366
esc加密演算法 瀏覽:518
linux運行exe命令 瀏覽:125