TI CC2530 学习笔记-2-NewBit-CC2530-IO-按键

TI CC2530 学习笔记-目录

TI CC2530 学习笔记-2-NewBit-CC2530-IO-按键

检测按键是否按下有两种方法:

  1. 扫描(查询):CPU频繁地检测按键对应的IO的电平是否发生变化(假设IO电平被拉低代表按键被按下),如果有按键被按下则延时一段时间(这段时间称为:消抖,一般10ms)再检测一次,还是检测到按键按下就证明按键真的是被按下了,不是抖动。
  2. 中断:通过配置IO为输入方式并且当IO发生变化时产生中断再进行消抖,与扫描相比,不用占用 CPU太多时间。

TI CC2530 按键-扫描方式

  1. 配置时钟和IO
/*不配置的话CC2530运行在内部16MHz晶振*/
 CLKCONCMD &= ~0x47;   //选择外部32MHZ时钟, 不分频 
 while( (CLKCONSTA & 0x47) != 0x00 ); //切换时钟源后再次等待稳定
 P0DIR |= 0x40;  //配置IO为输出,P06为LED
 P0DIR &= ~0x01; //配置为输入,P01为按键
 P0_6 = LED_ACTIVE;//点亮LED, 高电平开灯
  1. 按键扫描
uint8 halScanKey( void )
{
  uint8 key = 0;
  if ( KEY_IO == KEY_ACTIVE )//检测按键是否被按下
  {
    halMcuWaitUs(10000);//延时10ms消抖
    if (KEY_IO == KEY_ACTIVE)//按键被按下
    {
      key |= KV_1;//设置对应键值
    }
  }
  return key;  //返回键值
}
  1. main函数
void main( void )
{
  halMcuWaitUs(10000);  //等待时间稳定,约10ms
  /*不配置的话CC2530运行在内部16MHz晶振*/
  CLKCONCMD &= ~0x47;   //选择外部32MHZ时钟, 不分频
  while( (CLKCONSTA & 0x47) != 0x00 ); //切换时钟源后再次等待稳定
  P0DIR |= 0x40;   //配置IO为输出,P06为LED
  P0DIR &= ~0x01; //配置为输入,P01为按键
  P0_6 = LED_ACTIVE;//点亮LED, 高电平开灯
  while(1)
  {
    if (halScanKey() == KV_1)//按键1被按下?
    {
      P0_6 = !P0_6;                   //改变灯的状态
      while( halScanKey() == KV_1 );  //等待按键释放
    }
  }
}
  1. 代码:NewBit-ZDK CC2530 基础例程
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于CC2530的定时器1模式中断1ms的代码示例,你可以根据自己的需求进行修改: ```c #include "ioCC2530.h" #define TIMER_TICKS_1MS 32678 // 定时器计数器为16位,时钟频率为32.768kHz,计数1ms需要的时钟周期数为:32768/1000=32.768 void Timer1_Init(void) { T1CTL |= 0x0C; // 选择模式3,即模式1+模式2 T1CCTL0 |= 0x44; // 选择模式1,设置为定时器模式,并启用中断 T1CC0L = TIMER_TICKS_1MS & 0xFF; // 设置计数器初始值低8位 T1CC0H = TIMER_TICKS_1MS >> 8; // 设置计数器初始值高8位 T1IE = 1; // 使能定时器1中断 T1CNTL = 0; // 将计数器清零 T1CNTH = 0; T1CTL |= 0x02; // 启动定时器1 } #pragma vector = T1_VECTOR __interrupt void Timer1_ISR(void) { T1IF = 0; // 清除定时器1中断标志 // 在此处添加需要执行的代码,每1ms执行一次 } int main(void) { Timer1_Init(); // 初始化定时器1 EA = 1; // 全局使能中断 while(1) { // 在此处添加需要执行的代码,不需要关心定时器1 } } ``` 在以上示例代码中,定时器1使用了模式3,即同时使用模式1和模式2。模式1是定时器模式,使用定时器计数器进行计时,并在计时结束时产生中断;模式2是比较模式,使用比较器进行比较,并在比较器输出变化时产生中断。在模式3下,定时器1同时使用了定时器模式和比较模式,每1ms产生一次中断。需要注意的是,中断服务函数中应尽量不要使用过多的计算和延时操作,以免影响定时器1的计时精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值