一、设计任务及原理:LED循环显示控制电路就是对于一组LED(16个),通过不同的工作模式可按照一定的规律来点亮或者熄灭。所要求的循环显示控制电路共分4个节拍,四个节拍按照一定的顺 一、设计任务及原理:LED循环显示控制电路就是对于
很简单的,用取表法就行了,这个是我刚编的,你改时间对就行了,,我仿真过了,OK了 include
led<=minute/10;end 3'b100:begin led_light<=6'b01_0000;led<=hour%10;end 3'b101:begin led_light<=6'b10_0000;led<=hour/10;end endcase end always @ (led_light)begin case(led)4'h0:sm_seg=8'hc0
input clk,rst,en;output wei;output[7:0] shu,led;reg[7:0] shu_out,led_Out;reg[25:0] led_out;reg[3:0] display0;reg wei_out;initial led_out=0;always @(posedge clk)begin led_out=led_out+1;if
reg [7:0] led;reg [24:0] count;//计数器 reg [24:0] speed;//速度 reg [3:0] state;//状态,[3]=1:正转;[3]=0:翻转;{2,0}速度 always @(posedge clk or negedge rst)//自动变频流水灯 if (!r
if(led_d == 8)led_d <= 0;end end always @( led_d ) begin case (led_d)4'd1:LED_Data_Port[7:0] <= 8'b1000_0000;//8'b1000_0001;4'd2:LED_Data_Port[7:0] <= 8'b0000_0001;//8'b1
led默认状态是 全亮 5'b10000:从左到右每两个LED逐渐点亮 5'b01000:从右到左每两个LED逐渐点亮5'b00100:从左到右一个LED跳跃式点 5'b00010:从右到左一个LED跳跃式点亮 module led (input wireClock,input wi
控制8个LED进行显示,每种显示模式中包含四种变化方式。用verilog语言写。
input Reset,output reg LED );reg [24:0]cnt_led;///25M分频25bit;[27:0]cnt_led;always @( posedge Clk or negedge Reset )begin if ( !Reset )begin cnt_led <= 0;LED <= 0;end else
按键低电平有效,led灯低电平时亮。按键按下亮,松开灭。程序较简单,为组合逻辑电路,没有按键防抖功能。module led(led,key);input key;output led;reg led_out;always@(key)if(!key)led_out=1'b0;else led_out=
module LED_Module(Clock,LED_Data_Port);input Clock;output LED_Data_Port;reg [7:0] LED_Data_Port; //LED数据口 reg [3:0] led_d; //LED显示数据 //=== integer cnt_led;//=== always @(posedge
reg [7:0] led;reg [24:0] count;//计数器 reg [24:0] speed;//速度 reg [3:0] state;//状态,[3]=1:正转;[3]=0:翻转;{2,0}速度 always @(posedge clk or negedge rst)//自动变频流水灯 if (!r
// 设置初始值 else led_set <= {1'b0,led_set[7:1]}; // led 依次移位 endend 下面给一个 led 流水灯的实例:8个LED 从左到右依次点亮 module led ( input wire Clock, input wire RESE
你好,下面是对应的代码,另外时钟的频率不要太高否者实际的那个灯可能会看不来。module show(clk, reset, ledLight)input clk,reset;output [9:0] ledLight;reg [10:0] count ;always @(posdge clk or negedge res
如何用verilog写10个流水灯
if (led_out==12500000)begin led_out=0;if (en==1)begin display0=display0+1;if (rst==0)display0=0;if (display0==10) //加到10 清0 begin display0=0;led_out=0;end end end end always @(clk)be
if (light ==3'b000) //LED灯全部点亮时,重新熄灭再准备下次循环 light =3'b111;else light = light<<1; //LED灯左移 end end end endmodule 这个程序我已经在Actel板上烧过了,没问题。如果还有什么问题
二、具体要求:1、基本功能(参考图1)(1)系统上电后16个LED全点亮,S1为一复位按键((按下S1=0,松开S1=1)),对复位键按键操作后,系统从第一节拍开始执行直到第四节拍结束,然后从第一节拍重新开始新的循环。第一节拍:16个LED(Q1~Q
module leds(input button,input clk,output reg ctrl[2:0]);reg button_dly;wire button_vld;always@(posedge clk)button_dly <= button;assign button_vld = button & ~button_dly;always@(posedge clk)if(button_
按键按下亮,松开灭。程序较简单,为组合逻辑电路,没有按键防抖功能。\x0d\x0amodule led(led,key);\x0d\x0a \x0d\x0ainput key;\x0d\x0aoutput led;\x0d\x0areg led_out;\x0d\x0a \x0d\
按键低电平有效,led灯低电平时亮。按键按下亮,松开灭。程序较简单,为组合逻辑电路,没有按键防抖功能。module led(led,key);input key;output led;reg led_out;always@(key)if(!key)led_out=1'b0;else led_
verilog hdl 一个按键控制一个LED亮。。只要这么简单的。。
module ledwater(clk,led,s)input clk;input[1:0]s;output[7:0]led;reg [7:0] led=0;reg [1:0] olds=0;always@(posedge clk) olds<=s;always@(posedge clk)if (olds^s)case (s)2'b00: led<=1;
module ledcon(clk,rst,led);input clk,rst;output [3:0] led; //高电平有效 reg [3:0] led_r; //led控制寄存器 reg [19:0] cnt; //计数器 always @(posedge clk or negedge rst)if(!rst)cnt<=2
而计数器的工作是通过外接时钟脉冲CP的作用下,秒的个位加法计数器开始记数,通过译码器和数码显示管显示数字即计数器。当经过10个脉冲信号后,秒个位计数器完成一次循环,秒十位计数器的CP与秒个位计数器的CP同步,秒个位计数器的Qcc使得
light=3'b111;//LED灯全部点亮时,重新熄灭再准备下次循环 else light =light>>1;//LED灯右移 end else begin if
求Verilog语言编写的循环彩灯控制器
所要求的循环显示控制电路共分4个节拍,四个节拍按照一定的顺序依次循环执行。二、具体要求:1、基本功能(参考图1)(1)系统上电后16个LED全点亮,S1为一复位按键((按下S1=0,松开S1=1)),对复位键按键操作后,系统从第一节拍开始执行
KEY BIT P1.0;按键与P1.0相连接 ;LED与P2相连接,低电平有效 KZW BIT 20H.0;标志控制位,1——向左循,0——右循环 ORG 00H LJMP MAIN ORG 30H MAIN:MOV P2,#0FFH JB P1.0,ACALL
module leds(input button,input clk,output reg ctrl[2:0]);reg button_dly;wire button_vld;always@(posedge clk)button_dly <= button;assign button_vld = button & ~button_dly;always@(posedge clk)if(button_
按键低电平有效,led灯低电平时亮。按键按下亮,松开灭。程序较简单,为组合逻辑电路,没有按键防抖功能。module led(led,key);input key;output led;reg led_out;always@(key)if(!key)led_out=1'b0;else led_
按键低电平有效,led灯低电平时亮。按键按下亮,松开灭。程序较简单,为组合逻辑电路,没有按键防抖功能。\x0d\x0amodule led(led,key);\x0d\x0a \x0d\x0ainput key;\x0d\x0aoutput led;\x0d\x0are
verilog hdl 一个按键控制一个LED亮?
SIGNAL sw1, sw1_r : STD_LOGIC := '0'; SIGNAL sw2, sw2_r : STD_LOGIC := '0'; SIGNAL sw3, sw3_r : STD_LOGIC := '0'; SIGNAL sw4, sw4_r : STD_LOGIC := '0'; SIGNAL status : STD_LOGIC := '0'; sw_proc: PROCESS(clk) BEGIN IF RISING_EDGE(clk) THEN IF rst = '1' THEN sw1_r <= '0'; sw2_r <= '0'; sw3_r <= '0'; sw4_r <= '0'; status <= '0'; ELSE IF (sw1_r /= sw1) OR (sw2_r /= sw2) OR (sw3_r /= sw3) OR (sw4_r /= sw4) THEN status <= NOT status; END IF; ------------------------ sw1_r <= sw1; sw2_r <= sw2; sw3_r <= sw3; sw4_r <= sw4; END IF; END IF; END PROCESS;module leds( input button, input clk, output reg ctrl[2:0] ); reg button_dly; wire button_vld; always@(posedge clk) button_dly <= button; assign button_vld = button & ~button_dly; always@(posedge clk) if(button_vld ) case (ctrl) 3'b001:ctrl<=3'b010; 3'b010:ctrl<=3'b100; 3'b100:ctrl<=3'b001; default:ctrl<=3'b001; endcase endmodule
先把问题具体化: 假如 LED “1” 为 亮,“0”为灭,需要 LED 每一秒,从左到右点亮,该如何做? 那么这就有二个具体的问题: A、一秒如何产生? 如果你的平台时钟是 50Mhz ,也就 clk = 50Mhz,那么利用分频计数来产生1hz的时钟,也就是 时钟周期为 1秒。实例如下: reg [31:0] cnt;reg clk_1;always@(posedge clk_50M or negedge rst_n) begin if(!rst_n) begin cnt <= 32'd0; clk_1 <= 1'b0; end else begin if(cnt == 32'd50_000_000-1) clk_1 <= ~clk_1; else cnt <= cnt + 1; endend B、如何从左向右点亮? 点亮只需要LED设置为是“1”,从左往右,也就是高位到低位依次为“1”,根据clk_1s 的时钟,对LED进行移位就好了。这里有个问题,当LED移位到为全“0”的时候,则需要将 LED 写成初始值,这样就可以一直 循环点亮 下去。实例如下: always @(posedge Clk_1s or negedge RESET_N) begin if(!RESET_N) begin led_set <= 8'b0000_0000; end else begin if(led_set == 8'b0000_0000) led_set <= 8'b1000_0000; // 设置初始值 else led_set <= {1'b0,led_set[7:1]}; // led 依次移位 endend 下面给一个 led 流水灯的实例: 8个LED 从左到右依次点亮 module led ( input wire Clock, input wire RESET_N, output wire [7:0] LED ); // ---- count 1s ---------reg [27:0] cnt_1s;reg clk_1s_en; always @(posedge Clock or negedge RESET_N)begin if(!RESET_N) begin cnt_1s <= 0; clk_1s_en <= 0; end else begin if(cnt_1s == 'd50_000_000-1) begin cnt_1s <= 0; clk_1s_en <= ~clk_1s_en; end else cnt_1s <= cnt_1s + 1; endend // ----------- led set --------------reg [7:0] led_set; always @(posedge clk_1s_en or negedge RESET_N) begin if(!RESET_N) begin led_set <= 8'b0000_0000; end else begin if(led_set == 8'b0000_0000) led_set <= 8'b1000_0000; else led_set <= {1'b0,led_set[7:1]}; endend assign LED = led_set;endmodule
module LED_Module(Clock,LED_Data_Port); input Clock; output LED_Data_Port; reg [7:0] LED_Data_Port; //LED数据口 reg [3:0] led_d; //LED显示数据 //================================================ integer cnt_led; //================================================== always @(posedge Clock) begin cnt_led <=cnt_led + 1; if(cnt_led == 20000000) begin cnt_led <= 0; led_d <= led_d + 1; if(led_d == 8) led_d <= 0; end end always @( led_d ) begin case (led_d) 4'd1: LED_Data_Port[7:0] <= 8'b1000_0000;//8'b1000_0001; 4'd2: LED_Data_Port[7:0] <= 8'b0000_0001;//8'b1100_0011; 4'd3: LED_Data_Port[7:0] <= 8'b0000_0010;//8'b1110_0111; 4'd4: LED_Data_Port[7:0] <= 8'b0000_0100;//8'b1111_1111; 4'd5: LED_Data_Port[7:0] <= 8'b0000_1000;//8'b0001_1000; 4'd6: LED_Data_Port[7:0] <= 8'b0001_0000;//8'b0011_1100; 4'd7: LED_Data_Port[7:0] <= 8'b0010_0000;//8'b0111_1110; 4'd8: LED_Data_Port[7:0] <= 8'b0100_0000;//8'b1111_1111; default: LED_Data_Port[7:0] <= 8'b0000_0000;//8'b1111_1111; endcase end endmodule
我觉得你在开发包里仔细地看一下,一搬二次开发包都会提供各种语言的实例程序还有每个语言所支持的类库文件以及库里的各属性和方法的说明文档。
今天做回好人,闲着给你写一个做参考。 按键按一次LED灯灭,在按一次按键LED灯亮。 程序如下: /************************************************************************************************************* #include "REG52.H" sbit LED1_01 = P1^1; //LED灯 sbit KEY0_01 = P1^2; //按键 void Delay_1ms(unsigned int Time) { unsigned int x, y; for(x = Time; x > 0; x--) for(y = 120; y > 0; y--); } int main(void) { LED1_01 = 1; //打开LED灯点亮 while(1) { if(KEY0_01 == 0) //检测按键是否按下 { Delay_1ms(10); //延时去抖动 if(KEY0_01 == 0) //确定按键按下 { LED1_01 = ~ LED1_01; //取反LED灯 [ 亮 . 灭 ] } while(KEY0_01 == 0); //检测松手 } } } *****************************************************************************************************************/