新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > verilog PS2鍵盤解碼源程序

        verilog PS2鍵盤解碼源程序

        作者: 時間:2012-01-06 來源:網絡 收藏

        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; //松鍵標志位,置1表示接收到數據8'hf0,再接收到下一個數據后清零
        reg ps2_state_r; //當前狀態,ps2_state_r=1表示有鍵被按下
        always @ (posedge clk or negedge rst_n) begin //接收數據的相應處理,這里只對1byte的鍵值進行處理
        if(!rst_n) begin
        key_f0 = 1'b0;
        ps2_state_r = 1'b0;
        end
        else if(num==4'd10) begin //剛傳送完一個字節數據
        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; //鎖存當前鍵值
        end
        else begin
        ps2_state_r = 1'b0;
        key_f0 = 1'b0;
        end
        end
        end
        end
        reg[7:0] ps2_asci; //接收數據的相應ASCII碼
        always @ (ps2_byte_r) begin
        case (ps2_byte_r) //鍵值轉換為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: ;
        endcase
        end
        assign ps2_byte = ps2_asci;
        assign ps2_state = ps2_state_r;
        endmodule

        本文引用地址:http://www.104case.com/article/172250.htm

        DIY機械鍵盤相關社區:機械鍵盤DIY



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 禹州市| 双流县| 咸丰县| 鄢陵县| 临夏县| 侯马市| 汶上县| 小金县| 沾化县| 彭泽县| 桦甸市| 特克斯县| 威远县| 获嘉县| 库车县| 平江县| 永昌县| 石门县| 罗甸县| 安达市| 陆丰市| 凤翔县| 淮北市| 咸宁市| 和硕县| 临洮县| 板桥市| 张掖市| 新乐市| 昌黎县| 平谷区| 桦川县| 武清区| 平山县| 元阳县| 三明市| 怀来县| 武宣县| 永年县| 思茅市| 休宁县|