一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PS2鍵盤(pán)編碼Verilog源程序分享

電子工程師 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:工程師曾暄茗 ? 2018-07-15 09:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

之前探討過(guò)PS/2鍵盤(pán)編解碼以及數(shù)據(jù)傳輸協(xié)議,這次自己動(dòng)手實(shí)現(xiàn)了利用FPGA接收鍵盤(pán)編碼,然后通過(guò)串口傳輸?shù)絇C。做的比較簡(jiǎn)單,只是通過(guò)FPGA把大寫(xiě)字母A-Z轉(zhuǎn)換成相應(yīng)的ASCII碼,只要字母按鍵被按下,就能在串口調(diào)試助手里顯示相應(yīng)大寫(xiě)字母。下面就共享代碼吧!

除了頂層模塊,三個(gè)底層模塊分別為PS/2傳輸處理模塊、串口傳輸模塊以及串口波特率選擇模塊(下面只給出頂層模塊和PS/2傳輸處理模塊的Verilog代碼)。

Module Ps2_key(Clk,Rst_n,Ps2k_clk,Ps2k_data,Rs232_tx);

Input Clk; //50M時(shí)鐘信號(hào)

Input Rst_n; //復(fù)位信號(hào)

Input Ps2k_clk; //PS2接口時(shí)鐘信號(hào)

Input Ps2k_data; //PS2接口數(shù)據(jù)信號(hào)

Output Rs232_tx; // RS232發(fā)送數(shù)據(jù)信號(hào)

Wire[7:0] Ps2_byte; // 1byte鍵值

Wire Ps2_state; //按鍵狀態(tài)標(biāo)志位

Wire Bps_start; //接收到數(shù)據(jù)后,波特率時(shí)鐘啟動(dòng)信號(hào)置位

Wire Clk_bps; // Clk_bps的高電平為接收或者發(fā)送數(shù)據(jù)位的中間采樣點(diǎn)

Ps2scan Ps2scan( .Clk(Clk), //按鍵掃描模塊

.Rst_n(Rst_n),

.Ps2k_clk(Ps2k_clk),

.Ps2k_data(Ps2k_data),

.Ps2_byte(Ps2_byte),

.Ps2_state(Ps2_state)

);

Speed_select Speed_select( .Clk(Clk),

.Rst_n(Rst_n),

.Bps_start(Bps_start),

.Clk_bps(Clk_bps)

);

My_uart_tx My_uart_tx( .Clk(Clk),

.Rst_n(Rst_n),

.Clk_bps(Clk_bps),

.Rx_data(Ps2_byte),

.Rx_int(Ps2_state),

.Rs232_tx(Rs232_tx),

.Bps_start(Bps_start)

);

Endmodule

Module Ps2scan(Clk,Rst_n,Ps2k_clk,Ps2k_data,Ps2_byte,Ps2_state);

Input Clk; //50M時(shí)鐘信號(hào)

Input Rst_n; //復(fù)位信號(hào)

Input Ps2k_clk; //PS2接口時(shí)鐘信號(hào)

Input Ps2k_data; //PS2接口數(shù)據(jù)信號(hào)

Output[7:0] Ps2_byte; // 1byte鍵值,只做簡(jiǎn)單的按鍵掃描

Output Ps2_state; //鍵盤(pán)當(dāng)前狀態(tài),Ps2_state=1表示有鍵被按下

//------------------------------------------

Reg Ps2k_clk_r0,Ps2k_clk_r1,Ps2k_clk_r2; //Ps2k_clk狀態(tài)寄存器

//Wire Pos_ps2k_clk; // Ps2k_clk上升沿標(biāo)志位

Wire Neg_ps2k_clk; // Ps2k_clk下降沿標(biāo)志位

Always @ (Posedge Clk Or Negedge Rst_n) Begin

If(!Rst_n) Begin

Ps2k_clk_r0 <= 1''B0;

Ps2k_clk_r1 <= 1''B0;

Ps2k_clk_r2 <= 1''B0;

End

Else Begin //鎖存狀態(tài),進(jìn)行濾波

Ps2k_clk_r0 <= Ps2k_clk;

Ps2k_clk_r1 <= Ps2k_clk_r0;

Ps2k_clk_r2 <= Ps2k_clk_r1;

End

End

Assign Neg_ps2k_clk = ~Ps2k_clk_r1 & Ps2k_clk_r2; //下降沿

//------------------------------------------

Reg[7:0] Ps2_byte_r; //PC接收來(lái)自PS2的一個(gè)字節(jié)數(shù)據(jù)存儲(chǔ)器

Reg[7:0] Temp_data; //當(dāng)前接收數(shù)據(jù)寄存器

Reg[3:0] Num; //計(jì)數(shù)寄存器

Always @ (Posedge Clk Or Negedge Rst_n) Begin

If(!Rst_n) Begin

