找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1618|回复: 0
打印 上一主题 下一主题
收起左侧

FPGA按键控制消抖控制led灯

[复制链接]
跳转到指定楼层
楼主
ID:832896 发表于 2021-3-26 22:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. module an0(led,clk,key1,rst_n,key2,key3);
  2.     input clk;
  3.     input rst_n;
  4.     input key1;
  5.     input key2;
  6.     input key3;
  7.     output reg[7:0] led;
  8. /*
  9. 该项目达到实现按键控制led灯的目的,具有按键消抖的功能。
  10. */
  11. reg Dkey;
  12. always@(posedge clk)
  13. begin

  14.         Dkey<=key1;

  15. end
  16. reg[30:1] keycnt;
  17. always@(posedge clk or negedge rst_n)
  18. begin
  19.        
  20.         if(rst_n!=1)    keycnt<=30'd0;
  21.         else if({Dkey,key1}==2'b00)  keycnt<={keycnt<30'd12_0000}?keycnt+16'd1:30'd12_0000;
  22.         else keycnt<=30'd0;
  23.        
  24. end
  25. reg[7:0]  modu;
  26. always@(posedge clk or negedge rst_n)
  27. begin

  28.         if(rst_n!=1)   //按键key2复位
  29.     modu<=8'd0;
  30.         else if(keycnt==30'd11_9998) //按键key1给led灯加1
  31.         modu<=modu+8'd1;
  32.         else if(keycnt1==30'd11_9997) //按键key3给led灯取反
  33.         modu<=~modu;
  34.         else if(keycnt2==30'd11_9994)//按键key4减led灯
  35.         modu<=modu-8'd1;
  36.         else
  37.         modu<=modu;
  38. end

  39. always@(posedge clk)
  40. begin
  41. case(modu)
  42.     8'd0:led<=8'd0;
  43.     8'd1:led<=8'd1;
  44.     8'd2:led<=8'd2;
  45.     8'd3:led<=8'd3;
  46.     8'd4:led<=8'd4;
  47.     8'd5:led<=8'd5;
  48.     8'd6:led<=8'd6;
  49.     8'd7:led<=8'd7;
  50.     8'd8:led<=8'd8;
  51.     8'd9:led<=8'd9;
  52.     8'd10:led<=8'd10;
  53.     8'd11:led<=8'd11;
  54.     8'd12:led<=8'd12;
  55.     8'd13:led<=8'd13;
  56.     8'd14:led<=8'd14;
  57.     8'd15:led<=8'd15;
  58.     8'd16:led<=8'd16;
  59.     8'd17:led<=8'd17;
  60.     8'd18:led<=8'd18;
  61.     8'd19:led<=8'd19;
  62.     8'd20:led<=8'd20;
  63.     8'd21:led<=8'd21;
  64.     8'd22:led<=8'd22;
  65.     8'd23:led<=8'd23;
  66.     8'd24:led<=8'd24;
  67.     8'd25:led<=8'd25;
  68.     8'd26:led<=8'd26;
  69.     8'd27:led<=8'd27;
  70.     8'd28:led<=8'd28;
  71.     8'd29:led<=8'd29;
  72.     8'd30:led<=8'd30;
  73.     8'd31:led<=8'd31;
  74.     8'd32:led<=8'd32;
  75.     8'd33:led<=8'd33;
  76.     8'd34:led<=8'd34;
  77.     8'd35:led<=8'd35;
  78.     8'd36:led<=8'd36;
  79.     8'd37:led<=8'd37;
  80.     8'd38:led<=8'd38;
  81.     8'd39:led<=8'd39;
  82.     8'd40:led<=8'd40;
  83.     8'd41:led<=8'd41;
  84.     8'd42:led<=8'd42;
  85.     8'd43:led<=8'd43;
  86.     8'd44:led<=8'd44;
  87.     8'd45:led<=8'd45;
  88.     8'd46:led<=8'd46;
  89.     8'd47:led<=8'd47;
  90.     8'd48:led<=8'd48;
  91.     8'd49:led<=8'd49;
  92.     8'd50:led<=8'd50;
  93.     8'd51:led<=8'd51;
  94.     8'd52:led<=8'd52;
  95.     8'd53:led<=8'd53;
  96.     8'd54:led<=8'd54;
  97.     8'd55:led<=8'd55;
  98.     8'd56:led<=8'd56;
  99.     8'd57:led<=8'd57;
  100.     8'd58:led<=8'd58;
  101.     8'd59:led<=8'd59;
  102.     8'd60:led<=8'd60;
  103.     8'd61:led<=8'd61;
  104.     8'd62:led<=8'd62;
  105.     8'd63:led<=8'd63;
  106.     8'd64:led<=8'd64;
  107.     8'd65:led<=8'd65;
  108.     8'd66:led<=8'd66;
  109.     8'd67:led<=8'd67;
  110.     8'd68:led<=8'd68;
  111.     8'd69:led<=8'd69;
  112.     8'd70:led<=8'd70;
  113.     8'd71:led<=8'd71;
  114.     8'd72:led<=8'd72;
  115.     8'd73:led<=8'd73;
  116.     8'd74:led<=8'd74;
  117.     8'd75:led<=8'd75;
  118.     8'd76:led<=8'd76;
  119.     8'd77:led<=8'd77;
  120.     8'd78:led<=8'd78;
  121.     8'd79:led<=8'd79;
  122.     8'd80:led<=8'd80;
  123.     8'd81:led<=8'd81;
  124.     8'd82:led<=8'd82;
  125.     8'd83:led<=8'd83;
  126.     8'd84:led<=8'd84;
  127.     8'd85:led<=8'd85;
  128.     8'd86:led<=8'd86;
  129.     8'd87:led<=8'd87;
  130.     8'd88:led<=8'd88;
  131.     8'd89:led<=8'd89;
  132.     8'd90:led<=8'd90;
  133.     8'd91:led<=8'd91;
  134.     8'd92:led<=8'd92;
  135.     8'd93:led<=8'd93;
  136.     8'd94:led<=8'd94;
  137.     8'd95:led<=8'd95;
  138.     8'd96:led<=8'd96;
  139.     8'd97:led<=8'd97;
  140.     8'd98:led<=8'd98;
  141.     8'd99:led<=8'd99;
  142.     8'd100:led<=8'd100;
  143.     8'd101:led<=8'd101;
  144.     8'd102:led<=8'd102;
  145.     8'd103:led<=8'd103;
  146.     8'd104:led<=8'd104;
  147.     8'd105:led<=8'd105;
  148.     8'd106:led<=8'd106;
  149.     8'd107:led<=8'd107;
  150.     8'd108:led<=8'd108;
  151.     8'd109:led<=8'd109;
  152.     8'd110:led<=8'd110;
  153.     8'd111:led<=8'd111;
  154.     8'd112:led<=8'd112;
  155.     8'd113:led<=8'd113;
  156.     8'd114:led<=8'd114;
  157.     8'd115:led<=8'd115;
  158.     8'd116:led<=8'd116;
  159.     8'd117:led<=8'd117;
  160.     8'd118:led<=8'd118;
  161.     8'd119:led<=8'd119;
  162.     8'd120:led<=8'd120;
  163.     8'd121:led<=8'd121;
  164.     8'd122:led<=8'd122;
  165.     8'd123:led<=8'd123;
  166.     8'd124:led<=8'd124;
  167.     8'd125:led<=8'd125;
  168.     8'd126:led<=8'd126;
  169.     8'd127:led<=8'd127;
  170.     8'd128:led<=8'd128;
  171.     8'd129:led<=8'd129;
  172.     8'd130:led<=8'd130;
  173.     8'd131:led<=8'd131;
  174.     8'd132:led<=8'd132;
  175.     8'd133:led<=8'd133;
  176.     8'd134:led<=8'd134;
  177.     8'd135:led<=8'd135;
  178.     8'd136:led<=8'd136;
  179.     8'd137:led<=8'd137;
  180.     8'd138:led<=8'd138;
  181.     8'd139:led<=8'd139;
  182.     8'd140:led<=8'd140;
  183.     8'd141:led<=8'd141;
  184.     8'd142:led<=8'd142;
  185.     8'd143:led<=8'd143;
  186.     8'd144:led<=8'd144;
  187.     8'd145:led<=8'd145;
  188.     8'd146:led<=8'd146;
  189.     8'd147:led<=8'd147;
  190.     8'd148:led<=8'd148;
  191.     8'd149:led<=8'd149;
  192.     8'd150:led<=8'd150;
  193.     8'd151:led<=8'd151;
  194.     8'd152:led<=8'd152;
  195.     8'd153:led<=8'd153;
  196.     8'd154:led<=8'd154;
  197.     8'd155:led<=8'd155;
  198.     8'd156:led<=8'd156;
  199.     8'd157:led<=8'd157;
  200.     8'd158:led<=8'd158;
  201.     8'd159:led<=8'd159;
  202.     8'd160:led<=8'd160;
  203.     8'd161:led<=8'd161;
  204.     8'd162:led<=8'd162;
  205.     8'd163:led<=8'd163;
  206.     8'd164:led<=8'd164;
  207.     8'd165:led<=8'd165;
  208.     8'd166:led<=8'd166;
  209.     8'd167:led<=8'd167;
  210.     8'd168:led<=8'd168;
  211.     8'd169:led<=8'd169;
  212.     8'd170:led<=8'd170;
  213.     8'd171:led<=8'd171;
  214.     8'd172:led<=8'd172;
  215.     8'd173:led<=8'd173;
  216.     8'd174:led<=8'd174;
  217.     8'd175:led<=8'd175;
  218.     8'd176:led<=8'd176;
  219.     8'd177:led<=8'd177;
  220.     8'd178:led<=8'd178;
  221.     8'd179:led<=8'd179;
  222.     8'd180:led<=8'd180;
  223.     8'd181:led<=8'd181;
  224.     8'd182:led<=8'd182;
  225.     8'd183:led<=8'd183;
  226.     8'd184:led<=8'd184;
  227.     8'd185:led<=8'd185;
  228.     8'd186:led<=8'd186;
  229.     8'd187:led<=8'd187;
  230.     8'd188:led<=8'd188;
  231.     8'd189:led<=8'd189;
  232.     8'd190:led<=8'd190;
  233.     8'd191:led<=8'd191;
  234.     8'd192:led<=8'd192;
  235.     8'd193:led<=8'd193;
  236.     8'd194:led<=8'd194;
  237.     8'd195:led<=8'd195;
  238.     8'd196:led<=8'd196;
  239.     8'd197:led<=8'd197;
  240.     8'd198:led<=8'd198;
  241.     8'd199:led<=8'd199;
  242.     8'd200:led<=8'd200;
  243.     8'd201:led<=8'd201;
  244.     8'd202:led<=8'd202;
  245.     8'd203:led<=8'd203;
  246.     8'd204:led<=8'd204;
  247.     8'd205:led<=8'd205;
  248.     8'd206:led<=8'd206;
  249.     8'd207:led<=8'd207;
  250.     8'd208:led<=8'd208;
  251.     8'd209:led<=8'd209;
  252.     8'd210:led<=8'd210;
  253.     8'd211:led<=8'd211;
  254.     8'd212:led<=8'd212;
  255.     8'd213:led<=8'd213;
  256.     8'd214:led<=8'd214;
  257.     8'd215:led<=8'd215;
  258.     8'd216:led<=8'd216;
  259.     8'd217:led<=8'd217;
  260.     8'd218:led<=8'd218;
  261.     8'd219:led<=8'd219;
  262.     8'd220:led<=8'd220;
  263.     8'd221:led<=8'd221;
  264.     8'd222:led<=8'd222;
  265.     8'd223:led<=8'd223;
  266.     8'd224:led<=8'd224;
  267.     8'd225:led<=8'd225;
  268.     8'd226:led<=8'd226;
  269.     8'd227:led<=8'd227;
  270.     8'd228:led<=8'd228;
  271.     8'd229:led<=8'd229;
  272.     8'd230:led<=8'd230;
  273.     8'd231:led<=8'd231;
  274.     8'd232:led<=8'd232;
  275.     8'd233:led<=8'd233;
  276.     8'd234:led<=8'd234;
  277.     8'd235:led<=8'd235;
  278.     8'd236:led<=8'd236;
  279.     8'd237:led<=8'd237;
  280.     8'd238:led<=8'd238;
  281.     8'd239:led<=8'd239;
  282.     8'd240:led<=8'd240;
  283.     8'd241:led<=8'd241;
  284.     8'd242:led<=8'd242;
  285.     8'd243:led<=8'd243;
  286.     8'd244:led<=8'd244;
  287.     8'd245:led<=8'd245;
  288.     8'd246:led<=8'd246;
  289.     8'd247:led<=8'd247;
  290.     8'd248:led<=8'd248;
  291.     8'd249:led<=8'd249;
  292.     8'd250:led<=8'd250;
  293.     8'd251:led<=8'd251;
  294.     8'd252:led<=8'd252;
  295.     8'd253:led<=8'd253;
  296.     8'd254:led<=8'd254;
  297.     8'd255:led<=8'd255;
  298.     default:led<=8'b00001111;
  299. endcase

  300. end


  301. reg Dkey1;
  302. always@(posedge clk)
  303. begin

  304.         Dkey1<=key2;

  305. end
  306. reg [32:1] keycnt1;
  307. always@(posedge clk or negedge rst_n)
  308. begin
  309.     if(rst_n!=1)    keycnt1<=30'd0;
  310.     else if({Dkey1,key2}==2'b00)  keycnt1<={keycnt1<30'd12_0000}?keycnt1+16'd1:30'd12_0000;
  311.     else keycnt1<=30'd0;


  312. end


  313. reg Dkey2;
  314. always@(posedge clk)
  315. begin

  316.         Dkey2<=key3;

  317. end
  318. reg [32:1] keycnt2;
  319. always@(posedge clk or negedge rst_n)
  320.     begin
  321.         if(rst_n!=1)    keycnt2<=30'd0;
  322.         else if({Dkey2,key3}==2'b00)  keycnt2<={keycnt2<30'd12_0000}?keycnt2+16'd1:30'd12_0000;
  323.         else keycnt2<=30'd0;

  324.     end


  325. endmodule
复制代码
按键消抖如上诉代码注释所述
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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