设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 895|回复: 0
收起左侧

Quartus Verilog HDL/FPGA 驱动2片级联74HC595的4位动态扫描共阳数码管演示0~9999累加

[复制链接]
发表于 2022-9-23 15:52:36 | 显示全部楼层 |阅读模式
main.png
  1. module main(
  2.         input clk,                        //50Mhz Pin17
  3.         output reg SHCP,        //74HC595 Pin30 上升沿将DS数据移入内锁存器
  4.         output reg STCP,        //74HC595 Pin31 上升沿将内锁存器的数据转移到外锁存器
  5.         output reg DS                //74HC595 Pin32 移位频率:主时钟的1/4 (12.5Mhz)
  6. );

  7. reg [1:0] i;
  8. parameter hc595_num = 2;                                                //595级联数量:级联几片74HC595 这里就改成几
  9. parameter hc595_bit = hc595_num * 8 - 1;        //595位数:级联数量*8-1 (请勿修改)
  10. integer BitPC = 0;                                                                //595位指针 范围:0~595位数
  11. reg [0:hc595_bit] hc595_ram;                                        //595数据缓存容器 防止数据错乱 (从低到高位发送)
  12. reg [hc595_bit:0] hc595_dat;                                        //该寄存器的值被改变 将实时传送到595

  13. always @(posedge clk) begin                //74HC595驱动
  14.         SHCP <= ^i;
  15.         STCP <= ^(i - 2'b1) & !BitPC;
  16.         if(!i) begin
  17.                 if(!BitPC) begin
  18.                         hc595_ram = hc595_dat;
  19.                 end
  20.                 DS <= hc595_ram[BitPC];
  21.                 BitPC = BitPC + 1;
  22.                 if(BitPC > hc595_bit) begin
  23.                         BitPC = 0;
  24.                 end
  25.         end
  26.         i <= i + 2'b1;
  27. end

  28. reg [13:0] nbr = 0;                //数码管正在显示的数字 0~9999

  29. function [7:0] display;                        //16进制共阴数码管段码查询
  30.         input [3:0] hex;
  31.         begin
  32.         case(hex)
  33.                 4'h0:display = 8'h3F;
  34.                 4'h1:display = 8'h06;
  35.                 4'h2:display = 8'h5B;
  36.                 4'h3:display = 8'h4F;
  37.                 4'h4:display = 8'h66;
  38.                 4'h5:display = 8'h6D;
  39.                 4'h6:display = 8'h7D;
  40.                 4'h7:display = 8'h07;
  41.                 4'h8:display = 8'h7F;
  42.                 4'h9:display = 8'h6F;
  43.                 4'hA:display = 8'h77;
  44.                 4'hB:display = 8'h7C;
  45.                 4'hC:display = 8'h39;
  46.                 4'hD:display = 8'h5E;
  47.                 4'hE:display = 8'h79;
  48.                 4'hF:display = 8'h71;       
  49.         endcase
  50.         end
  51. endfunction

  52. reg [1:0] j = 0;
  53. always @(negedge STCP) begin                //数码管动态扫描
  54.         case(j)
  55.                 2'd0:hc595_dat[15:8] <= ~display(nbr % 10);
  56.                 2'd1:hc595_dat[15:8] <= ~display((nbr) / 10 %10);
  57.                 2'd2:hc595_dat[15:8] <= ~display((nbr) / 100 %10);
  58.                 2'd3:hc595_dat[15:8] <= ~display((nbr) / 1000 %10);
  59.         endcase
  60.         hc595_dat[7:4] <= 4'b0;
  61.         hc595_dat[3:0] <= (4'b1 << j);
  62.         j <= j + 2'b1;
  63. end

  64. integer k = 0;
  65. always @(posedge clk) begin                //数字0~9999累加
  66.         k = k + 1;
  67.         if(k >= 5000000) begin
  68.                 k = 0;
  69.                 nbr = nbr + 1'b1;
  70.                 if(nbr > 9999) begin
  71.                         nbr = 0;
  72.                 end
  73.         end
  74. end
  75. endmodule
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-28 20:34 , Processed in 1.296074 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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