Num <= 4''D0;

Temp_data <= 8''D0;

End

Else If(Neg_ps2k_clk) Begin //檢測(cè)到Ps2k_clk的下降沿

Case (Num)

4''D0: Num <= Num+1''B1;

4''D1: Begin

Num <= Num+1''B1;

Temp_data[0] <= Ps2k_data; //Bit0

End

4''D2: Begin

Num <= Num+1''B1;

Temp_data[1] <= Ps2k_data; //Bit1

End

4''D3: Begin

Num <= Num+1''B1;

Temp_data[2] <= Ps2k_data; //Bit2

End

4''D4: Begin

Num <= Num+1''B1;

Temp_data[3] <= Ps2k_data; //Bit3

End

4''D5: Begin

Num <= Num+1''B1;

Temp_data[4] <= Ps2k_data; //Bit4

End

4''D6: Begin

Num <= Num+1''B1;

Temp_data[5] <= Ps2k_data; //Bit5

End

4''D7: Begin

Num <= Num+1''B1;

Temp_data[6] <= Ps2k_data; //Bit6

End

4''D8: Begin

Num <= Num+1''B1;

Temp_data[7] <= Ps2k_data; //Bit7

End

4''D9: Begin

Num <= Num+1''B1; //奇偶校驗(yàn)位,不做處理

End

4''D10: Begin

Num <= 4''D0; // Num清零

End

Default: ;

Endcase

End

End

Reg Key_f0; //松鍵標(biāo)志位,置1表示接收到數(shù)據(jù)8''Hf0,再接收到下一個(gè)數(shù)據(jù)后清零

Reg Ps2_state_r; //鍵盤(pán)當(dāng)前狀態(tài),Ps2_state_r=1表示有鍵被按下

Always @ (Posedge Clk Or Negedge Rst_n) Begin //接收數(shù)據(jù)的相應(yīng)處理,這里只對(duì)1byte的鍵值進(jìn)行處理

If(!Rst_n) Begin

Key_f0 <= 1''B0;

Ps2_state_r <= 1''B0;

End

Else If(Num==4''D10) Begin //剛傳送完一個(gè)字節(jié)數(shù)據(jù)

If(Temp_data == 8''Hf0) Key_f0 <= 1''B1;

Else Begin

If(!Key_f0) Begin //說(shuō)明有鍵按下

Ps2_state_r <= 1''B1;

Ps2_byte_r <= Temp_data; //鎖存當(dāng)前鍵值

End

Else Begin

Ps2_state_r <= 1''B0;

Key_f0 <= 1''B0;

End

End

End

End

Reg[7:0] Ps2_asci; //接收數(shù)據(jù)的相應(yīng)ASCII碼

Always @ (Ps2_byte_r) Begin

Case (Ps2_byte_r) //鍵值轉(zhuǎn)換為ASCII碼,這里做的比較簡(jiǎn)單,只處理字母

8''H15: Ps2_asci <= 8''H51; //Q

8''H1d: Ps2_asci <= 8''H57; //W

8''H24: Ps2_asci <= 8''H45; //E

8''H2d: Ps2_asci <= 8''H52; //R

8''H2c: Ps2_asci <= 8''H54; //T

8''H35: Ps2_asci <= 8''H59; //Y

8''H3c: Ps2_asci <= 8''H55; //U

8''H43: Ps2_asci <= 8''H49; //I

8''H44: Ps2_asci <= 8''H4f; //O

8''H4d: Ps2_asci <= 8''H50; //P?

8''H1c: Ps2_asci <= 8''H41; //A

8''H1b: Ps2_asci <= 8''H53; //S

8''H23: Ps2_asci <= 8''H44; //D

8''H2b: Ps2_asci <= 8''H46; //F

8''H34: Ps2_asci <= 8''H47; //G

8''H33: Ps2_asci <= 8''H48; //H

8''H3b: Ps2_asci <= 8''H4a; //J

8''H42: Ps2_asci <= 8''H4b; //K

8''H4b: Ps2_asci <= 8''H4c; //L

8''H1z: Ps2_asci <= 8''H5a; //Z

8''H22: Ps2_asci <= 8''H58; //X

8''H21: Ps2_asci <= 8''H43; //C

8''H2a: Ps2_asci <= 8''H56; //V

8''H32: Ps2_asci <= 8''H42; //B

8''H31: Ps2_asci <= 8''H4e; //N

8''H3a: Ps2_asci <= 8''H4d; //M

