<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ![](https://img.kancloud.cn/9b/e7/9be729fac546c8e97740722d404bf9ce_1238x514.png) ` `未經過消抖的程序下載到小腳丫上會發現按鍵有時不能夠控制led翻轉,這是因為按鍵的抖動造成了led狀態變化不可控,所以我們必須將抖動消除。下面是一種延時去抖的程序。 ``` // ******************************************************************** // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< // ******************************************************************** // File name : debounce.v // Module name : debounce // Author : STEP // Description : // Web : www.stepfpga.com // // -------------------------------------------------------------------- // Code Revision History : // -------------------------------------------------------------------- // Version: |Mod. Date: |Changes Made: // V1.0 |2017/03/02 |Initial ver // -------------------------------------------------------------------- // Module Function:按鍵消抖 ? module debounce (clk,rst,key,key_pulse); ? parameter N = 1; //要消除的按鍵的數量 ? input clk; input rst; input [N-1:0] key; //輸入的按鍵 output [N-1:0] key_pulse; //按鍵動作產生的脈沖 ? reg [N-1:0] key_rst_pre; //定義一個寄存器型變量存儲上一個觸發時的按鍵值 reg [N-1:0] key_rst; //定義一個寄存器變量儲存儲當前時刻觸發的按鍵值 ? wire [N-1:0] key_edge; //檢測到按鍵由高到低變化是產生一個高脈沖 ? //利用非阻塞賦值特點,將兩個時鐘觸發時按鍵狀態存儲在兩個寄存器變量中 always @(posedge clk or negedge rst) begin if (!rst) begin key_rst <= {N{1'b1}}; //初始化時給key_rst賦值全為1,{}中表示N個1 key_rst_pre <= {N{1'b1}}; end else begin key_rst <= key; //第一個時鐘上升沿觸發之后key的值賦給key_rst,同時key_rst的值賦給key_rst_pre key_rst_pre <= key_rst; //非阻塞賦值。相當于經過兩個時鐘觸發,key_rst存儲的是當前時刻key的值,key_rst_pre存儲的是前一個時鐘的key的值 end end ? assign key_edge = key_rst_pre & (~key_rst);//脈沖邊沿檢測。當key檢測到下降沿時,key_edge產生一個時鐘周期的高電平 ? reg [17:0] cnt; //產生延時所用的計數器,系統時鐘12MHz,要延時20ms左右時間,至少需要18位計數器 ? //產生20ms延時,當檢測到key_edge有效是計數器清零開始計數 always @(posedge clk or negedge rst) begin if(!rst) cnt <= 18'h0; else if(key_edge) cnt <= 18'h0; else cnt <= cnt + 1'h1; end ? reg [N-1:0] key_sec_pre; //延時后檢測電平寄存器變量 reg [N-1:0] key_sec; ? ? //延時后檢測key,如果按鍵狀態變低產生一個時鐘的高脈沖。如果按鍵狀態是高的話說明按鍵無效 always @(posedge clk or negedge rst) begin if (!rst) key_sec <= {N{1'b1}}; else if (cnt==18'h3ffff) key_sec <= key; end always @(posedge clk or negedge rst) begin if (!rst) key_sec_pre <= {N{1'b1}}; else key_sec_pre <= key_sec; end assign key_pulse = key_sec_pre & (~key_sec); ? endmodule ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看