日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

键盘消抖

發布時間:2024/4/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 键盘消抖 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? 今天做了一天的鍵盤消抖,也就是用到了上一篇寫的脈沖邊沿檢測技術,但是在鍵盤延時方面,時間老是設置的不好,太長或者太短都會使鍵盤消抖不理想!糾結了一天,參考了特權同學的鍵盤消抖程序,現在總算做的讓自己滿意了,接下來看程序吧!

?

//程序功能:鍵盤控制流水燈,key1控制流水燈的停起;key2控制流水燈左移;key3控制流水燈右移; module johnson_cout(sysclk, //系統時鐘 50MZH;rst_b, //復位信號,低電平有效;key1, //三個獨立鍵盤,低電平表示按下; key2,key3,led_out //LED燈,低電平點亮; ); //------------------------------------// input sysclk; input rst_b; input key1; //key1對應硬件電路圖上的SW4 ,控制流水燈的停起; input key2; //key2對應硬件電路圖上的SW5 ,流水燈左移; input key3; //key3對應硬件電路圖上的SW6 ,流水燈右移; output[3:0] led_out; //------------------------------------// wire sysclk; wire rst_b; wire key1; wire key2; wire key3; wire[3:0] led_out; //-------------------------------------------------------// reg [2:0] key_rst; reg [2:0] key_rst_r; always @ (posedge sysclk or negedge rst_b)beginif(!rst_b)key_rst<=3'b111;elsekey_rst<={key1,key2,key3};end always @ (posedge sysclk or negedge rst_b)beginif(!rst_b)key_rst_r<=3'b111;elsekey_rst_r<=key_rst;end wire[2:0] key_change; assign key_change=key_rst_r&(~key_rst); //-------------------------------------------------------// reg[23:0] time_cnt; // always @ (posedge sysclk or negedge rst_b)beginif(!rst_b)time_cnt<=24'h0;else if (key_change) //當檢測到鍵盤按下后,time_cnt馬上清零,重新開始計數;time_cnt<=24'h0;else time_cnt<=time_cnt+24'h1; end//-------------------------------------------------------// reg[2:0] key; reg[2:0] key_n;always @(posedge sysclk or negedge rst_b)beginif(!rst_b)key<=3'b111;else if(time_cnt==24'hfffff) // 這里的time_cnt不能設的太大20ms(2 *20ns=20ms)就行了;key<={key1,key2,key3}; //如果使time_cnt= 24'hffffff則鍵盤消抖不理想,手必須在鍵盤上多停留會 ; endalways @(posedge sysclk or negedge rst_b)beginif(!rst_b)key_n<=3'b111;elsekey_n<=key; endwire[2:0] key_edge; assign key_edge=(~key)&key_n; //脈沖下降沿檢測; key 111 111 111 110 111 //---------------------------------------------------------// key_n 111 111 111 110 110 reg stop_start; //控制流水燈停起; ~key 000 000 000 001 000 always @ (posedge sysclk or negedge rst_b) // key_edge 000 000 001 000begin // 當有鍵盤按下時,key就會有高電平變成低電平 key_edge就會維持一個時鐘周期的高脈沖; if(!rst_b) stop_start<=1'h1;else if(key_edge[2])stop_start<=~stop_start; end reg left_right; //控制流水燈:左移/右移; always @(posedge sysclk or negedge rst_b)begin if(!rst_b)left_right<=1'h1;elsebegin if(key_edge[1])left_right<=1'h1;if(key_edge[0])left_right<=1'h0; end end//---------------------------------------------------------// reg[3:0] led_r;always @(posedge sysclk or negedge rst_b) beginif(!rst_b) led_r<=4'b1110;else if((time_cnt==24'hffffff)&&(stop_start)) //這里time_cnt=24’hffffff正好,太小了流水燈掃描的太快了,太大了燈變成靜態了; beginif(left_right)led_r<={led_r[2:0],led_r[3]}; //left moveelse led_r<={led_r[0],led_r[3:1]}; //right move end end assign led_out=led_r; endmodule

?

?

轉載于:https://www.cnblogs.com/tphust/archive/2012/06/29/2570464.html

總結

以上是生活随笔為你收集整理的键盘消抖的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。