Default: ;

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    29

    文章

    1367

    瀏覽量

    112305
  • 源程序
    +關(guān)注

    關(guān)注

    63

    文章

    1694

    瀏覽量

    46074
  • PS2鍵盤(pán)
    +關(guān)注

    關(guān)注

    1

    文章

    9

    瀏覽量

    4421
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    PS2鼠標(biāo) verilog

    FPGA PS2鼠標(biāo)verilog
    發(fā)表于 06-11 14:01

    PS2鍵盤(pán)時(shí)鐘與系統(tǒng)時(shí)鐘

    請(qǐng)問(wèn)一下,在編寫(xiě)ps2鍵盤(pán)程序時(shí),鍵盤(pán)的時(shí)鐘和系統(tǒng)時(shí)鐘是什么關(guān)系????
    發(fā)表于 07-26 10:22

    ps2鍵盤(pán) 協(xié)議

    我想請(qǐng)教下ps2協(xié)議如果鍵盤(pán)一直不按的話 ps2協(xié)議中時(shí)鐘一直是高電平嗎
    發(fā)表于 01-27 10:25

    PS2鍵盤(pán)接口引腳定義圖

    PS2鍵盤(pán)接口引腳定義圖 PS/2 鍵盤(pán)接口為 6 針母插,外觀為: 
    發(fā)表于 11-27 12:36 ?4.4w次閱讀
    <b class='flag-5'>PS2</b><b class='flag-5'>鍵盤(pán)</b>接口引腳定義圖

    verilog PS2鍵盤(pán)解碼程序

     之前探討過(guò)PS/2鍵盤(pán)編解碼以及數(shù)據(jù)傳輸協(xié)議,這次自己動(dòng)手實(shí)現(xiàn)了利用FPGA接收鍵盤(pán)編碼,然后通過(guò)串口傳輸?shù)絇C。做的比較
    發(fā)表于 06-05 12:31 ?2321次閱讀

    基于FPGA的PS2鍵盤(pán)鼠標(biāo)控制電子琴

    基于 FPGA的PS2鍵盤(pán)鼠標(biāo)控制電子琴論文
    發(fā)表于 10-29 17:18 ?31次下載

    PS2鍵盤(pán)控制程序

    Xilinx FPGA工程例子源碼:PS2鍵盤(pán)控制程序
    發(fā)表于 06-07 14:45 ?17次下載

    VHDL例程_PS2鍵盤(pán)接口程序

    VHDL例程 PS2鍵盤(pán)接口程序,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-10 17:12 ?8次下載

    PS2鍵盤(pán)轉(zhuǎn)USB鍵盤(pán)源碼

    PS2鍵盤(pán)轉(zhuǎn)USB鍵盤(pán)
    發(fā)表于 05-04 11:52 ?11次下載

    關(guān)于PS2鍵盤(pán)與單片機(jī)通信

      PS2鍵盤(pán)與單片機(jī)通信的方法與原理說(shuō)明。
    發(fā)表于 08-30 15:21 ?25次下載
    關(guān)于<b class='flag-5'>PS2</b><b class='flag-5'>鍵盤(pán)</b>與單片機(jī)通信

    MCU驅(qū)動(dòng)PS2鍵盤(pán)

    MCU驅(qū)動(dòng)PS2鍵盤(pán)
    發(fā)表于 10-27 14:39 ?17次下載
    MCU驅(qū)動(dòng)<b class='flag-5'>PS2</b><b class='flag-5'>鍵盤(pán)</b>

    PS2鍵盤(pán)在單片機(jī)系統(tǒng)中的應(yīng)用

    PS2鍵盤(pán)在單片機(jī)系統(tǒng)中的應(yīng)用
    發(fā)表于 10-27 14:41 ?17次下載
    <b class='flag-5'>PS2</b><b class='flag-5'>鍵盤(pán)</b>在單片機(jī)系統(tǒng)中的應(yīng)用

    FPGA DIY開(kāi)發(fā)板的PS2鍵盤(pán)控制

    hahaolinux 的PS2鍵盤(pán)控制。
    的頭像 發(fā)表于 06-22 00:29 ?4742次閱讀

    通用鍵盤(pán)鼠標(biāo)模擬包括USB和PS2程序詳細(xì)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是通用鍵盤(pán)鼠標(biāo)模擬包括USB和PS2程序詳細(xì)說(shuō)明。
    發(fā)表于 04-12 18:28 ?9次下載
    通用<b class='flag-5'>鍵盤(pán)</b>鼠標(biāo)模擬包括USB和<b class='flag-5'>PS2</b>的<b class='flag-5'>程序</b>詳細(xì)說(shuō)明

    使用51單片機(jī)進(jìn)行PS2鍵盤(pán)解碼實(shí)驗(yàn)的C語(yǔ)言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)進(jìn)行PS2鍵盤(pán)解碼實(shí)驗(yàn)的C語(yǔ)言程序免費(fèi)下載。
    發(fā)表于 08-26 17:30 ?10次下載
    使用51單片機(jī)進(jìn)行<b class='flag-5'>PS2</b><b class='flag-5'>鍵盤(pán)</b>解碼實(shí)驗(yàn)的C語(yǔ)言<b class='flag-5'>程序</b>免費(fèi)下載