CC2530之按鍵與LED
在本次學習中,主要是通過闆載按鍵來控制LED的亮滅。
首先,先來檢視與LED及按鍵相關的電路圖。
由圖可知,當CC2530端口1的0号引腳輸出低電平時,LED1将被點亮。當按鍵S1按下時,端口0的1号引腳将為低電平,擡起時為高電平。
接下來,先檢視與LED(P1_0)配置相關的寄存器。
1. 端口1功能選擇寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為普通的I/O口,若設定為1,則将相關引腳設為外設I/O,預設值都為0。
2. 端口1方向選擇寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為輸入引腳,若設定為1,則将相關引腳設為輸出引腳,預設值都為0。
3. 端口1輸入模式寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為上拉/下拉模式,若設定為1,則将相關引腳設為三态模式,其中P1_0和P1_1沒有上拉/下拉功能,可以不用配置,預設值都為0。
再來看看與按鍵S1(P0_1)配置相關的寄存器。
1. 端口1功能選擇寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為普通的I/O口,若設定為1,則将相關引腳設為外設I/O,預設值都為0。
2. 端口1方向選擇寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為輸入引腳,若設定為1,則将相關引腳設為輸出引腳,預設值都為0。
3. 端口1輸入模式寄存器。這是一個8位的寄存器,對應端口1的8個引腳,将相應位設為0,表示将相應引腳設定為上拉/下拉模式,若設定為1,則将相關引腳設為三态模式,其中P1_0和P1_1沒有上拉/下拉功能,可以不用配置,預設值都為0。
/*
本實驗效果,每按一次按鍵,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;
}
}