微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 明德扬至简设计法--分享一份实现矩阵键盘的verilog代码 可直接使用

明德扬至简设计法--分享一份实现矩阵键盘的verilog代码 可直接使用

时间:02-21 来源:互联网 点击:

  1. key_col_ff1 <= 4'b1111;
  2.     end
  3.     else begin
  4.         key_col_ff0 <= key_col    ;
  5.         key_col_ff1 <= key_col_ff0;
  6.     end
  7. end


  8. always  @(posedge clk or negedge rst_n)begin
  9.     if(rst_n==1'b0)begin
  10.         shake_cnt <= 0;
  11.     end
  12.     else if(add_shake_cnt)begin
  13.         if(end_shake_cnt)
  14.             shake_cnt <= 0;
  15.         else
  16.             shake_cnt <= shake_cnt + 1;
  17.     end
  18.     else begin
  19.         shake_cnt <= 0;
  20.     end
  21. end

  22. assign  add_shake_cnt = key_col_ff1!=4'hf && shake_flag==0;
  23. assign  end_shake_cnt = add_shake_cnt && shake_cnt==TIME_20MS-1;

  24. always  @(posedge clk or negedge rst_n)begin
  25.     if(rst_n==1'b0)begin
  26.         shake_flag <= 0;
  27.     end
  28.     else if(end_shake_cnt) begin
  29.         shake_flag <= 1'b1;
  30.     end
  31.     else if(key_col_ff1==4'hf) begin
  32.         shake_flag <= 1'b0;
  33.     end
  34. end


  35. `ifdef SCAN
  36. always  @(posedge clk or negedge rst_n)begin
  37.     if(rst_n==1'b0)begin
  38.         state_c <= COL;
  39.     end
  40.     else begin
  41.         state_c <= state_n;
  42.     end
  43. end



  44. always  @(*)begin
  45.     case(state_c)
  46.         COL: begin
  47.                      if(col2row_start)begin
  48.                          state_n = ROW;
  49.                      end
  50.                      else begin
  51.                          state_n = state_c;
  52.                      end
  53.                  end
  54.         ROW: begin
  55.                      if(row2dly_start)begin
  56.                          state_n = DLY;
  57.                      end
  58.                      else begin
  59.                          state_n = state_c;
  60.                      end
  61.                  end
  62.         DLY :  begin
  63.                      if(dly2fin_start)begin
  64.                          state_n = FIN;
  65.                      end

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top