CC2530基于定时器1的长按与短按

发布者:美好的人生最新更新时间:2022-10-11 来源: csdn关键字:CC2530  定时器1  长按  短按 手机看文章 扫描二维码
随时随地手机看文章

实验要求

代码实现

#include "ioCC2530.h"

 

#define D4 P1_1

#define D6 P1_4

#define SW1 P1_2

 

unsigned int count = 0;

unsigned char K_Press = 0;

 

//延迟函数

void Delay(unsigned int t)

{

  while(t--);

}

 

 

//端口初始化函数

void Init_Prot()

{

//配置4个LED灯的引擎

  //选择端口的功能

  P1SEL &=~0x1B;//设置通用io端口

  //配置端口的方向

  P1DIR |=0x1B;

  //关闭LED灯

  P1 &=~0x1B;

  

  //按键

  P1SEL &=~0x04;//输入

  P1DIR &=0x04;

  P1INP &=0x04;//上拉模式

  P2INP &=0x40;

}

 

 

//定时器的初始化

void Init_Timer1()

{

  //1.设置最大计数值

  T1CCOL = 0xD4;//先低8位

  T1CCOH = 0x30;//再高8位

  //2.开启通道0的比较模式

  T1CCTL0 |=0x04;

  //3.使能定时器1的中断

  T1IE=1;

  //4.打开使能总中断

  EA=1;

  //5.设置定时器1的分频数和工作模式

  T1CTL=0x0E;

}

 

 

//定时器的中断服务函数

#pragma vector = T1_VECTOR //起始语句

//中断服务函数

__interrupt void Service_Timer1()

  

  if(K_Press==1)

  {

    count++;

  }

}

 

//按键扫描函数

 

void Scan_Keys()

 

{

  

  //按键1

 

  if(SW1 == 0)//可能有按键按下,那么进行去抖动操作

 

  {

    

    Delay(200);

     

    if(SW1 == 0)//那么就是按键触发的信号

    

    {

     

      K_Press==1;

      

      //按键处理程序

      

      while(SW1 == 0);

      //低电平、按下状态

 

      K_Press==0;       

 

      

      if(count>5)

      {

        D4=~D4;

      }

      else

      {

        D6=~D6;

      }

      

      count=0;

    }

  

  }

}

 

 

void main(void)

{

  //端口初始化

  Init_Prot();

  Init_Timer1();

  while(1)

  {

    Scan_Keys();

  }

}


关键字:CC2530  定时器1  长按  短按 引用地址:CC2530基于定时器1的长按与短按

上一篇:CC2530看门狗定时器实现1秒定时
下一篇:CC2530基于定时器1摸模式的秒闪灯

推荐阅读最新更新时间:2024-11-12 11:07

51单片机T0定时器应用1
1.实验任务   用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。硬件电路如下图所示 2.电路原理图 图4.15.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 (2).把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对
[单片机]
51单片机T0<font color='red'>定时器</font>应用<font color='red'>1</font>
使用定时器1以方式0产生周期为500us的方波连续脉冲
设单片机晶振频率为6MHz,要求使用定时器1以方式0产生周期为500us的等宽正方波连续脉冲,并由P1.0输出,以查询方式完成。 求单片机高手帮忙! ;---------------------------------------------------------------- 分析: 方式0,求初始值时,稍麻烦点。 按照题目要求,需要定时250us。 因为晶振频率为6MHz,指令周期就是2us,那么计数值就是125。 因为方式0的最大计数值是 2^13,于是有:     初始值 = 8192-125 = 8067 = 1111 1100 00011 使用方式0,要求把1111110000011,分成高8位和低5位,故有:   
[单片机]
cc2530是什么_cc2530能做什么
  CC2530 是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 应用的一个真正的片上系统(SoC)解决方案。它能够以非常低的总的材料成本建立强大的网络节点。   cc2530是什么?   cc2530简介:   CC2530 结合了领先的RF 收发器的优良性能,业界标准的增强型8051 CPU,系统内可编程闪存,8-KB RAM 和许多其它强大的功能。CC2530 有四种不同的闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB 的闪存。CC2530 具有不同的运行模式,使得它尤其适应超低功耗要求的系统。运行模式之间的转换时间短进一步确保了低能源消耗。   
[单片机]
长按键C语言程序
一共用了四个按钮. #define _KEYDOWN_TEST_TIME (20) unsigned char IsKeyDown(volatile unsigned char Value, unsigned char pin) { unsigned long CurState = 0, i; for(i = 0; i _KEYDOWN_TEST_TIME; ++i) CurState += _GET_BIT(Value, pin)? 0:1; //键盘接了上拉电阻,低电平才是按下 if(CurState == _KEYDOWN_TEST_TIME) return 1; return 0; } //以下所有值均是以 De
[单片机]
单片机按键长短按源程序(不需要通过等待来判定)
从做项目编写的程序里拆解出来 单片机源程序如下: uint m; static uchar flag_key=1; //按键松开标志 static uchar pass=0; //长按动作标志,为1时,长按已动作,为0时长按未动作 if(KEY==0) { flag_key=0; //按键按下标志 m++; } else flag_key=1; //按键松开标志 if((flag_key==1)&&(m 10)&&(m 500)) //按键松开,
[单片机]
stm32检测按键单击,双击,长按
硬件连接: 按键上拉 外设配置: 外部配置为下降沿中断,定时器中断时间为5ms。定时器中断抢占优先级必须高于外部中断 检测方法: 定义一个时间,在该时间段里检测到一个下降沿,认为是单击;低电平持续时间超过该时间,认为是长按;检测到两个下降沿认为是双击。 代码 #define KEY_PRESS_TIME 800 //检测时间段 uint16_t key_time_cnt = KEY_PRESS_TIME + 5; bool key_pressed = false; //单击标志 bool key_long_pressed = true; //长按标志 void
[单片机]
stm32定时器1的2路互补PWM
void TIM1_PWM_Ini(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; //开启时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能定时器3时钟 RCC_APB2PeriphClockC
[单片机]
Atmega16的定时器1使用
//经验正以下程序是正确的,可以实现LED 1s亮 1s灭 #include avr/io.h #include avr/interrupt.h #define uchar unsigned char #define uint unsigned int uint count; void init() { DDRB|=_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7); PORTB&=~(_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7)); //TCNT0=155;//初值为55,即记数到255-155=100次溢出并进入定时器0中断函数 TCNT1H=(65536-10000)/
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved