奋斗的小孩 发表于 2016-7-13 16:21:59

键盘扫描代码

module key_board (clk, rst_n, row, col, data, valid, clk_1k);

        input clk;
        input rst_n;
        input row;
       
        output reg col;
        output reg data;
        output reg valid;
        output reg clk_1k;

        reg cnt;
       
        parameter T1ms = 24999;
       
        always @ (posedge clk or negedge rst_n)
                begin
                        if (!rst_n)
                                begin
                                        clk_1k <= 1'b1;
                                        cnt <= 15'd0;
                                end
                        else
                                begin
                                        if (cnt < T1ms)
                                                begin
                                                        cnt <= cnt + 15'd1;
                                                end
                                        else
                                                begin
                                                        cnt <= 15'd0;
                                                        clk_1k <= ~clk_1k;
                                                end
                                end       
                end

        reg row_col;
        reg state;
        reg count;
       
        always @ (posedge clk_1k or negedge rst_n)
                begin
                        if (!rst_n)
                                begin
                                        col <= 4'b0000;
                                        row_col <= 8'd0;
                                        state <= 0;
                                        valid <= 0;
                                        count <= 0;
                                end
                        else
                                begin
                                        case (state)
                                                0 : begin
                                                                if (row == 4'b1111)
                                                                        begin
                                                                                col <= 4'b0000;
                                                                        end
                                                                else
                                                                        begin
                                                                                state <= 1;
                                                                        end
                                                        end
                                               
                                                1 : begin
                                                                if (row == 4'b1111)
                                                                        begin
                                                                                state <= 0;
                                                                                count <= 0;
                                                                        end
                                                                else
                                                                        begin
                                                                                if (count < 19)
                                                                                        begin
                                                                                                count <= count + 1;
                                                                                        end
                                                                                else
                                                                                        begin
                                                                                                count <= 0;
                                                                                                state <= 2;
                                                                                                col <= 4'b0111;
                                                                                        end
                                                                        end       
                                                        end
                                                       
                                                2 : begin
                                                                if (row == 4'b1111)
                                                                        begin
                                                                                col <= {col,col};
                                                                                state <= 2;
                                                                        end
                                                                else
                                                                        begin
                                                                                row_col <= {row,col};
                                                                                state <= 3;
                                                                                valid <= 1;
                                                                        end
                                                        end
                                                       
                                                3 : begin
                                                                if (row == 4'b1111)
                                                                        begin
                                                                                state <= 0;
                                                                                valid <= 0;
                                                                        end
                                                                else
                                                                        begin
                                                                                valid <= 0;
                                                                                state <= 3;
                                                                        end
                                                        end
                                               
                                                       
                                                default : state <= 0;
                                               
                                        endcase
                                end
                end       

        always @ (*)
                begin
                        case (row_col)
                                8'b0111_0111 : data = 4'hf;
                                8'b0111_1011 : data = 4'he;
                                8'b0111_1101 : data = 4'hd;
                                8'b0111_1110 : data = 4'hc;
                               
                                8'b1011_0111 : data = 4'hb;
                                8'b1011_1011 : data = 4'ha;
                                8'b1011_1101 : data = 4'h9;
                                8'b1011_1110 : data = 4'h8;
                               
                                8'b1101_0111 : data = 4'h7;
                                8'b1101_1011 : data = 4'h6;
                                8'b1101_1101 : data = 4'h5;
                                8'b1101_1110 : data = 4'h4;
                               
                                8'b1110_0111 : data = 4'h3;
                                8'b1110_1011 : data = 4'h2;
                                8'b1110_1101 : data = 4'h1;
                                8'b1110_1110 : data = 4'h0;
                               
                                default : data = 4'h0;
                        endcase
                end


endmodule

奋斗的小孩 发表于 2016-7-13 16:22:30

欢迎留言······················至芯科技奋斗的小孩

4798345 发表于 2017-3-15 11:40:56

感谢楼主分享

fpga_feixiang 发表于 2017-3-15 12:33:49

很强大,很牛

fpga_wuhan 发表于 2017-3-23 16:20:25

键盘扫描代码

4798345 发表于 2017-3-23 16:58:54

键盘扫描代码

星坠天际 发表于 2017-3-24 08:54:28


键盘扫描代码

南烟的北木 发表于 2017-3-26 11:32:11

很强势,必须支持一波。

大鹏 发表于 2017-3-26 17:22:19

厉害呀,我的楼主!

fpga_feixiang 发表于 2017-3-27 14:21:25

这个程序写的NB
页: [1] 2
查看完整版本: 键盘扫描代码