• ZigBee开发(3)--基础实验按键


    CC2530 IO 口配置我们需要配置三个寄存器 P1SEL P1DIR P1INP功能如下表所示: (详细参考 CC2530 datasheet.pdf

    * P1SEL (0:普通 IO 1:第二功能)

    * P1DIR (0:输入 1:输出 )
    * P1INP (0:上拉/下拉 1:三态 )

    按照表格寄存器内容,我们对 LED1 和按键 S1,也就是 P1.0 P0.0 口进行配置,

    P1.0 输出高电平时 LED1 被点亮,S1 按下时 P0.0 被拉低。所以配置如下:
    LED1 初始化:

    1 P1SEL &=~0x01; //作为普通 IO 口
    2 P1DIR |= 0x01; //P1_0 定义为输出
    3 P1INP |= 0X01; //打开下拉

    按键 S1 初始化:

    1 P0SEL &= ~0X01; //设置 P00 为普通 IO 口
    2 P0DIR &= ~0X01; //按键在 P00 口,设置为输入模式
    3 P0INP &= ~0x01; //打开 P00 上拉电阻,不影响

    由于 CC2530 寄存器初始化时默认是:

    P1SEL = 0x00;
    P1DIR = 0x00 ;
    P1INP = 0X00;

    所以 IO 口初始化我们可以简化初始化指令:

    1 P1DIR |= 0x01; //P1_0 定义为输出
    2 P1INP |= 0X01; //打开下拉
    3 P0DIR &= ~0X10; //按键在 P00 口,设置为输入模式 

    实例程序源代码:

     1 /**************************************
     2 程序描述:依次按下按键 S1 控制 LED1 的亮和灭
     3 **************************************/
     4 #include <ioCC2530.h>
     5 #define uint unsigned int
     6 #define uchar unsigned char
     7 //定义控制 LED 灯的端口
     8 #define LED1 P1_0 //LED1 为 P1.0 口控制
     9 #define KEY1 P0_0 //KEY1 为 P0.0 口控制
    10 //函数声明
    11 void Delayms(uint); //延时函数
    12 void InitLed(void); //初始化 LED1
    13 void KeyInit(); //按键初始化
    14 uchar KeyScan(); //按键扫描程序
    15 /****************************
    16 延时函数
    17 *****************************/
    18 void Delayms(uint xms) //i=xms 即延时 i 毫秒
    19 {
    20     uint I,j;
    21     for(i=xms;i>0;i--)
    22         for(j=587;j>0;j--);45
    23 }
    24 /****************************
    25 LED 初始化函数
    26 *****************************/
    27 void InitLed(void)
    28 {
    29     P1DIR |= 0x01; //P1_0 定义为输出
    30     P1INP |= 0X01; //打开下拉
    31     LED1 = 0; //LED1 灯熄灭
    32 }
    33 /****************************
    34 按键初始化函数
    35 *****************************/
    36 void InitKey()
    37 {
    38     P0SEL &= ~0X01; //设置 P00 为普通 IO 口
    39     P0DIR &= ~0X01; //按键在 P00 口,设置为输入模式
    40     P0INP &= ~0x01; //打开 P00 上拉电阻,不影响
    41 }
    42 /****************************
    43 按键检测函数
    44 *****************************/
    45 uchar KeyScan(void)
    46 {
    47     if(KEY1==0)
    48     { 
    49         Delayms(10); //去抖动
    50             if(KEY1==0)
    51             {
    52                 while(!KEY1); //松手检测46
    53                 return 1; //有按键按下
    54             }
    55             return 0; //无按键按下
    56     }
    57 }
    58 /***************************
    59 主函数
    60 ***************************/
    61 void main(void)
    62 {
    63     InitLed(); //调用初始化函数
    64     InitKey();
    65     while(1)
    66     {
    67         if(KeyScan()) //按键改变 LED 状态
    68         LED1=~LED1;
    69     }
    70 }                   

    我的板子上有2两个按键:

    #include<ioCC2530.h>
    
    #define LED1 P1_0    //定义P10口为LED1控制端
    #define LED2 P1_1    //定义P11口为LED2控制端
    #define LED3 P1_4    //定义P14口为LED3控制端
    
    #define KEY1 P0_1    
    #define KEY2 P2_0
    void IO_Init(void)
    {
      
      /*
      P1SEL (0:普通 IO 口 1:第二功能)
      P1DIR (0:输入 1:输出 )
      P1INP (0:上拉/下拉 1:三态 )
      */
      P1SEL &= ~0x13;
      P0SEL &= ~0x02;
      P2SEL &= ~0x01;
      
      //P1DIR |= 0x01;     //P1_0定义为输出
      P1DIR |= 0x13;  //P10、P11、P14定义为输出
      
      P0DIR &= ~0x02;
      P2DIR &= ~0x01;//P01,P20定义为输入
      
      
      P1INP &= ~0X13;     //打开下拉
      P0INP &= ~0X02;     //打开下拉
      P2INP &= ~0X01;     //打开下拉
      
      
      LED1 = 1;       //关闭LED1
      LED2 = 1;       //关闭LED2
      LED3 = 1;       //关闭LED3
     
    }
    
    void main(void)
    {   
        IO_Init();      //调用初始化程序
       
        while(1)
        {
          if(KEY1 == 0)
          {
            LED1 = !LED1;
            while(!KEY1);
          }
          if(KEY2 == 0)
          {
            LED2 = !LED2;
            while(!KEY2);
          }
        }
    }





  • 相关阅读:
    DP--HDU 1003求数字串中的最大连续序列(含有DP过程详细分析)
    递归+DFS--简单迷宫问题--百练2802
    枚举--百练2812--恼人的青蛙(内含枚举基本思想总结)
    计蒜客:最大子阵
    hdu 4515 小Q系列故事——世界上最遥远的距离
    日期计算
    最大最小公倍数
    hdu 1568 Fibonacci
    矩阵快速幂
    矩阵乘法
  • 原文地址:https://www.cnblogs.com/tianxxl/p/9867096.html
Copyright © 2020-2023  润新知