天天看點

CC2530之按鍵與LED CC2530之按鍵與LED

CC2530之按鍵與LED

在本次學習中,主要是通過闆載按鍵來控制LED的亮滅。

首先,先來檢視與LED及按鍵相關的電路圖。

由圖可知,當CC2530端口1的0号引腳輸出低電平時,LED1将被點亮。當按鍵S1按下時,端口0的1号引腳将為低電平,擡起時為高電平。

CC2530之按鍵與LED CC2530之按鍵與LED

接下來,先檢視與LED(P1_0)配置相關的寄存器。

1. 端口1功能選擇寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為普通的I/O口,若設定為1,則将相關引腳設為外設I/O,預設值都為0。

CC2530之按鍵與LED CC2530之按鍵與LED

2. 端口1方向選擇寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為輸入引腳,若設定為1,則将相關引腳設為輸出引腳,預設值都為0。

CC2530之按鍵與LED CC2530之按鍵與LED

3. 端口1輸入模式寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為上拉/下拉模式,若設定為1,則将相關引腳設為三态模式,其中P1_0和P1_1沒有上拉/下拉功能,可以不用配置,預設值都為0。

CC2530之按鍵與LED CC2530之按鍵與LED

再來看看與按鍵S1(P0_1)配置相關的寄存器。

1. 端口1功能選擇寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為普通的I/O口,若設定為1,則将相關引腳設為外設I/O,預設值都為0。

CC2530之按鍵與LED CC2530之按鍵與LED

2. 端口1方向選擇寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為輸入引腳,若設定為1,則将相關引腳設為輸出引腳,預設值都為0。

CC2530之按鍵與LED CC2530之按鍵與LED

3. 端口1輸入模式寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為上拉/下拉模式,若設定為1,則将相關引腳設為三态模式,其中P1_0和P1_1沒有上拉/下拉功能,可以不用配置,預設值都為0。

CC2530之按鍵與LED CC2530之按鍵與LED
/*
本實驗效果,每按一次按鍵,LED效果翻轉一次
*/
#include <ioCC2530.h>

typedef unsigned char uchar;
typedef unsigned int uint;

#define LED1 P1_0
#define KEY1 P0_1

void delay_ms(uint ms)
{
  uint i,j;
  for(i=;i<ms;i++)
    for(j=;j<;j++);
}

void LEDInit(void)
{
  P1SEL &= ~;  //設定P1_0為普通IO
  P1DIR |= ;  //設定P1_0為輸出模式
}

void KEYInit(void)
{
    P0SEL &= ~; //設定P0_1為普通IO
    P0DIR &= ~; //設定P0_1為輸入模式
    P0INP &= ~; //設定P0_1為上拉模式
}

/*掃描按鍵是否按下*/
uchar KEYScan(void)
{
    if(KEY1 == )
    {
        delay_ms();
        if(KEY1 == )
        {
            while(!KEY1);
            return ;
        }
    }
    return ;
}

void main(void)
{
    LEDInit();
    KEYInit();
    while()
    {
        if(KEYScan())
            LED1 = ~LED1;
    }
}
           

繼續閱讀