module Scan_key(pReset,scan_clk,scan_port,key_status);<br /> parameter Buff_WIDTH = 8; //缓冲区深度<br /> input pReset; //复位信号<br /> input scan_clk; //扫描时钟<br /> input scan_port; //扫描端口<br /> output key_status; //消抖后的键状态<br /><br /> reg key_status;<br /> <br /> reg [Buff_WIDTH-1:0]key_buff; //消抖缓冲区<br /> <br /> always @(posedge pReset or posedge scan_clk)<br /> begin<br /> if(pReset) //复位状态<br /> begin<br /> key_buff = 0;<br /> end<br /> else //扫描状态<br /> begin<br /> key_buff = {key_buff[Buff_WIDTH-1:1],scan_port};<br /> //填入新扫描数据<br /> end<br /> end<br /><br /> always @(key_buff)<br /> begin<br /> if(key_buff == {Buff_WIDTH{0}}) //全部为0<br /> key_status = 0;<br /> else if(key_buff == {Buff_WIDTH{1}}) //全部为1<br /> key_status = 1;<br /> else<br /> key_status = key_status;<br /> end<br /><br />endmodule <br /><br />
|