首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

分享一个FPGA (verilog) 小键盘 扫描程序

分享一个FPGA (verilog) 小键盘 扫描程序

电脑键盘的小键盘 主要有 0到9 及加、减、乘、除 NUMLOCK del ENTER 组成
其构成为6*4键盘:verilog程序如下:
module key(clk,cpld_e,led,key_hang,key_lie);input clk;input [5:0] key_hang;//行输入 6行output [3:0] key_lie;//列输出 4列output [1:0] cpld_e;output [15:0] led;reg [3:0] key_lie;reg [15:0] led;//8位8段共阴极数码管assign cpld_e=2'b01;reg [6:0] cnt;reg clk_out;reg [2:0] state = 3'b000;reg [9:0] key_value;reg key_flag;
always @(posedge clk) begin//分频 100M输入 分频后约为10MS   if(cnt==7'b1000000) begin    clk_out<=~clk_out;    cnt<=0;    end   else    cnt<=cnt+1;end
   always @(posedge clk_out) begin       case (state)     0: begin      key_lie[3:0]<=4'b0000;      key_flag=0;      if(key_hang !=6'b111111) begin state=1;key_lie[3:0]<=4'b1110;end//判断是否有键按下 及列赋值      else state=0;       end     1:begin       if(key_hang !=6'b111111) begin state=5; end      else begin state=2; key_lie[3:0]<=4'b1101; end     end     2:begin      if(key_hang !=6'b111111) begin state=5; end      else begin state=3; key_lie[3:0]<=4'b1011; end     end     3:begin      if(key_hang !=6'b111111) begin state=5; end      else begin state=4; key_lie[3:0]<=4'b0111; end     end     4:begin      if(key_hang !=6'b111111) begin state=5; end      else state=0;     end     5:begin       key_value[9:0]<={key_hang,key_lie};       key_flag=1;       state=0;     end     endcase   end     always @(clk_out or key_hang or key_lie) begin    if(key_flag==1)      case (key_value)        10'b1111101011: led[15:0]<=16'h7f3f;//0        10'b0111110111: led[15:0]<=16'hbf06;//1        10'b0111111011: led[15:0]<=16'hdf5b;//2        10'b0111111101: led[15:0]<=16'hef4f;//3        10'b1011110111: led[15:0]<=16'hf766;//4        10'b1011111011: led[15:0]<=16'hfb6d;//5        10'b1011111101: led[15:0]<=16'hfe7d;//6        10'b1101110111: led[15:0]<=16'hfd07;//7        10'b1101111011: led[15:0]<=16'h7f7f;//8        10'b1101111101: led[15:0]<=16'h7f6f;//9             10'b1111101101: led[15:0]<=16'hef80;//.        10'b1101111110: led[15:0]<=16'hf746;//+        10'b1111011101: led[15:0]<=16'hfb40;//-        10'b1110111101: led[15:0]<=16'hfe76;//*        10'b1110111011: led[15:0]<=16'hfd52;///        10'b1110110111: led[15:0]<=16'h7f38;//Num      10'b0111111110: led[15:0]<=16'h7f79;//Enter      default: led[15:0]<=16'h0000;     endcase   end
endmodule
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表