基于FPGA设计的7段数码管测试实验Verilog源码

/*
7段数码管测试实验:以动态扫描方式在8位数码管“同时”显示0--7
实验的目的是向用户介绍多个数码管动态显示的方法。
动态显示的方法是,按一定的频率轮流向各个数码管的COM端送出低电平,同时送出对应的数据给各段。
*/


module seg71(clk,rst,dataout,en);

input clk,rst;
output[7:0] dataout;
output[7:0] en;//COM使能输出
reg[7:0] dataout;//各段数据输出
reg[7:0] en;

reg[15:0] cnt_scan;//扫描频率计数器
reg[4:0] dataout_buf;

always@(posedge clk or negedge  rst)
begin
    if(!rst) begin
        cnt_scan<=0;
        
     end
    else begin
        cnt_scan<=cnt_scan+1;
        end
end

always @(cnt_scan)
begin
   case(cnt_scan[15:13])
       3'b000 :
          en = 8'b1111_1110;
       3'b001 :
          en = 8'b1111_1101;
       3'b010 :
          en = 8'b1111_1011;
       3'b011 :
          en = 8'b1111_0111;
       3'b100 :
          en = 8'b1110_1111;
       3'b101 :
          en = 8'b1101_1111;
       3'b110 :
          en = 8'b1011_1111;
       3'b111 :
          en = 8'b0111_1111;
       default :
          en = 8'b1111_1110;
    endcase
end

always@(en) //对应COM信号给出各段数据
begin
    case(en)
        8'b1111_1110:
            dataout_buf=0;
        8'b1111_1101:
            dataout_buf=1;
        8'b1111_1011:
            dataout_buf=2;
        8'b1111_0111:
            dataout_buf=3;    
        8'b1110_1111:
            dataout_buf=4;
        8'b1101_1111:
            dataout_buf=5;
        8'b1011_1111:
            dataout_buf=6;
        8'b0111_1111:
            dataout_buf=7;
        default: 
            dataout_buf=8;
     endcase
end

always@(dataout_buf)
begin
    case(dataout_buf)
        4'b0000:
            dataout=8'b0000_0011;
        4'b0001:
            dataout=8'b1001_1111;
        4'b0010:
            dataout=8'b0010_0101;
        4'b0011:
            dataout=8'b0000_1101;
        4'b0100:
            dataout=8'b1001_1001;
        4'b0101:
            dataout=8'b0100_1001;
        4'b0110:
            dataout=8'b0100_0001;
        4'b0111:
            dataout=8'b0001_1111;
        4'b1000:
            dataout=8'b0000_0001;
        4'b1001:
            dataout=8'b0001_1001;
        4'b1010:
            dataout=8'b0001_0001;
        4'b1011:
            dataout=8'b1100_0001;
        4'b1100:
            dataout=8'b0110_0011;
        4'b1101:
            dataout=8'b1000_0101;
        4'b1110:
            dataout=8'b0110_0001;
        4'b1111:
            dataout=8'b0111_0001;
     endcase
end

endmodule 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GJZGRB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值