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

从F到0 - From F to 0

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

Quartus Verilog HDL/FPGA 驱动3片级联74HC595的3位静态共阴数码管并演示000~999 累加

[复制链接]
发表于 2022-8-18 19:32:01 | 显示全部楼层 |阅读模式
main.png
  1. module main(
  2.         input clk,                        //50Mhz Pin17
  3.         output reg SHCP,        //74HC595 Pin30
  4.         output reg STCP,        //74HC595 Pin31
  5.         output reg DS                //74HC595 Pin32
  6. );
  7. parameter fosc = 50000000;                                //晶振频率
  8. parameter hc595_num = 3;                                //595级联数量
  9. parameter hc595_clkhz = 1000000;                //595移位频率 1Mhz
  10. parameter hc595_bit = hc595_num * 8;//595级联数*8 (位数)
  11. reg [hc595_bit-1:0] hc595_dat;                //修改该寄存器的值 会实时发送到595
  12. reg [hc595_bit-1:0] hc595_ram;                //595数据缓存容器 防止数据错乱
  13. reg [31:0] hc595_i = 0;                                        //595分频用
  14. reg [31:0] hc595_bpc = 0;                                //595位指针

  15. function [7:0] display;                        //16进制数码管段码查询
  16.         input [3:0] hex;
  17.         begin
  18.         case(hex)
  19.                 4'h0:display = 8'h3F;
  20.                 4'h1:display = 8'h06;
  21.                 4'h2:display = 8'h5B;
  22.                 4'h3:display = 8'h4F;
  23.                 4'h4:display = 8'h66;
  24.                 4'h5:display = 8'h6D;
  25.                 4'h6:display = 8'h7D;
  26.                 4'h7:display = 8'h07;
  27.                 4'h8:display = 8'h7F;
  28.                 4'h9:display = 8'h6F;
  29.                 4'hA:display = 8'h77;
  30.                 4'hB:display = 8'h7C;
  31.                 4'hC:display = 8'h39;
  32.                 4'hD:display = 8'h5E;
  33.                 4'hE:display = 8'h79;
  34.                 4'hF:display = 8'h71;       
  35.         endcase
  36.         end
  37. endfunction

  38. reg [9:0] nbr;                //数码管正在显示的数字 0~999

  39. always @(posedge clk) begin
  40.         hc595_dat[23:16] <= display(nbr % 10);                        //74HC595:U3
  41.         hc595_dat[15:8] <= display((nbr)/ 10 %10);        //74HC595:U2
  42.         hc595_dat[7:0] <= display((nbr/100) %10);                //74HC595:U1
  43. end

  44. reg [31:0] i;
  45. always @(posedge clk) begin
  46.         i = i + 1'b1;
  47.         if(i >= fosc/10) begin
  48.                 i = 0;
  49.                 nbr = nbr + 1'b1;
  50.                 if(nbr > 999) begin
  51.                         nbr = 0;
  52.                 end
  53.         end
  54. end

  55. always @(posedge clk) begin                        //74HC595驱动
  56.         hc595_i = hc595_i + 1;
  57.         if(hc595_i >= fosc/hc595_clkhz/2) begin
  58.                 hc595_i = 0;
  59.                 SHCP = !SHCP;
  60.                 if(SHCP) begin
  61.                         if(hc595_bpc == 0) begin
  62.                                 hc595_ram = hc595_dat;
  63.                         end
  64.                         DS = hc595_ram[hc595_bit-hc595_bpc-1];
  65.                         STCP = (hc595_bpc != hc595_bit-1);
  66.                         hc595_bpc = hc595_bpc + 1;
  67.                         if(hc595_bpc >= hc595_bit) begin
  68.                                 hc595_bpc = 0;
  69.                         end
  70.                 end
  71.         end
  72. end
  73. endmodule

复制代码

相关帖子

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

本版积分规则

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

腾讯云安全认证

GMT+8, 2024-4-28 01:38 , Processed in 0.701040 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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