zoukankan      html  css  js  c++  java
  • 无线传感网——zigbee基础实验-定时器实现长按与短按

    #include "ioCC2530.h"
    #define D3  P1_0
    #define D4  P1_1
    #define D5  P1_3
    #define D6  P1_4
    #define SW1 P1_2
    unsigned char count_t = 0;    //长定时累计变量
    unsigned char K_Press = 0;    //按键按下标志
    /*=======================简单的延时函数========================*/
    void Delay(unsigned int t)
    {
      while(t--);
    }
    /*======================端口初始化函数========================*/
    void Init_Port()
    {
      //初始化LED灯的I/O端口
      P1SEL &= ~0x1b;   //P1_0、P1_1、P1_3和P1_4作为通用I/O端口
      P1DIR |= 0x1b;    //P1_0、P1_1、P1_3和P1_4端口输出
      //关闭所有的LED灯
      P1 &= ~0x1b;
      //初始化按键
      P1SEL &= ~0x04;     //P1_2作为通用I/O端口
      P1DIR &= ~0x04;     //P1_2端口输入
      P1INP &= ~0x04;     //P1_2设置为上拉/下拉模式
      P2INP &= ~0x40;     //P1_2设置为上拉
    }
    /*=====================定时器1初始化函数======================*/
    void Init_Timer1()
    {
      T1CC0L = 0xd4;    //16MHz时钟128分频定时100ms
      T1CC0H = 0x30;    //设先填低8位,再填高8位
      T1CCTL0 |= 0x04;  //开启通道0的输出比较模式
      T1IE = 1;         //使能定时器1中断
      T1OVFIM = 1;      //使能定时器1溢出中断
      EA = 1;           //使能总中断
      T1CTL = 0x0e;     //分频系数是128,模模式
    }
    /*====================定时器1中断服务函数=====================*/
    #pragma vector = T1_VECTOR
    __interrupt void Timer1_Sevice()
    {
      T1STAT &= ~0x01;      //清除定时器1通道0中断标志
      if(K_Press != 0)      //按键按下
      {
        count_t++;          //计算按下按下的时间值
      }
    }
    /*====================按键扫描处理函数========================*/
    void Scan_Keys()
    {
      if(SW1 == 0)
      {
        Delay(100);         //去抖动处理
        if(SW1 == 0)
        {
          K_Press = 1;      //标志按键正在按下
          while(SW1 == 0);  //等待按键松开
          K_Press = 0;      //标志按键已经松开
         
          if(count_t > 10)  //按键长按
          {
            D6 = ~D6;
          }
          else              //按键短按
          {
            D4 = ~D4;
          }
          count_t = 0;      //按键计数值清零
        }
      }
    }
    /*==========================主函数============================*/
    void main()
    {
      Init_Port();          //端口初始化
      Init_Timer1();        //初始化定时器1
      while(1)
      {
        Scan_Keys();        //扫描按键
      }
    }
  • 相关阅读:
    R语言导入scv文件乱码问题及解决
    水论文而已,科研就交给恐龙吧
    R语言实现单因素方差分析带字母的显著性标记
    记录新的学习
    如果你的校园网连不上很有可能是因为IE代理服务出错导致无法上网
    git 补充
    git
    学习linux的菜鸟 shell脚本中的循环
    学习linux的菜鸟 shell脚本中的逻辑判断
    学习linux的菜鸟 shell脚本中的dat,计算器,内置变量的用法
  • 原文地址:https://www.cnblogs.com/breads/p/12812433.html
Copyright © 2011-2022 走看看