《按键消抖与LED控制》实验的个人思考与总结

2019/01/08,第一个判断是否有按键按下的操作好像有问题,有空在修改!

红色为修改部分:

问题描述:

当三个独立按键的某一个被按下后,相应的LED被点亮;再次按下后,LED熄灭,按键控制LED亮灭


下面是LED灯的原理图:

可见,LED是低电平亮,高电平灭。

事实上,控制LED等的亮灭很简单,不是问题,对应的代码段如下:

reg d1;
reg d2;
reg d3;
  
always @ (posedge clk or negedge rst_n)
    if (!rst_n) begin
        d1 <= 1'b0;
        d2 <= 1'b0;
        d3 <= 1'b0;
      end
    else begin		//某个按键值变化时,LED将做亮灭翻转
        if ( led_ctrl[0] ) d1 <= ~d1;	
        if ( led_ctrl[1] ) d2 <= ~d2;
        if ( led_ctrl[2] ) d3 <= ~d3;
      end

assign led_d3 = d1 ? 1'b1 : 1'b0;		//LED翻转输出
assign led_d2 = d2 ? 1'b1 : 1'b0;
assign led_d1 = d3 ? 1'b1 : 1'b0;

我来做出解释:

首先,系统复位时候,先把寄存器变量d1、d2、d3清零,由下面这三天语句可知,这三个寄存器变量清零后,对应的led灯就是低电平,也就是亮。

assign led_d3 = d1 ? 1'b1 : 1'b0;        //LED翻转输出
assign led_d2 = d2 ? 1'b1 : 1'b0;
assign led_d1 = d3 ? 1'b1 : 1'b0;

然后如果某个按键按下,对应的led_ctrl[?]就会变成高电平,此时对应的d?就会翻转电平值,也就是说原来led?是低电平,按键按下后,d?就会翻转为高电平,此时,对应的led灯自然也会由亮变灭了。继续按下按键,led的亮灭又会翻转。

(这些分析都是本人通过代码以及实验结果证明的,确实如此。)


不得不说,如果仅仅是上面的分析那么简单,就省事了,同时这个实验也没啥意思了。

事实的情况我根据理解做如下的描述:

按键按下时候,按键值有一段时间的低电平,我们必须在低电平这段时间内的某一个瞬间采样按键值来控制led灯的亮灭。

可能不能采样对是一个值得研究的问题。

先给出按键的大概电路图;

对这个电路图的一些解释:

独立按键一般有2组管脚,这2组管脚在按键未被按下时是断开的,在按键被按下时则是导通的

基于此原理,我们一般会把按键的一个管脚接地,另一个管脚上拉到VCC,并且也连接到GPIO。这样,在按键未被按下时,GPIO的连接状态为上拉到VCC,则键值为1;按键被按下时,GPIO虽然还是上拉到VCC,但同时被导通的另一个管脚拉到地了,所以它的键值实际上是0</

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值