集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1037|回复: 4

矩阵按键的检测

[复制链接]
创客 发表于 2014-4-6 21:38:23 | 显示全部楼层 |阅读模式
怎么检测矩阵按键的按键值,而且让这个按键值保持在一个时钟周期啊
 楼主| 创客 发表于 2014-4-7 09:32:55 | 显示全部楼层
怎么还是没效果啊,按照你的要求,我在看RTL Viewer时,没有延时一个时钟周期啊
 楼主| 创客 发表于 2014-4-7 10:14:46 | 显示全部楼层
reg [3:0] 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    [3:0]  key_value_r_t;
reg    [15:0] 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[0]<=1'b1;
                8'd1:key_flag[1]<=1'b1;
                8'd2:key_flag[2]<=1'b1;
                8'd3:key_flag[3]<=1'b1;
                8'd4:key_flag[4]<=1'b1;
                8'd5:key_flag[5]<=1'b1;
                8'd6:key_flag[6]<=1'b1;
                8'd7:key_flag[7]<=1'b1;
                8'd8:key_flag[8]<=1'b1;
                8'd9:key_flag[9]<=1'b1;
                8'd10:key_flag[10]<=1'b1;
                8'd11:key_flag[11]<=1'b1;
                8'd12:key_flag[12]<=1'b1;
                8'd13:key_flag[13]<=1'b1;
                8'd14:key_flag[14]<=1'b1;
                8'd15:key_flag[15]<=1'b1;
                endcase
        else
        begin
           key_flag[15:0] <= 16'b0;
        end   

assign key_sig = key_flag;
你说的比较两拍的数值发生变化,这个意思我懂,可效果没实现额,是代码出问题了吗
 楼主| 创客 发表于 2014-4-8 15:54:26 | 显示全部楼层
这是一份LCD的PDF文档

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 创客 发表于 2014-4-8 20:14:44 | 显示全部楼层
后面是我51单片机开发板对应的参考资料

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-7 05:33 , Processed in 0.070989 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表