数码管显示

输入数据可以自己改变

module SmgDisplay(
    input       clk,
    input       rst_n,  

    input      [3:0] shang_jia,
    input      [5:0] value_jin_all,

    output reg [2:0] smgWei,
    output reg [6:0] smgDuan     //7段数码管,没算小数点
);

parameter WEI_SCAN_COUNT = 20'd1; //位选扫描的常量,定义10MS需要计数500_000,这里仿真只是使用1个周期代替,实际的时候自行修改

reg [19:0] wei_scan_count;           //仿真查看延时计数值
reg [3:0]  smgData;

//动态扫描选择输出位的计数
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
    begin
        wei_scan_count <= 'd0;
    end
    else
    begin
        if(wei_scan_count == WEI_SCAN_COUNT)
            wei_scan_count <= 'd0;
        else 
            wei_scan_count <= wei_scan_count + 'd1;
    end
end

//动态扫描选择输出位的计数到了后换下一个位显示
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
    begin
        smgWei <= 'd0;
    end
    else
    begin
        if(wei_scan_count == WEI_SCAN_COUNT)
            smgWei <= smgWei + 'd1;
        else 
            smgWei <= smgWei;
    end
end

//设置每个位的实际数据
always@(*)
begin
    case (smgWei)
          3'b0000 : smgData <= shang_jia; //0号数码管,显示商品价格
        3'b0001 : smgData <= 'd0;       //1号数码管
        3'b0010 : smgData <= 'd0;       //2号数码管
        3'b0011 : smgData <= 'd0;       //3号数码管
        3'b0100 : smgData <= value_jin_all%10;       //4号数码管  显示投入总价的个位      
        3'b0101 : smgData <= value_jin_all/10;       //5号数码管  显示投入总价的十位
        3'b0110 : smgData <= 'd0;       //6号数码管
        3'b0111 : smgData <= 'd0;       //7号数码管
          default : smgData <= 'd0;       //0号数码管 
    endcase
end

//设置数据显示段码
always@(*)
begin
    case (smgData)
          4'b0000 : smgDuan <= 7'h3f; //0
        4'b0001 : smgDuan <= 7'h06; //1
        4'b0010 : smgDuan <= 7'h5b; //2
        4'b0011 : smgDuan <= 7'h4f; //3
        4'b0100 : smgDuan <= 7'h66; //4       
        4'b0101 : smgDuan <= 7'h6d; //5
        4'b0110 : smgDuan <= 7'h7d; //6
        4'b0111 : smgDuan <= 7'h07; //7
        4'b1000 : smgDuan <= 7'h7f; //8
        4'b1001 : smgDuan <= 7'h6f; //9
        4'b1010 : smgDuan <= 7'h77; //A
        4'b1011 : smgDuan <= 7'h7c; //B
        4'b1100 : smgDuan <= 7'h39; //C
        4'b1101 : smgDuan <= 7'h5e; //D
        4'b1110 : smgDuan <= 7'h79; //E
        4'b1111 : smgDuan <= 7'h71; //F
          default : smgDuan <= 7'h3f; //0 
    endcase
end


endmodule