51单片机:利用定时器中断写一个简易加法计算器,按键消抖算法很好。

此加法计算器很简单,且有很多不完善的地方,但逻辑性很强

此函数主要分为两部分:

1、        主函数部分:主函数的作用主要是识别哪一个按键被按下,并且根据被按下的按键,执行相应的状态!比如按下等号键就把两次加数累加起来显示出来

 

首先主函数调用KeyDriver函数进行判断是否有按键被按下,并检测哪一个按键被按下,

然后接着调用KeyAction函数,判断哪一个按键被按下,并执行该按键所对应的功能

然后再把KeyAction函数中所得到的数值,发送到ShowNumber函数中,将得到的数值进行分离,并存储到数码管缓冲区LedBuff中去!

2、        中断函数部分:

中断函数主要进行数码管的刷新和按键状态的检验!

 

主要是按键状态函数难理解:其实这里包含一个按键消抖的算法。就是一毫秒检验一列四个按键的状态,连续四毫秒就把所有按键全都检验一遍他们的状态,并把按键状态存到状态缓冲区keybuff中去,然后连续四个四毫秒就把每一个按键都检验四遍。

如果连续检验四遍发现某个按键一直保持为0状态,说明它一直被按下,则可以确定这个按键一直被按下。如果连续检验四遍发现某个按键一直保持为1状态,说明它一直弹起,则可以确定这个按键一直弹起。

如果连续四次发现某个按键状态又有0又有1,说明按键处于抖动状态!(关于按键抖动自行百度。。。)如果这时候判断按键的状态,即这段代码:

        for(i=0;i<4;i++)

        {

                if((keybuff[col][i]&0x0f)==0x00)//假如连续四毫秒内发现某个按键一直保持0状态,说明此按键被按下,给此按键当前状态赋值为0

                  {                                              

                           keysta[col][i]=0;//keysta这个数组是为了保存按键的当前状态

                  }

                  elseif((keybuff[col][i]&0x0f)==0x0f)//假如连续四毫秒内发现按键一直保持1状态,说明此按键弹起,给此按键当前状态赋值为1

                  {

                          keysta[col][i]=1;//检测到此按键弹起,此按键当前状态赋值为1

                  }

        }

 

现在贴出代码:

 

#include<reg52.h>

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值