基於FPGA的按鍵控制4盞LED燈迴圈左移點亮

2021-07-23 07:56:15 字數 2301 閱讀 3495

一:背景介紹:

本篇文章是對昨天程式的乙個再使用,關於led的迴圈移動,我有話說,其他的就沒什麼要說的了。

迴圈左移有兩種方法:

乙個是:左移運算子 <<;還有一種是:verilog描述語言特有的拼接符號 ;

我個人推薦 拼接符號,簡約,快捷,清晰明朗。

二:程式

//***********************************===//

//==fosc : 50mhz

//==timescale : 1ns/1ns

//==file name : huxideng.v

//==date : 2016-09-30

//==author : cy

//==function : 每按鍵一次,則 led燈左移一位變亮,每次僅有乙個led燈亮

//==description:

// 當沒有按鍵 按下時,flag_10ms=1'b0;

// 當有 按鍵 按下時,flag_10ms=1'b1;

// //***********************************===//

module key_new(

input wire sclk,

input wire rst_n,

input wire key_in,

output reg [3:0] led_out

); //*************************=//

parameter t_10ms=19'd499_999;

//*************************=//

reg [18:0] cnt_10ms;

reg flag_10ms;

reg key_value;

//**********cnt_10ms**********//

always@(posedge sclk or negedge rst_n)

if(!rst_n)

cnt_10ms <=19'd0;

else if(key_in==1'b1) //沒有這一句,意味著是可以累積計數的,如此會出現,即使遇到1就停止計數,一旦監測到0就會累加計數;

cnt_10ms <=19'd0; //我們實際需要的是:key_in=1時,清零,遇到0時就累積加,所以,必須要新增此句

else if(cnt_10ms==t_10ms) //為的是cnt_10ms>t_10ms,如此就不會執行 cnt_10ms <=cnt_10ms+1'b1;

cnt_10ms <=19'd500_000;

// else if(key_in==1'b0) //

else if(key_in==1'b0&&cnt_10ms<=t_10ms) //目的 是:計數t_10ms+1'b1之後,就不加1

cnt_10ms <=cnt_10ms+1'b1;

//**********flag_10ms*****===//

always@(posedge sclk or negedge rst_n)

if(!rst_n)

flag_10ms <=1'b0; //因為key_value要取反,所以光有flag_10ms=0是不行的,還需要key_in==1'b0;按下了才有效果

else if(cnt_10ms==t_10ms-1'b1)

flag_10ms <=1'b1;

else

flag_10ms <=1'b0;

//***************===//

always@(posedge sclk or negedge rst_n)

if(!rst_n)

key_value <=1'b0; //我看到是led上電就亮,我還就奇怪了,不可能的啊!後來看看電路圖,

// else if(flag_10ms==1'b1) //原來led是高電平亮,我的初始化key_value<=1'b1;

else if(flag_10ms==1'b1&&key_in==1'b0)//所以不管怎麼修改電路,都是led開機就亮,修正為0時,就可以 了

key_value <=1'b1;

else

key_value <=1'b0;

always@(posedge sclk or negedge rst_n)

if(!rst_n)

led_out <=4'b0001;

else if(key_value==1'b1)

led_out <= ;

endmodule

基於FPGA的按鍵控制LED的迴圈左移一位

今天早上開工,將按鍵控制led的迴圈左移一位,這一功能實現了一把,這是乙個基礎功能,我想要的最終實現方式是 狀態機fsm 高階版本是 狀態機通過按鍵控制其條件的轉變,實現多個功能的輪流展示 1 按鍵消抖有幾種方法呢?兩種2 哪兩種呢?硬體方法 軟體方法 3 軟體方法如何實現呢?避過按鍵的抖動時間 4...

FPGA學習記錄 按鍵控制流水燈實驗

今天繼續昨天的流水燈實驗,不過今天嘗試加入按鍵來進行控制,通過按鍵來控制led的顯示效果。此次實驗中我將使用芯路恆ac620開發板進行實驗,通過開發板上的兩個按鍵來控制4個led燈。不同按鍵按下時,led燈顯示不同的效果。圖 2.1 按鍵電路原理圖 如圖所示,當按鍵未按下時,輸出高電平,按鍵按下時,...

基於LWUIT實現全域性按鍵控制 快捷鍵

越往lwuit框架深入,就發現lwuit裡面有很多好玩的東西。今天要介紹的是,是個類似快捷鍵的東西 你可以在程式的任何地方觸發你預先設計好的按鍵處理,例如你的程式有4個form,那麼在這4個form的任何乙個長按某鍵都會有相同的按鍵方法被觸發。先介紹一下原理 自己定義乙個form 類,名為myfor...