FPGA矩阵键盘的扫描方法

来源:互联网 发布:店长宝软件多少钱 编辑:程序博客网 时间:2024/06/04 18:16
module keyscan(kbrow,seg7_out,scan,clk,start,kbcol);
output [3:0]kbrow;                      //列扫描信号
output [6:0] seg7_out;
output [7:0] scan;
input clk,start;
input [3:0] kbcol;
reg [3:0] kbrow;
reg [6:0] seg7_out;
reg [7:0] scan;
reg [1:0] count;
reg [1:0] sta;
reg [6:0] seg7;
reg [4:0] dat;
regfn;      //按键标志位,判断是否有键被按下
initialscan<='b10000000;              //只使用一个数码管显示
always@(posedgeclk)                  //循环扫描计数器
begin
if(start==0)
  begin seg7<='b0000000;end
else
  begin
   count<=count+1;
   case(count)                      //循环列扫描
    2'b00: beginkbrow<='b0001;sta<='b00;end
    2'b01: beginkbrow<='b0010;sta<='b01;end
    2'b10: beginkbrow<='b0100;sta<='b10;end
    2'b11: beginkbrow<='b1000;sta<='b11;end
   endcase
   case(sta)                       //行扫描译码
    2'b00:begin
          case(kbcol)
          4'b0001: beginseg7<='b1111001;dat<='b00011;end
          4'b0010: beginseg7<='b1101101;dat<='b00010;end
          4'b0100: beginseg7<='b0110000;dat<='b00001;end
          4'b1000: beginseg7<='b1111110;dat<='b00000;end
          default: beginseg7<='b0000000;dat<='b11111;end
          endcase
          end
   2'b01:begin
         case(kbcol)
         4'b0001: beginseg7<='b1110000;dat<='b00111;end
         4'b0010: beginseg7<='b1011111;dat<='b00110;end
         4'b0100: beginseg7<='b1011011;dat<='b00101;end
         4'b1000: beginseg7<='b0110011;dat<='b00100;end
         default: beginseg7<='b0000000;dat<='b11111;end
         endcase
         end
   2'b10:begin
         case(kbcol)
         4'b0001: beginseg7<='b0011111;dat<='b01011;end
         4'b0010: beginseg7<='b1110111;dat<='b01010;end
         4'b0100: beginseg7<='b1111011;dat<='b01001;end
         4'b1000: beginseg7<='b1111111;dat<='b01000;end
         default: beginseg7<='b0000000;dat<='b11111;end
         endcase
         end
   2'b11:begin
         case(kbcol)
         4'b0001: beginseg7<='b1000111;dat<='b01111;end
         4'b0010: beginseg7<='b1001111;dat<='b01110;end
         4'b0100: beginseg7<='b0111101;dat<='b01101;end
         4'b1000: beginseg7<='b1001110;dat<='b01100;end
         default: beginseg7<='b0000000;dat<='b11111;end
         endcase
         end
    default:seg7<='b0000000;
   endcase                
  end
end
always
  beginfn<=~(dat[0]&dat[1]&dat[2]&dat[3]&dat[4]);end//产生按键标志位,用于存储按键信息
always@(posedgefn)     //按键信息存储
  begin seg7_out<=seg7;end
endmodule

 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 安吉星流量超了怎么办 网络被伪基站覆盖怎么办 骨头渣子卡嗓子里怎么办 执法仪记录仪关不了机怎么办 执法记录仪开不了机怎么办 华为警务通丢了怎么办 华德安执法记录仪死机怎么办 行车仪内存满了怎么办 海康威视摄像头没有通道怎么办 电脑屏膜变大了怎么办 手机2g模块坏了怎么办 腾讯大王卡是2g怎么办 华为手机4g坏了怎么办 优盘中毒打不开怎么办 vr头戴链接不起怎么办 人在缺氧的时候怎么办 脑缺氧供血不足怎么办 睡多了大脑缺氧怎么办 吃了过期的东西怎么办 吃了过期的牛肉怎么办 生存战争肉腐烂了怎么办? 家里进了蝙蝠找不到了怎么办 方舟手游恐龙找不到了怎么办 这是我的战争怎么办 小孩吃坏东西呕吐发烧怎么办 睿芽密码忘了怎么办 做绿豆糕太稀了怎么办 自热火锅吃完后怎么办 自煮火锅吃完了怎么办 自热火锅没熟怎么办 厕所被米饭堵了怎么办 减完肥肉特别松怎么办 新开的熟食店没人光顾怎么办 吃剩的软炸里脊怎么办 小火锅加热时胀盒该怎么办 天丝面料容易皱怎么办 快递员拒不送件怎么办 鞋店里面买到假鞋子了怎么办 孕吐伤了胃疼怎么办 孕期吐的胃疼怎么办 买的巧克力化了怎么办