| 
 | 
 
module lcd_button2( 
                    clk, 
                    rst, 
                    led_d1, 
                   led_d2, 
                   led_d3, 
                    sw1, 
                    sw2, 
                    sw3 
              );//按键按下,数码管依次显示0-9 
 input clk; 
 input rst; 
 input sw1,sw2,sw3; 
 output led_d1,led_d2, led_d3; 
                   
  
 reg [2:0] key_rst; 
 always @(posedge clk or negedge rst) 
  if(!rst) 
   key_rst <= 3'b111; 
  else 
   key_rst <= {sw3,sw2,sw1}; 
   
 reg[2:0] key_rst_r; 
 always @(posedge clk or negedge rst) 
  if(!rst) 
   key_rst_r <= 3'b111; 
  else 
   key_rst_r <= key_rst; 
 wire[3:0] key_an = key_rst_r & (~key_rst); 
  
 reg[19:0] cnt; 
  
 always @(posedge clk or negedge rst) 
  if(!rst) 
   cnt <= 0; 
  else if(key_an) cnt <= 0; 
  else cnt <= cnt+1'b1; 
   
 reg [2:0] low_sw; 
 always @(posedge clk or negedge rst) 
  if(!rst) 
   low_sw <= 3'b111; 
  else if(cnt==20'hfffff) 
   low_sw <= {sw3,sw2,sw1}; 
    
 reg[2:0] low_sw_r; 
  
 always @(posedge clk or negedge rst) 
  if(!rst) 
   low_sw_r <= 3'b111; 
  else 
   low_sw_r <= low_sw; 
    
 wire [2:0]  led_ctr =low_sw_r[2:0]&(~low_sw[2:0]); 
  
 reg d1; 
 reg d2; 
 reg d3; 
 always @(posedge clk or negedge rst) 
  if(!rst) begin 
   d1 <= 1'b0; 
   d2 <= 1'b0; 
   d3 <= 1'b0; 
    
  end 
   
 else begin 
     if(led_ctr[0]) d1<=~d1; 
     if(led_ctr[1]) d2<=~d2; 
     if(led_ctr[2]) d3<=~d3; 
  end  
   assign led_d3=d3?1'b1:1'b0; 
   assign led_d2=d2?1'b1:1'b0; 
   assign led_d1=d1?1'b1:1'b0; 
    
endmodule |   
 
 
 
 |