在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

PS2鍵盤編碼Verilog源程序分享

電子工程師 ? 來源:網(wǎng)絡(luò)整理 ? 作者:工程師曾暄茗 ? 2018-07-15 09:55 ? 次閱讀

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

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

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

Input Clk; //50M時鐘信號

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

Input Ps2k_clk; //PS2接口時鐘信號

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

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

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

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

Wire Bps_start; //接收到數(shù)據(jù)后,波特率時鐘啟動信號置位

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

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時鐘信號

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

Input Ps2k_clk; //PS2接口時鐘信號

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

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

Output Ps2_state; //鍵盤當(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),進行濾波

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接收來自PS2的一個字節(jié)數(shù)據(jù)存儲器

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

Reg[3:0] Num; //計數(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 //檢測到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; //奇偶校驗位,不做處理

End

4''D10: Begin

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

End

Default: ;

Endcase

End

End

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

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

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

If(!Rst_n) Begin

Key_f0 <= 1''B0;

Ps2_state_r <= 1''B0;

End

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

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

Else Begin

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

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碼,這里做的比較簡單,只處理字母

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

    關(guān)注

    29

    文章

    1366

    瀏覽量

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

    關(guān)注

    63

    文章

    1694

    瀏覽量

    45962
  • PS2鍵盤
    +關(guān)注

    關(guān)注

    1

    文章

    9

    瀏覽量

    4405
收藏 人收藏

    評論

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

    PS2鼠標(biāo) verilog

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

    PS2鍵盤時鐘與系統(tǒng)時鐘

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

    ps2鍵盤 協(xié)議

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

    PS2鍵盤接口引腳定義圖

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

    verilog PS2鍵盤解碼程序

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

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

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

    PS2鍵盤控制程序

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

    VHDL例程_PS2鍵盤接口程序

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

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

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

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

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

    MCU驅(qū)動PS2鍵盤

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

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

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

    FPGA DIY開發(fā)板的PS2鍵盤控制

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

    通用鍵盤鼠標(biāo)模擬包括USB和PS2程序詳細說明

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

    使用51單片機進行PS2鍵盤解碼實驗的C語言程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機進行PS2鍵盤解碼實驗的C語言程序免費下載。
    發(fā)表于 08-26 17:30 ?10次下載
    使用51單片機進行<b class='flag-5'>PS2</b><b class='flag-5'>鍵盤</b>解碼實驗的C語言<b class='flag-5'>程序</b>免費下載
    主站蜘蛛池模板: 1024手机在线看 | 亚洲成年人免费网站 | 操操操干干 | 精品国产三级a∨在线 | 五月天六月丁香 | 久久草在线视频播放 | 黄色录像三级 | 亚洲好骚综合 | 欧美人与性另类 | 性天堂网 | 国产情侣真实露脸在线最新 | 国产成人a一区二区 | 色视频免费观看高清完整 | 亚洲一区二区福利视频 | 欧美成人亚洲欧美成人 | 久久免费视频2 | 综合精品| 黄网站色视频免费观看 | 黄色成人免费观看 | 欧美午夜片 | 女人张开腿让男人桶免费网站 | 欧美三级大片在线观看 | 欧美成人看片一区二区三区 | 欧美456| 国产精品免费看久久久香蕉 | 午夜三级视频 | 精品噜噜噜噜久久久久久久久 | www夜夜操com | 亚洲丰满熟妇毛片在线播放 | 亚洲色图25p | 日本三黄色大 | 久久久国产在线 | 天堂bt| 免费国产成高清人在线视频 | 欧美刺激午夜性久久久久久久 | 天天综合色网 | 奇米影视777狠狠狠888不卡 | 亚洲成成品网站有线 | 免费国产在线视频 | 亚洲国产精品综合久久网络 | 国产色秀视频在线观看 |