创客 发表于 2014-4-6 21:38:23

矩阵按键的检测

怎么检测矩阵按键的按键值,而且让这个按键值保持在一个时钟周期啊

创客 发表于 2014-4-7 09:32:55

怎么还是没效果啊,按照你的要求,我在看RTL Viewer时,没有延时一个时钟周期啊

创客 发表于 2014-4-7 10:14:46

reg key_value_r;

always @(posedge clk or negedge rst_n)
begin
if (!rst_n)
   begin
      key_value_r <= 4'd0;
   end
else begin
if(key_mark==1'b1)
       begin
       case ({col_reg,row_reg})
          8'b1110_1110: key_value_r<=4'd0;                                             
          8'b1110_1101: key_value_r<=4'd1;
          8'b1110_1011: key_value_r<=4'd2;
          8'b1110_0111: key_value_r<=4'd3;
          
          8'b1101_1110: key_value_r<=4'd4;
          8'b1101_1101: key_value_r<=4'd5;
          8'b1101_1011: key_value_r<=4'd6;
          8'b1101_0111: key_value_r<=4'd7;

          8'b1011_1110: key_value_r<=4'd8;
          8'b1011_1101: key_value_r<=4'd9;
          8'b1011_1011: key_value_r<=4'd10;
          8'b1011_0111: key_value_r<=4'd11;

          8'b0111_1110: key_value_r<=4'd12;
          8'b0111_1101: key_value_r<=4'd13;
          8'b0111_1011: key_value_r<=4'd14;
          8'b0111_0111: key_value_r<=4'd15;
      default: key_value_r <= 4'd1;           
          endcase
    end
   end
end   

assign key_value = key_value_r;
//--------------------------------------------------------------------------------------//
reg    key_value_r_t;
reg    key_flag=16'b0;

always @(posedge clk)
   key_value_r_t<=key_value;
      
always @(posedge clk)
        if(key_value_r_t != key_value_r)
                case(key_value_r)
                8'd0:key_flag<=1'b1;
                8'd1:key_flag<=1'b1;
                8'd2:key_flag<=1'b1;
                8'd3:key_flag<=1'b1;
                8'd4:key_flag<=1'b1;
                8'd5:key_flag<=1'b1;
                8'd6:key_flag<=1'b1;
                8'd7:key_flag<=1'b1;
                8'd8:key_flag<=1'b1;
                8'd9:key_flag<=1'b1;
                8'd10:key_flag<=1'b1;
                8'd11:key_flag<=1'b1;
                8'd12:key_flag<=1'b1;
                8'd13:key_flag<=1'b1;
                8'd14:key_flag<=1'b1;
                8'd15:key_flag<=1'b1;
                endcase
      else
      begin
         key_flag <= 16'b0;
      end   

assign key_sig = key_flag;
你说的比较两拍的数值发生变化,这个意思我懂,可效果没实现额,是代码出问题了吗

创客 发表于 2014-4-8 15:54:26

这是一份LCD的PDF文档

创客 发表于 2014-4-8 20:14:44

后面是我51单片机开发板对应的参考资料
页: [1]
查看完整版本: 矩阵按键的检测