【CC2530强化实训02】普通延时函数实现按键的长按与短按

【题目要求】
      用一个按键实现单击与双击的功能已经是很多嵌入式产品的常用手法。使用定时器的间隔定时来计算按键按下的时间是通用的做法,然而,使用普通的延时函数实现按键单击与双击的区分也是一个快速的处理手段。按键SW1单击的时候,切换D3灯的开关状态;按键SW1双击的时候,切换D4灯的开关状态。其中:
      按键SW1-------P1_2
      D3灯-----------P1_0(高电平点亮)
      D4灯-----------P1_1(高电平点亮)

【实现思路】
  <1> 定义一个普通的延时函数Delay()、一个计算时间的变量count和一个延时阈值TT。
  <2> 当SW1第1次按下的时候,等待按键松开,只要count小于TT时,调用Delay()进行延时,累计count变量。
  <3> 在count小于TT时,发现SW1按键再次按下,则为双击按键。
  <4> 如果在count大于等于TT的延时过程中都没有第二次按键按下,则为单击按键。

【实现代码】

  1. #include "ioCC2530.h"
  2.  
  3. #define D3 P1_0
  4. #define D4 P1_1
  5. #define K1 P1_2
  6. #define TT 2000
  7. unsigned int count = ;
  8.  
  9. void Delay(unsigned int t)
  10. {
  11. while(t--);
  12. }
  13.  
  14. void Init_Port()
  15. {
  16. P1SEL &= ~0x03; //将P1_0和P1_1设置为通用I/O端口
  17. P1DIR |= 0x03; //将P1_0和P1_1设置为输出模式
  18. P1SEL &= ~0x04; //将P1_2设置为通用I/O端口
  19. P1DIR &= ~0x04; //将P1_2设置为输入模式
  20. }
  21.  
  22. void Scan_Keys()
  23. {
  24. if(K1 == )
  25. {
  26. Delay(); //按键去抖动处理
  27. if(K1 == ) //确认有按键按下
  28. {
  29. while(K1 == );
  30. while(count < TT)
  31. {
  32. Delay();
  33. count++;
  34.  
  35. if(K1 == ) //双击处理
  36. {
  37. Delay();
  38. if(K1 == )
  39. {
  40. while(K1 == );
  41. D4 = ~D4;
  42. count = ;
  43. break;
  44. }
  45. }
  46. }
  47.  
  48. if(count >= TT) //单击处理
  49. {
  50. D3 = ~D3;
  51. count = ;
  52. }
  53. }
  54. }
  55. }
  56.  
  57. void main()
  58. {
  59. Init_Port(); //初始化端口
  60. D3 = ;
  61. D4 = ;
  62. Delay();
  63. D3 = ;
  64. D4 = ;
  65. while()
  66. {
  67. Scan_Keys(); //扫描按键
  68. }
  69. }

【广东职业技术学院  欧浩源 <小蜜蜂老师>  ohy3686@qq.com】

【CC2530强化实训02】普通延时函数实现按键的长按与短按的更多相关文章

  1. 【CC2530强化实训01】普通延时函数实现按键的长按与短按

    [CC2530强化实训01]普通延时函数实现按键的长按与短按 [题目要求]     用一个按键实现长按与短按的功能已经是很多嵌入式产品的常用手法.使用定时器的间隔定时来进行按键按下的时间是通用的做法, ...

  2. 【CC2530强化实训03】定时器间隔定时实现按键长按与短按

    [CC2530强化实训03]定时器间隔定时实现按键长按与短按 [题目要求] 虽然用普通的延时函数能够实现按键长按与短按的判别,但是在实际的工程应用和项目开发中并不好用也不灵活.更多得是借助定时器的间隔 ...

  3. 【CC2530强化实训04】定时器间隔定时实现按键N连击

    [CC2530强化实训04]定时器间隔定时实现按键N连击 [题目要求]      2018年全国职业院校技能大赛“物联网技术应用”国赛(高职组)中关于感知层开发的难度陡然增大,三个题目均在Zigbee ...

  4. sqlserver 自学笔记 函数实训 学分学期转换函数的设计

    设计目的: 1.运用sql基本知识,编写学期转换函数. 2.运用sql基本知识,编写学分转换函数,将考试成绩转换为学分 3.通过上述函数的编写与调试,熟练掌握 sql函数的编写.调试与使用方法. 设计 ...

  5. 【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码

    [CC2530入门教程-增强版]基础技能综合实训案例(基础版)-上位机源码 广东职业技术学院  欧浩源 一.需求分析 按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体 ...

  6. 实训任务02:Hadoop基础操作

    实训任务02:Hadoop基础操作 班级            学号               姓名 实训1:创建测试文件上传HDFS,并显示内容 需求说明: 在本地计算机上创建测试文件helloH ...

  7. 实训30 延时中断组织块0B20仿真

    实训30 延时中断组织块的仿真试验   问题1 系统功能块SFC中提供了一些查询中断状态字的指令,举例说明 例如 SF34 "QRY_DINT" 用来查询 "延时中断&q ...

  8. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  9. UML基础与Rose建模实训教程

    目  录 第1章  初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章  Rational Rose工具... 6 2.1 安装与配置Rational Ro ...

随机推荐

  1. Java VM 环境配置过程要点( win10,64位)

    好些教程写的都不一样.留个脚印免得以后再安装的时候找不到完全合适的教程. 注:JDk中就有java虚拟机,即JRE.除此之外,还有许多的命令包,供java程序员使用. 安装要点: (1)安装jre(j ...

  2. vue 组件 模板input双向数据数据

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>T ...

  3. c++ 替换修改一个文件夹下的所有文件的文件名

    代码简洁,亲测可用. 1,首先来获取(输出)一个文件夹中所有的文件名 void getFiles(string path, vector<string>& files) { //文 ...

  4. 【设计模式】—— 原型模式Prototype

    前言:[模式总览]——————————by xingoo 模式意图 由于有些时候,需要在运行时指定对象时哪个类的实例,此时用工厂模式就有些力不从心了.通过原型模式就可以通过拷贝函数clone一个原有的 ...

  5. Java多线程之ThreadLocal总结2

    ThreadLocal是什么 早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地 ...

  6. 解决多进程中APScheduler重复运行的问题

    转自:http://blog.csdn.net/raptor/article/details/69218271 问题 在一个Python web应用中需要定时执行一些任务,所以用了APSchedule ...

  7. BZOJ5288 HNOI/AHOI2018游戏

    首先将之间没有锁的房间合并.显然可达性具有传递性和反交换律(即若a能到达b,则b不能到达a). 考虑对每个房间找到其左右第一个(即与其最接近的)能作为起点到达它的房间.如果能求出这个,对此建两棵树,问 ...

  8. P4867 Gty的二逼妹子序列

    题目描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们规定妹子们的美 ...

  9. 【NOI2016】区间

    目链接:http://uoj.ac/problem/222 在数轴上有 n 个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m 个区间共同包含至少 ...

  10. Reactor模式,或者叫反应器模式 - 为什么用多路io复用提供吞吐量

    Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...