微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Verilog按键控制数码管代码求助

Verilog按键控制数码管代码求助

时间:10-02 整理:3721RD 点击:

  1. module key_led(key_add, key_sub, Rst_n, out_sel, out_bit);

  2.         input key_add;
  3.         input key_sub;
  4.         input Rst_n;
  5.         output [5:0]out_sel;
  6.         output [7:0]out_bit;
  7.         
  8.         reg [5:0]out_sel;     //数码管段控制
  9.         reg [7:0]out_bit;     //数码管位控制
  10.         reg [3:0]counter;
  11.         
  12.         always@(negedge key_add or negedge key_sub or negedge Rst_n)
  13.                 begin
  14.                         if (Rst_n == 0)
  15.                                 counter =999)
                                            dataclk<=0;
                                    else
                                            dataclk<=dataclk+1;
                            end
                            else if(key_flag&&(key_value==2'b10 ))
                            begin
                                    if(dataclk<=0)
                                            dataclk<=999;
                                    else
                                            dataclk<=dataclk-1;
                            end
                            else
                                    dataclk<=dataclk;
                    end
    end

    //--------------数码管位选---------------------
    always@(posedge clk or negedge rst_n)
    begin
    if(!rst_n)
                            begin
                                    segw<=4'b1111;
                            end
            else
            begin
      if(cnt[13:12]==2'b00)
         begin
                            segw<=4'b0111;data<=dataclk/100;
         end
      else if(cnt[13:12]==2'b01)
         begin
                            segw<=4'b1011;data<=dataclk%100/10;
         end
    else if(cnt[13:12]==2'b10)
         begin
                            segw<=4'b1101;data<=dataclk%100%10;
         end
    end
    end

    //---------------数码管段码--------------------
    always@(posedge clk or negedge rst_n)
    begin
    if(!rst_n)
                            begin
                            seg<=8'b1111_1111;
                            end
            else
            begin
       case(data)
              4'd0:seg<=8'b0000_0011;
              4'd1:seg<=8'b1001_1111;
              4'd2:seg<=8'b0010_0101;
              4'd3:seg<=8'b0000_1101;
              4'd4:seg<=8'b1001_1001;
              4'd5:seg<=8'b0100_1001;
              4'd6:seg<=8'b0100_0001;
              4'd7:seg<=8'b0001_1111;
              4'd8:seg<=8'b0000_0001;
              4'd9:seg<=8'b0000_1001;
              default:seg<=8'b1111_1111;
       endcase
      end
    end
    endmodule
    //以上代码仅供参考,数码管的段码按照实际情况修改

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

网站地图

Top