蓝桥杯单片机记录_第四篇_独立按键(长短按)

本文介绍了蓝桥杯单片机比赛中独立按键的使用,详细讲解了如何通过代码实现按键的短按和长按检测。提供了一种改进的方案,避免在判断长按过程中影响短按事件的正确识别。
摘要由CSDN通过智能技术生成

独立按键

独立按键的原理图:

在这里插入图片描述

其中,S4,S5,S6,S7是独立按键,需要用跳线帽接右边:

在这里插入图片描述

一 只有短按的代码:

key.h

#ifndef _KEY_H_
#define _KEY_H_


#include <STC15F2K60S2.H>


sbit k4=P3^3;
sbit k5=P3^2;
sbit k6=P3^1;
sbit k7=P3^0;


extern unsigned char k4_press;
extern unsigned char k5_press;
extern unsigned char k6_press;
extern unsigned char k7_press;


void key_read(void);
void key_control(void);


#endif

key.c

/*独立按键采用了定时器扫描法*/
/*代码写的比较复杂,但是比较好看懂吧*/


#include <key.h>

unsigned char k4_press,k5_press,k6_press,k7_press;
unsigned char key_sum;

void key_read(void)
{
   
  static unsigned char k4_time=0,k5_time=0,k6_time=0,k7_time=0; //一定要是static 
  key_sum=0; 
  
  /**********K4**********/
  if(k4==0)   //如果K4按下
  {
   
   k4_time++;    //k4_time用来判断按了多久
   if(k4_time==1)  //如果是一次的话
   {
   
     key_sum=4;   //得到key_sum为4,到key_control();函数中生成对应的press
   }  
   else if(k4_time==20) //在定时器中断中30ms扫描一次,大概是按下0.6秒后
   {
   
     k4_time=1;       //只有短按,然他执行k4_time=1时候的操作
     key_sum=0;      //并且此时没有sum值
   }
  }
  else 
   k4_time=0;       //没有按下按键则对应的time为0


  if(k5==0)
  {
   
    k5_time++; 
   if(k5_time==1)
   {
   
     key_sum=5;
   }  
   else if(k5_time==20)
   {
   
     k5_time=1;
     key_sum=0;
   }
  }
  else 
   k5_time=0;


  if(k6==0)
  {
   
    k6_time++; 
   if(k6_time
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值