• 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);
          }
        }
    }





  • 相关阅读:
    Linux下sed,awk,grep,cut,find学习笔记
    Python文件处理(1)
    KMP详解
    Java引用详解
    解决安卓中页脚被输入法顶起的问题
    解决swfupload上传控件文件名中文乱码问题 三种方法 flash及最新版本11.8.800.168
    null id in entry (don't flush the Session after an exception occurs)
    HQL中的Like查询需要注意的地方
    spring mvc controller间跳转 重定向 传参
    node to traverse cannot be null!
  • 原文地址:https://www.cnblogs.com/tianxxl/p/9867096.html
Copyright © 2020-2023  润新知