独立按键驱动

文章目录


前言

根据我们学校老师的思路进行的改写,此代码可以大大提高MCU的效率,避免了MCU在运行时被delay降低效率,可以检测按键的规定时间内的按键按下的奇偶数

一、思路

1、我们通过key_cnt来记录按下的次数,通过key_state变量记录按键按下的状态(记录按键一整套按下和弹起的状态,这里也不知道怎么解释了你们可以看代码理解),这里用一个key_timer变量做按键的消抖。

2、keyscan() 要这个函数要在定时器里面使用每10ms调用一次

二、代码

1、KEY.C文件

代码如下(示例):

#include "key.h"

unsigned int key_cnt=0;          //按键按下次数
unsigned int key_Timeout=0;     //超时标记
unsigned char key_state=0;       //按键状态
unsigned char key_timer=0;       //按键延时
unsigned char key_flag=0;        //按键状态 0 没按 1 奇数次 2 偶数次

void KEY_Timeout_detection();   //函数声明

void keyscan()    //此函数需要10ms调用一次【使用定时器】
{
	
	if(KEY1==0)
	{
		if(key_timer<1)
		{
			key_timer++;
			return ;
		}
		if(KEY1==0&&key_state==0)
		{
			key_cnt++;
			key_state=1;
			key_three_flag=0;
		}
	}
	else
	{
		if(key_timer>0)
		{
			key_timer--;
			return ;
		}
        key_state=0;
        KEY_Timeout_detection();
	}
}

void KEY_Timeout_detection(void)   //按键超时未按下检测函数
{
        key_Timeout++;
		if(key_Timeout>=200)//2秒后没有按下做判断
		{
			if(key_cnt%2)
			{
				key_flag=1;
			}
			else
			{
				key_flag=2;
			}
			if(key_cnt==0)
			{
				key_flag=0;
			}
			key_Timeout=0;
			key_cnt=0;
		}
}

2.KEY.H的文件

代码如下(示例):

#ifndef _key_H
#define _key_H

#include "STC15.h"

void keyscan();
extern unsigned char key_flag;

#endif

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值