CC2530 GPIO口编程2 (上拉、下拉,三态)

先介绍一下上拉、下拉:

                                                                              上拉、下拉

I/O端口中,有的上下拉电阻可以设置,有的不可以设置,有的是内置,有的是需要外接,I/O端口类似于一个三极管的集电极C,

当C接通过一个电阻和电源连接在一起的时候,该电阻成为C上拉电阻,该端口常态时为高电平, 用于检测低电平的输入

如果C通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻,使该端口常态时为低电平用于检测高电平的输入

实战:•按下按键S3使D1点亮。

                                                                               图1 LED引脚图                            

                                                                            图2   S3按键引脚图       

      上拉模式 :                         

#include <ioCC2530.h>

#define S3 P1_3

#define LED1 P1_0

void main(void)

{       

//LED灯初始化:

  P1SEL&=~(1<<0);  // 仅将P1SEL00P1_0定义为普通IO

  P1DIR|=(1<<0);  // 仅将P1DIR0位置1P1_0定义为输出

//按键初始化 上拉模式 : 

  P1SEL&=~(1<<3);   // 仅将P1SEL3位清0P1_3定义为普通IO

  P1DIR&=~(1<<3);   // 仅将P1DIR3位清0P1_3定义为输入

  P1INP&=~(1<<3);   // 仅将P1INP第3位清0,P1_3定义为上拉/下拉模式

  P2INP&=~(1<<6);  // 仅将P2INP第6位清0,整个P1口定义为为上拉模式

  while(1)

  {   

if(S3==0)

   LED1=0;//按下按键S3,点亮LED1

  else LED1=1;

  }     

}

下拉模式 :

#include <ioCC2530.h>

#define S3 P1_3

#define LED1 P1_0

void main(void)

{       

//LED灯初始化:

  P1SEL&=~(1<<0);  // 仅将P1SEL00P1_0定义为普通IO

  P1DIR|=(1<<0);  // 仅将P1DIR0位置1P1_0定义为输出

//按键初始化 拉模式 : 

  P1SEL&=~(1<<3);   // 仅将P1SEL3位清0P1_3定义为普通IO

  P1DIR&=~(1<<3);   // 仅将P1DIR3位清0P1_3定义为输入

  P1INP&=~(1<<3);   // 仅将P1INP第3位清0,P1_3定义为上拉/下拉模式

  P2INP|=(1<<6);  // 仅将P2INP第6位清0,整个P1口定义为为上拉模式

  while(1)

  {   

if(S3==0)

   LED1=0;//按下按键S3,点亮LED1

  else LED1=1;

  }     

}

三态模式:

#include <ioCC2530.h>

#define S3 P1_3

#define LED1 P1_0

void main(void)

{       

//LED灯初始化:

  P1SEL&=~(1<<0);  // 仅将P1SEL00P1_0定义为普通IO

  P1DIR|=(1<<0);  // 仅将P1DIR0位置1P1_0定义为输出

//按键初始化  三态模式 : 

  P1SEL&=~(1<<3);   // 仅将P1SEL3位清0P1_3定义为普通IO

  P1DIR&=~(1<<3);   // 仅将P1DIR3位清0P1_3定义为输入

 P1INP|=(1<<3);//仅将P1INP第3位置1,P1_3定义为三态模式

  while(1)

  {   

if(S3==0)

   LED1=0;//按下按键S3,点亮LED1

  else LED1=1;

  }     

}

 实践表明:经过上述三个程序中设置P1INP,将引脚输入时设置为上拉、三态,都能检测到按键是否按下的状态。

作为普通IO输入时 P1INP可不设置;在进行ADC转换时,必须将引脚设置成三态,否则电压采集不准。

猜你喜欢

转载自blog.csdn.net/qq_41204464/article/details/82937932