一:背景介紹:
本篇文章是對昨天程式的乙個再使用,關於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...