集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 790|回复: 0

有关按键的问题

[复制链接]
18761489033 发表于 2015-3-31 09:45:21 | 显示全部楼层 |阅读模式


这个程序时,当检测到有按键按下的时候,产生一个高电平的key_pulse,用key_pilse控制led灯变化一次。
我的仿真波形和我想的都一样,但是下到板子上就是不行。请大家帮忙看一下,谢谢大家了!
(我消抖时间选用了10ms)
module ceshi(
   input wire sclk,
   input wire s_rst_n,
   input wire pi_key,
   
   output reg[3:0] led
   );
   
reg  key_pulse;
reg  pi_key_reg;
//前消抖变量
reg[18:0] pre_cnt_10ms;
reg  pre_flag_10ms;
//后消抖变量
reg[18:0] pos_cnt_10ms;
reg  pos_flag_10ms;

parameter CNT = 19'd49_9999;
//打一拍抓下降沿
always@(posedge sclk or negedge s_rst_n)
   pi_key_reg <= pi_key;

//前端 消抖
always@(posedge sclk or negedge s_rst_n)
   if(s_rst_n==1'b0)
    pre_flag_10ms <= 1'b0;
   else if(pi_key==1'b0&&pi_key_reg==1'b1&&pos_flag_10ms==1'b0)
    pre_flag_10ms <= 1'b1;
   else if(pre_cnt_10ms>=CNT)
    pre_flag_10ms <= 1'b0;
   else
    pre_flag_10ms <= pre_flag_10ms;
   
always@(posedge sclk or negedge s_rst_n)
   if(s_rst_n==1'b0)
    pre_cnt_10ms <= 19'd0;
   //else if(pos_flag_10ms==1'b1)
   // pre_cnt_10ms <= 19'd0;
   else if(pre_flag_10ms==1'b1)
    pre_cnt_10ms <= pre_cnt_10ms + 19'd1;
   else
    pre_cnt_10ms <= pre_cnt_10ms;

//后端  消抖
always@(posedge sclk or negedge s_rst_n)
   if(s_rst_n==1'b0)
    pos_flag_10ms <= 1'b0;
   else if(pi_key==1'b1&&pi_key_reg==1'b0&&pre_flag_10ms==1'b0)
    pos_flag_10ms <= 1'b1;
   else if(pos_cnt_10ms>=CNT)
    pos_flag_10ms <= 1'b0;
   else
    pos_flag_10ms <= pos_flag_10ms;
   
always@(posedge sclk or negedge s_rst_n)
   if(s_rst_n==1'b0)
    pos_cnt_10ms <= 19'd0;
   //else if(pre_flag_10ms==1'b1)
   // pos_cnt_10ms <= 19'd0;
   else if(pos_flag_10ms==1'b1)
    pos_cnt_10ms <= pos_cnt_10ms + 19'd1;
   else
    pos_cnt_10ms <= pos_cnt_10ms;
   
//前抖消除之后产生一个key_pulse
always@(posedge sclk or negedge s_rst_n)
   if(s_rst_n==1'b0)
    key_pulse <= 1'b0;
   else if(pre_cnt_10ms==CNT)
    key_pulse <= 1'b1;
   else
    key_pulse <= 1'b0;
   
always@(posedge sclk or negedge s_rst_n)
   if(s_rst_n==1'b0)
    led <= 4'b0011;
   else if(key_pulse==1'b1)
    led <= 4'b1100;
   else
    led <= led;
   
endmodule



您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-7 05:00 , Processed in 0.059766 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表