蓝桥杯使用定时器代替延时控制按键

简介: 蓝桥杯使用定时器代替延时控制按键

前言

本篇文章主要带领大家了解为什么要使用定时器代替延时函数

一、延时函数的优点和缺点

优点:编写简单,容易理解。

缺点:阻塞程序,让一直一直处于等待状态,工作效率低极大的浪费了CPU的资源。

二、代码详解

#include<STC15F2K60S2.H>
//按键引脚声明
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;
//变量类型宏定义(定义变量多时可以减少代码的书写量)
#define unsigned char u8
#define unsigned short u16
#define unsigned int u32
u8 Key_VOL;//记录按键键值
static u8 Key_scan(void);//按键控制函数
static void key_ser(void);//按键服务函数(用来处理键值)
//***********定时器初始化
void Timer0Init(void)   //1毫秒@11.0592MHz
{
  AUXR |= 0x80;   //定时器时钟1T模式
  TMOD &= 0xF0;   //设置定时器模式
  TL0 = 0xCD;   //设置定时初值
  TH0 = 0xD4;   //设置定时初值
  EA=1;
  ET0=1;
  TR0 = 1;    //定时器0开始计时
}
//**********定时器服务函数
//(中断服务函数要求快进快出建议大家在这里少写代码)
void serviceTimer0() interrupt 1
{
  Key_scan();
}
u8 Key_scan(void)
{
    static u32 count=0;
  //下面为控制S7的代码其余按键可以进行复制处理加快编写代码速度  
  if(S7==0)
  {
    if(S7==0)
    {
      count++;
      if(count>=10)//消抖
      {
        count=0;
        key_VOL=1;//记录按键值
      }
    }   
    else//按键未按下
    {
      count=0;//计数值清零
    }
  }
  return Key_VOL;
}
void key_ser(void)
{
  switch(Key_VOL)//根据键值处理功能
  {
    case 1:
    {
    }
    break;
  }
}
void main(void)
{
  while(1)
  {
    key_ser();
  }
}

大多数朋友都是在按键扫描函数里面写功能代码,我其实不建议这样,我更推荐使用一个变量记录按键的状态,后面再重新编写一个函数单独来实现具体的功能。

这样看起来可能写了更多代码,但是这种写法非常方便Debug,在实际操作中会更加高效。


总结

使用此方法可以使得按键更加灵敏,大家下去可以自己试一试。有什么不会的大家留意交流。

喜欢的朋友点个赞。


相关文章
蓝桥杯之单片机学习(十八)——555定时器与频率测量
蓝桥杯之单片机学习(十八)——555定时器与频率测量
785 0
蓝桥杯之单片机学习(十八)——555定时器与频率测量
【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现
【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现
842 0
蓝桥杯 stm32 按键点灯 CubeMX
从图中我们可以看到有 4个按键,B1 , B2 , B3 , B4。 对应的 GPIO 端口是 PB0 , PB1, PB2 ,PA0。 当按键按下,IO 口读到低电平;按键弹起,IO 口读到高电平。 LED 的原理图,CubeMX 配置,以及代码讲解都在我的上篇文章 里详细讲解了,这 篇文章主要为大家讲解 按键 的使用。 蓝桥杯嵌入式之 LED 闪烁
144 0
【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系
【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系
1078 0
蓝桥杯之单片机学习(二十)——自创模板(最少省三,实现初始化、数码管显示、HC138独立按键(或矩阵键盘))
蓝桥杯之单片机学习(二十)——自创模板(最少省三,实现初始化、数码管显示、HC138独立按键(或矩阵键盘))
200 0
蓝桥杯之单片机学习(二十)——自创模板(最少省三,实现初始化、数码管显示、HC138独立按键(或矩阵键盘))
蓝桥杯之单片机学习(八)——定时器的基本原理与应用
蓝桥杯之单片机学习(八)——定时器的基本原理与应用
370 0
蓝桥杯之单片机学习(八)——定时器的基本原理与应用
蓝桥杯之单片机学习(五)——独立按键的基本操作与扩展应用
蓝桥杯之单片机学习(五)——独立按键的基本操作与扩展应用
313 0
蓝桥杯之单片机学习(五)——独立按键的基本操作与扩展应用
蓝桥杯之单片机学习(九)——定时器的进阶综合案例解析
蓝桥杯之单片机学习(九)——定时器的进阶综合案例解析
238 0
|
6月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
109 0
|
6月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
82 0