关键词:
【CC2530强化实训03】定时器间隔定时实现按键N连击
【题目要求】
2018年全国职业院校技能大赛“物联网技术应用”国赛(高职组)中关于感知层开发的难度陡然增大,三个题目均在Zigbee协议栈下完成。其中第一个题目“仓库温湿度智能控制系统”考查了按键单击、双击和三连击。为了让大家更好的掌握按键的复杂处理思路,在这里通过一个具体的实训案例,讲述通过间隔定时实现按键N连击的基本思路。
在新大陆国赛设备的黑色Zigbee模块上,或者小蜜蜂制作的XMF09B和XMF09C中,按键SW1单击,切换D5灯的开关状态;按键SW1双击,切换D6灯的开关状态;按键SW1三连击,切换D3灯的开关状态;按键SW1四连击,切换D4灯的开关状态。
按键SW1----------P1_2
D5灯--------------P1_3(高电平点亮)
D6灯--------------P1_4(高电平点亮)
D3灯--------------P1_0(高电平点亮)
D4灯--------------P1_1(高电平点亮)
【实现思路】
每个按键按下都定义一个生命周期,假如是0.5秒,生命周期结束的时候才确定按键的最终状态。如果在按键的生命周期内有新的按键按下,将会重新计算生命周期,这时候就是双击。在双击的生命周期中,又有新的按键按下,则生命周期会重新计算,这时候就是三连击。在整个生命周期中如果没有新的按键按下,那么最终的按键状态就是三连击。如此类推。
【实现代码】
1 #include "ioCC2530.h" 2 3 #define D3 P1_0 4 #define D4 P1_1 5 #define D5 P1_3 6 #define D6 P1_4 7 #define SW1 P1_2 8 #define SW2 P0_1 9 10 unsigned char count_t = 0; 11 unsigned char K_Num = 0; 12 13 /*=======================简单的延时函数========================*/ 14 void Delay(unsigned int t) 15 16 while(t--); 17 18 19 /*======================端口初始化函数========================*/ 20 void Init_Port() 21 22 P1SEL &= ~0x1b; //P1_0、P1_1、P1_3和P1_4作为通用I/O端口 23 P1DIR |= 0x1b; //P1_0、P1_1、P1_3和P1_4端口输出 24 25 P1SEL &= ~0x04; //P1_2作为通用I/O端口 26 P1DIR &= ~0x04; //P1_2端口输入 27 P1INP &= ~0x04; //P1_2设置为上拉/下拉模式 28 P2INP &= ~0x40; //P1_2设置为上拉 29 30 31 /*=======================定时器1初始化========================*/ 32 void Init_Timer1() 33 34 T1CC0L = 0xd4; 35 T1CC0H = 0x30; //16MHz时钟,128分频,定时0.1秒 36 T1CCTL0 |= 0x04; //开启通道0的输出比较模式 37 T1IE = 1; 38 EA = 1; 39 T1CTL = 0x0e; //分频系数是128,模模式 40 41 42 /*====================定时器1服务函数========================*/ 43 #pragma vector = T1_VECTOR 44 __interrupt void Timer1_int() 45 46 T1STAT &= ~0x20; //清除定时器1的溢出中断标志位 47 if(K_Num != 0 && SW1 != 0) //按键不松开不计算生命周期 48 49 count_t++; //定时器1溢出一次加1,溢出周期为0.1S 50 51 52 53 /*====================按键扫描处理函数========================*/ 54 void Scan_Keys() 55 56 if(SW1 == 0) 57 58 Delay(100); //去抖动处理 59 if(SW1 == 0) 60 61 while(SW1 == 0); //等待按键松开 62 count_t = 0; //重新开始计算按键的生命周期 63 K_Num++; //改变按键状态 64 if(K_Num > 4) //四连击以上均判为四连击 65 66 K_Num = 4; 67 68 69 70 if(count_t > 5) //按键生命周期结束 71 72 switch(K_Num) 73 74 case 1: //按键单击 75 D5 = ~D5; 76 break; 77 case 2: //按键双击 78 D6 = ~D6; 79 break; 80 case 3: //按键三连击 81 D3 = ~D3; 82 break; 83 case 4: //按键四连击 84 D4 = ~D4; 85 break; 86 87 K_Num = 0; //每处理完一次按键,状态清零 88 count_t = 0; //计时清零 89 90 91 92 /*=========================主函数=============================*/ 93 void main() 94 95 Init_Port(); 96 Init_Timer1(); 97 D3 = 0; 98 D4 = 0; 99 D5 = 0; 100 D6 = 0; 101 while(1) 102 103 Scan_Keys(); 104 105
【广东职业技术学院 欧浩源 <小蜜蜂老师> [email protected]】
cc2530强化实训02普通延时函数实现按键的长按与短按(代码片段)
...击与双击的功能已经是很多嵌入式产品的常用手法。使用定时器的间隔定时来计算按键按下的时间是通用的做法,然而,使用普通的延时函数实现按键单击与双击的区分也是一个快速的处理手段。按键SW1单击的时候,切换D3灯的... 查看详情
cc2530定时器(代码片段)
...p; 定时/计数器的最基本工作原理是进行计数。不管是定时器还是计数器,本质上都是计数器,可以进行加1(减1)计数,每出现一个计数信号,计数器就会自动加1(自动减1),当计数值从0变成最大值(或从最大值变成0)溢... 查看详情
cc2530定时器使用
??定时器学习 文件夹说明...1协议栈函数使用...2设置初始化定时器...2回调函数(中断服务函数)3启动定时器...3停止定时器...4寄存器操作...4查询方式...4中断方式(使用定时器3)7 说明 依据数据手冊可知CC2530... 查看详情
cc2530定时器的应用(代码片段)
【例1】利用定时器计数实现5中彩灯的变化形式,基于模模式的。两个标志位,一个是定时器计数,一个是彩灯的状态。1#include"ioCC2530.h"23#defineD3P1_04#defineD4P1_15#defineD5P1_36#defineD6P1_478unsignedcharcount=0;//长定时累计变量9unsignedcharled_st... 查看详情
cc2530控制两个led灯交替闪烁,闪烁周期为0.5左右.其中p1_2连led1p1-3连2
...低电平亮还是高电瓶亮,这里假设低电平;2、设置一个定时器,在定时器里面写代码,分别发送高、低电瓶值可实现交替闪耀;参考技术A但有三点要注意,必须是iPhone6/6Plus及以上机型,机内安装的是苹果原装电池,而且经过苹... 查看详情
cc2530t3定时器控制引脚p1_1的亮灭
/*****************************************************************************文件名:main.c*作者:Andy*修订:2013-01-08*版本:1.0*描述:操作IO口控制3盏LED灯的全亮和全灭、闪烁、流水灯***************************************************** 查看详情
cc2530入门教程-增强版基础技能综合实训案例(基础版)-上位机源码
【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码广东职业技术学院 欧浩源一、需求分析 按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体... 查看详情
cc2530入门教程-增强版基础技能综合实训案例(基础版)-终端源码
【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-终端源码广东职业技术学院欧浩源 一、关于硬件电路 关于这个综合实训案例,具体需求详见《【CC2530入门教程-增强版】基础技能综合实训案例(... 查看详情
cc2530芯片定时器1的输出比较模式怎么用?
定时器1的输出比较模式怎么用。利用这个功能输出一个1KHZ,占空比为10%的程序怎么写啊?求高人指点qiayouni来为你解答//byqiujietech.inc.#include<ioCC2530.h>#defineuintunsignedint#defineucharunsignedchar#defineRLEDP1_0 //定义LED1为P10口控制#defineYL... 查看详情
定时器之基于模模式的间隔定时(代码片段)
...;=~0x1b;//00011011->11100100关闭所有灯181920/*=====================定时器1初始化函数======================*/21voidInit_Timer1()2223T1CC0L=0xd4;//16MHz时钟128分频定时100ms24T1CC0H=0x30;//设先填低8位,再填高8位最大定时周期定时0.1s25T1CCTL0|=0x04;//开启通道0... 查看详情
cc2530入门教程-增强版基础技能综合实训案例(基础版)-题目需求
【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-题目需求广东职业技术学院 欧浩源一、引用 不管是简单的单片机应用,还是复杂的嵌入式系统,在我看来它们的本质结构是差不多的,都离不开“内核+外... 查看详情
51单片机(cc2530)发送按键次数到串口助手显示实现功能:按1次按键串口助手显示1再按一次显示2以此
/*****************************************************************************描述:设置串口调试助手波特率:115200bps8N1*会收到CC2530发过来的按键次数****************************************************************************/#include<ioCC2530.h>#include<string.h>... 查看详情
stm32能通过按键中断实现连续按键吗
...间隔是否符合连续按键的要求罢了。但至少你还得开一个定时器或滴答时钟,用于间隔时间的判断。另外要是你的主循环速度快,也没必要使用外部中断,循环查询状态即可。要求高一点的才会使用外部中断 查看详情
cc2530开发模块与51单片机如何实现串口通信
现在我有一块51开发板和CC2530开发模块,我现在用CC2530采集温湿度数据,如何将CC2530采集到的数据发送给51单片机。现在我的代码可以将CC2530采集的温湿度数据发送到PC上然后通过串口助手显示出来,与51的通信是不是和PC端通信... 查看详情
cc2530学习路线-基础实验-gpio按键控制led灯亮灭(代码片段)
目录1.前期预备知识1.1新大陆Zigbee模块按键电路图1.2CC2530相关寄存器1.3CC2530中断走向图1.4使用C语言为51单片机编写中断程序1.5*函数指针2.程序代码THEEND1.前期预备知识1.1新大陆Zigbee模块按键电路图由上图可知,Zigbee模块的SW1按钮... 查看详情
cc2530入门教程-03cc2530的中断系统及外部中断应用
第3课 CC2530的中断系统及外部中断应用广东职业技术学院 欧浩源一、中断相关的基础概念 内核与外设之间的主要交互方式有两种:轮询和中断。 轮询的方式貌似公平,但实际工作效率很低,且... 查看详情
1cc2530单片机介绍
...器RAM、只读存储器ROM、输入输出I/O接口、中断控制系统、定时/计数器和通信等多种功能部件。本教程使用的单片机德州仪器生产的CC2530,其针脚分布如下: P0、P1各8个针脚(1字节=8位,针... 查看详情
cc2530的外部中断(代码片段)
...下降。中断相关的几个概念中断源发生中断的外设,例如定时器事件到了,那么中断源就是定时器。全局中断开关或总中断系统中有很多中断开关,如果需要一次性关闭所有的中断,那么就需要用全局中断才行,也就是一个总中... 查看详情