FPGA 按鍵控制led燈


lesson 2 獨立按鍵控制led燈

 

實現效果:無按鍵按下時, LED燈全滅;按鍵1按下時, LED燈顯示自右向左的流水效果;按鍵2按下時, LED燈顯示自左向右的流水效果;按鍵3按下時,四個LED燈同時閃爍;

按鍵4按下時, LED燈全亮。 

 

設計過程

計數器設計:led在閃爍效果和流水效果實現需要時間間隔至少0.1s,在此我們設置為0.2s,因此需要設計一個0.2s的計數器,每隔0.2s計數器加一。

  1. module key_led(
            input sys_clk,
            input rst_n,
            
            output reg [3:0] key,
            output reg [3:0] led
    );
    
    reg [23:0] cnt;
    reg [1:0] led_control;
    
    //系統時鍾,計數器計數,計時0.2s
    always@(posedge sys_clk or negedge rst_n)
    begin
        if(!rst_n)
            cnt <= 0;
            else if(cnt < 24'd9_999_999)//計數滿0.2S。此處與上個流水燈實驗不同,上個流水燈實驗計數為10_000_000,實際上多計數了一個周期,此處剛好1000_0000個周期
            cnt <= cnt + 1'b1;
            else 
                cnt <= 24'd0;
    end
    
    //led狀態選擇
    always@(posedge sys_clk or negedge rst_n)
    begin
        if(!rst_n)
            led_control <= 0;
        else if(cnt == 24'd9_999_999)
                    led_control <= led_control + 1'b1;
                else    
                    led_control <= led_control;
    end
    
    
    //檢測按鍵
    always@(posedge sys_clk or negedge rst_n)
    begin
        if(!rst_n)
            led <= 4'b0000;            //led全滅
        else if(key[0]==0)
                begin
                    case(led_control)
                    2'b00:led <= 4'b1000;
                    2'b01:led <= 4'b0100;
                    2'b10:led <= 4'b0010;
                    2'b11:led <= 4'b0001;
                    default:led <= 4'b0000;                
                end
        else if(key[1]==0)
                begin
                    case(led_control)
                    2'b00:led <= 4'b0001;
                    2'b01:led <= 4'b0010;
                    2'b10:led <= 4'b0100;
                    2'b11:led <= 4'b1000;
                    default:led <= 4'b0000;                
                end
        else if(key[2]==0)
                begin
                    case(led_control)
                    2'b00:led <= 4'b1111;
                    2'b01:led <= 4'b0000;
                    2'b10:led <= 4'b1111;
                    2'b11:led <= 4'b0000;
                    default:led <= 4'b0000;                
                end
        else if(key[3]==0)
                led <= 4'b1111;
            else
                led <= 4'b0000;
    
    end
    
    endmodule 

     

 案列來源:新起點開發板資料

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM