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); // 僅將P1SEL第0位清0,P1_0定義為普通IO
P1DIR|=(1<<0); //
//按鍵初始化 上拉模式 :
P1SEL&=~(1<<3); // 僅將P1SEL第3位清0,P1_3定義為普通IO
P1DIR&=~(1<<3); // 僅將P1DIR第3位清0,P1_3定義為輸入
P1INP&=~(1<<3); // 僅將P1INP第3位清0,P1_3定義為上拉/下拉模式
P2INP&=~(1<<6); // 僅將P2INP第6位清0,整個P1口定義為為上拉模式
while(1)
{
if(S3==0)
LED1=0;//按下按鍵
else LED1=1;
}
}
下拉模式 :
#include <ioCC2530.h>
#define S3 P1_3
#define LED1 P1_0
void main(void)
{
//LED燈初始化:
P1SEL&=~(1<<0); // 僅將P1SEL第0位清0,P1_0定義為普通IO
P1DIR|=(1<<0); // 僅將P1DIR第0位置1,P1_0定義為輸出
//按鍵初始化 下拉模式 :
P1SEL&=~(1<<3); // 僅將P1SEL第3位清0,P1_3定義為普通IO
P1DIR&=~(1<<3); // 僅將P1DIR第3位清0,P1_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); // 僅將P1SEL第0位清0,P1_0定義為普通IO
P1DIR|=(1<<0); // 僅將P1DIR第0位置1,P1_0定義為輸出
//按鍵初始化 三態模式 :
P1SEL&=~(1<<3); // 僅將P1SEL第3位清0,P1_3定義為普通IO
P1DIR&=~(1<<3); // 僅將P1DIR第3位清0,P1_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轉換時,必須將引腳設定成三態,否則電壓採集不準。