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

从F到0 - From F to 0

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

Quartus Verilog HDL/FPGA 查理复用算法 3个IO口实现动态驱动6个LED 并演示二进制累加

[复制链接]
发表于 2022-7-20 16:52:18 | 显示全部楼层 |阅读模式
main.png
  1. module led6_3io(                                //查理复用 (3个IO口驱动6颗LED)
  2.         input clk,                                        //动态扫描时钟 (1Khz以上)
  3.         input [5:0] led,                        //欲点亮的6颗LED (1点亮 0熄灭)
  4.         output reg [2:0] pin                //3个IO口 (连接6颗LED并进行动态扫描)
  5. );

  6. reg [2:0] i;                //正在扫描第几颗LED 范围:0~5
  7. reg [5:0] reg_led;
  8. always @(posedge clk) begin
  9.         if(i == 0) begin
  10.                 reg_led = led;
  11.         end
  12.         case(reg_led[i] ? i : ~0)
  13.                 0:pin=3'bz01;                        //LED0 VCC:Pin[0] GND:Pin[1]
  14.                 1:pin=3'b0z1;                        //LED1 VCC:Pin[0] GND:Pin[2]
  15.                 2:pin=3'bz10;                        //LED2 VCC:Pin[1] GND:Pin[0]
  16.                 3:pin=3'b01z;                        //LED3 VCC:Pin[1] GND:Pin[2]
  17.                 4:pin=3'b1z0;                        //LED4 VCC:Pin[2] GND:Pin[0]
  18.                 5:pin=3'b10z;                        //LED5 VCC:Pin[2] GND:Pin[1]
  19.                 default:pin=3'bzzz;        //高阻态 熄灭全部LED
  20.         endcase
  21.         i = i + 1;
  22.         if(i >= 6) i = 0;       
  23. end
  24. endmodule

  25. module main(
  26.         input clk,                        //50Mhz时钟 Pin17
  27.         output [2:0] pin        //查理复用 3个IO口 可驱动6个LED Pin[0]:Pin30 Pin[1]:Pin31 Pin[2]:Pin32
  28. );

  29. //1Khz时钟发生器
  30. integer i=0;
  31. reg clk_1khz;               
  32. always @(posedge clk) begin
  33.         i=i+1;
  34.         if(i >= 25000) begin
  35.                 i = 0;
  36.                 clk_1khz <= !clk_1khz;
  37.         end
  38. end

  39. reg [5:0] led6;

  40. led6_3io led6_3io(
  41.         .clk(clk_1khz),
  42.         .led(led6),
  43.         .pin(pin)
  44. );

  45. //6颗LED二进制累加
  46. integer j=0;
  47. always @(posedge clk) begin
  48.                 j=j+1;
  49.                 if(j>=50000000/4) begin
  50.                         j=0;
  51.                         led6 = led6+1'b1;
  52.                 end
  53. end
  54. endmodule
复制代码

相关帖子

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

本版积分规则

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

腾讯云安全认证

GMT+8, 2024-4-26 00:19 , Processed in 1.477085 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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