|
- module led6_3io( //查理复用 (3个IO口驱动6颗LED)
- input clk, //动态扫描时钟 (1Khz以上)
- input [5:0] led, //欲点亮的6颗LED (1点亮 0熄灭)
- output reg [2:0] pin //3个IO口 (连接6颗LED并进行动态扫描)
- );
- reg [2:0] i; //正在扫描第几颗LED 范围:0~5
- reg [5:0] reg_led;
- always @(posedge clk) begin
- if(i == 0) begin
- reg_led = led;
- end
- case(reg_led[i] ? i : ~0)
- 0:pin=3'bz01; //LED0 VCC:Pin[0] GND:Pin[1]
- 1:pin=3'b0z1; //LED1 VCC:Pin[0] GND:Pin[2]
- 2:pin=3'bz10; //LED2 VCC:Pin[1] GND:Pin[0]
- 3:pin=3'b01z; //LED3 VCC:Pin[1] GND:Pin[2]
- 4:pin=3'b1z0; //LED4 VCC:Pin[2] GND:Pin[0]
- 5:pin=3'b10z; //LED5 VCC:Pin[2] GND:Pin[1]
- default:pin=3'bzzz; //高阻态 熄灭全部LED
- endcase
- i = i + 1;
- if(i >= 6) i = 0;
- end
- endmodule
- module main(
- input clk, //50Mhz时钟 Pin17
- output [2:0] pin //查理复用 3个IO口 可驱动6个LED Pin[0]:Pin30 Pin[1]:Pin31 Pin[2]:Pin32
- );
- //1Khz时钟发生器
- integer i=0;
- reg clk_1khz;
- always @(posedge clk) begin
- i=i+1;
- if(i >= 25000) begin
- i = 0;
- clk_1khz <= !clk_1khz;
- end
- end
- reg [5:0] led6;
- led6_3io led6_3io(
- .clk(clk_1khz),
- .led(led6),
- .pin(pin)
- );
- //6颗LED二进制累加
- integer j=0;
- always @(posedge clk) begin
- j=j+1;
- if(j>=50000000/4) begin
- j=0;
- led6 = led6+1'b1;
- end
- end
- endmodule
复制代码
|
|