FPGA 實現PS 2鍵盤控制LED

2021-07-24 13:35:56 字數 2872 閱讀 4837

module ps2

( /*系統訊號*******/

input clk,

input rst_n,

/**ps2訊號************/

input data_in,

input clk_in,

/*測試訊號*******/

output reg done_flag,

output reg[3:0] led

);

/************************/

reg r1,r2;

reg[7:0] ps2_data;

reg[4:0] i;//狀態

wire ps2_clk_n;

/************************/

//clk_in下降沿檢測

/*************************/

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

begin

r1 <= 1』b0;

r2 <= 1』b0;

end

else

begin

r1 <= clk_in;

r2 <= r1;

end

end

assign ps2_clk_n = r2&(!r1);

/***************************/

//獲取ps2鍵值

/***************************/

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

begin

i<= 『d0;

done_flag <= 1』b0;

ps2_data <= 8』b0;

end

else case(i)

『d0:

begin

if(ps2_clk_n)

i <= i + 1』b1;

else i <= i;

end

『d1,』d2,』d3,』d4,』d5,』d6,』d7,』d8:

begin

if(ps2_clk_n)

begin

i <= i + 1』b1;

ps2_data[i-1] <= data_in;

end

else i <= i;

end

『d9,』d10:

begin

if(ps2_clk_n)

i <= i + 1』b1;

else

i <= i;

end

『d11://判斷通斷碼,為f0則是斷碼

begin

if(ps2_data==8』hf0)

i <= 『d12;

else

i <= 『d23;

end

『d12,』d13,』d14,』d15,』d16,』d17,』d18,』d19,』d20,』d21,』d22:

begin

if(ps2_clk_n)

i <= i + 1』b1;

else

i <= i;

end

『d23:

begin

i <= i + 1』b1;

done_flag <= 1』b1;

end

『d24:

begin

i <= 『d0;

done_flag <= 1』b0;

end

default:i <= 『d0;

endcase

end
/*****************************/

//輸出控制led,z鍵左移;y鍵右移;ctrl切換

/****************************/

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

led <= 4』b1110;

else if(done_flag)

case(ps2_data)

8』h1a://字母z

begin

led <= ;//左移

end

8』h35://字母y

begin

led <= ;//右移

end

8』h14:

begin

led <= ;

end

default:;

endcase

end

endmodule

首先進行ps/2時鐘下降沿檢測,然後接受鍵盤過來的鍵值(即按鍵的編碼,比如z鍵接收到的就是0x1a),通過對按鍵編碼的判斷來控制led的左右移動和切換。

這是最簡單的ps/2操作,如果要做更複雜處理,同樣可以按照這個思路擴充套件,以支援不同操作。

PS 2鍵盤原理

11.4 鍵盤原理 早期的鍵盤實際上是一種5pin的鍵盤,稱作at鍵盤,是1984年ibm pc的標準鍵盤。在1987年ibm進行了改進,從而變成了現在的ps 2鍵盤。當按下乙個鍵或釋放乙個鍵,鍵盤都會傳送鍵盤掃瞄碼到主機。比如按下a,鍵盤就會傳送0x1c到主機。如果持續按a,當經過乙個給定時間後,...

PS2鍵盤第二套鍵盤掃瞄碼學習發現

ps2鍵盤中第二套鍵盤掃瞄碼使用最廣泛。但是每個按鍵的鍵值,大多數是乙個位元組。有少量的兩個位元組 小鍵盤enter 鍵 e0 5a 右ctrl e0 14 右gui e0 27 左gui e0 1f 右alt e0 11 fn e0 2f 小鍵盤 e0 4a 這些按鍵一般在鍵盤上能找到另乙個相同功...

50元製作PS2鍵盤無線監控裝置

0 00 什麼是arduino arduino實際上就是一種開發板,將微控制器和必需的元件整合在一塊電路板上,擴充套件出完善的介面和針腳,就可以接上各種各樣的感測器,完成你心中的設計,你也可以把它理解成一種電子積木,因為它不需要焊接,也不需要高深的無線電知識,只需要程式設計基礎和基本的電路知識即可。...