此加法计算器很简单,且有很多不完善的地方,但逻辑性很强
此函数主要分为两部分:
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>