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

从F到0 - From F to 0

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

Quartus Verilog HDL/FPGA 实现 74HC247/74LS247 共阳数码管BCD数字到7段解码器驱动器

[复制链接]
发表于 2024-1-1 19:53:19 | 显示全部楼层 |阅读模式
main.png
  1. module hc247(                //共阳数码管BCD数字到7段解码器驱动器 VCC:Pin16 GND:Pin8
  2.         input A,                        //地址A译码输入 (最低位LSB) Pin7
  3.         input B,                        //译码地址B Pin1
  4.         input C,                        //译码地址C Pin2
  5.         input D,                        //译码地址D (最高位MSB) Pin6
  6.         input BI_RBO,        //高电平打开输出,低电平关闭 BI/RBO Pin4
  7.         input RBI,                //Pin5
  8.         input LT,                //段码测试 低电平显示8,高电平正常 Pin3
  9.         output QA,                //共阳数码管段码A 集电极(漏极)开漏输出 Pin13
  10.         output QB,                //段码B 有低电平输出能力,无高电平输出(开路) Pin12
  11.         output QC,                //段码C译码输出 Pin11
  12.         output QD,                //段码D Pin10
  13.         output QE,                //段码E Pin9
  14.         output QF,                //段码F Pin15
  15.         output QG                //段码G Pin14 (无小数点)
  16. );

  17. wire [6:0] Q;
  18. assign {QG,QF,QE,QD,QC,QB,QA} = Q;
  19. wire [6:0] code [15:0];
  20. assign code[0] = 7'b1000000;                //数字0
  21. assign code[1] = 7'b1111001;                //数字1
  22. assign code[2] = 7'b0100100;                //数字2
  23. assign code[3] = 7'b0110000;                //数字3
  24. assign code[4] = 7'b0011001;                //数字4
  25. assign code[5] = 7'b0010010;                //数字5
  26. assign code[6] = 7'b0000010;                //数字6
  27. assign code[7] = 7'b1111000;                //数字7
  28. assign code[8] = 7'b0000000;                //数字8
  29. assign code[9] = 7'b0010000;                //数字9
  30. //10~15为乱码,不同品牌厂家批次,输出结果可能会有不同
  31. assign code[10] = 7'b0100111;                //小写c
  32. assign code[11] = 7'b0110011;                //小写c (左开口)
  33. assign code[12] = 7'b0011101;                //小写u (上)
  34. assign code[13] = 7'b0010110;                //小写c (上) 加一横 (数字5缺失段码c)
  35. assign code[14] = 7'b0000111;                //字母t
  36. assign code[15] = 7'b1111111;                //关闭输出

  37. genvar i;
  38. generate
  39.         for(i=0;i<=6;i=i+1) begin:k
  40.                 assign Q[i] = q[i] ? 1'bz : 1'b0;
  41.         end
  42. endgenerate

  43. reg [6:0] q;
  44. wire [2:0] l = {BI_RBO,RBI,LT};

  45. always @(*) begin
  46.         if(l == 3'b101 || l == 3'b111) begin
  47.                 q = code[{D,C,B,A}];
  48.         end else if(l == 3'b100) begin
  49.                 q = 7'h00;
  50.         end else begin
  51.                 q = 7'h7F;
  52.         end
  53. end

  54. endmodule

  55. module main(
  56.         input clk,                //50Mhz Pin17
  57.         output QA,                //Pin40
  58.         output QB,                //Pin42
  59.         output QC,                //Pin44
  60.         output QD,                //Pin47
  61.         output QE,                //Pin51
  62.         output QF,                //Pin53
  63.         output QG                //Pin57
  64. );

  65. reg [3:0] i = 4'd0;
  66. hc247 U1(
  67.         .A(i[0]),
  68.         .B(i[1]),
  69.         .C(i[2]),
  70.         .D(i[3]),
  71.         .BI_RBO(1'b1),
  72.         .RBI(1'b1),
  73.         .LT(1'b1),
  74.         .QA(QA),
  75.         .QB(QB),
  76.         .QC(QC),
  77.         .QD(QD),
  78.         .QE(QE),
  79.         .QF(QF),
  80.         .QG(QG)
  81. );

  82. integer j =0;
  83. always @(posedge clk) begin
  84.         j = j + 1;
  85.         if(j >= 50000000) begin
  86.                 j = 0;
  87.                 i <= i + 4'd1;
  88.         end
  89. end
  90. endmodule
复制代码

相关帖子

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

本版积分规则

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

腾讯云安全认证

GMT+8, 2024-4-27 17:35 , Processed in 1.765101 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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