CC2530學習筆記(2)—— IO埠基本操作實驗(按鍵控制亮燈)
阿新 • • 發佈:2018-11-21
CC2530學習筆記(2)—— IO埠基本操作(按鍵控制亮燈)
關於CC2530的IO埠基本知識、IO埠有關暫存器的介紹和描述請參照:CC2530學習筆記(1)—— IO埠
電路原理圖如圖1所示:
圖1 按鍵和LED燈電路連線原理圖 分析:本操作中不涉及IO埠中斷,採用輪詢方式實現操作。要求按一個按鍵亮一個燈,再按鍵燈熄滅。所以我們需要及時的檢測按鍵是否被按下。原理圖中兩個LED當IO埠輸出低電平時亮,三個按鍵當被按下時IO埠為低電平。
暫存器配置:
- LED對應的P0_1、P0_4配置為通用IO引腳,方向為輸出,初始電平為高電平。
- 按鍵對應的P1_1、P2_0配置為通用IO引腳,方向為輸入。
程式:
/************************************** *本次操作只需新增以下這個標頭檔案 *************************************/ #include <ioCC2530.h> #define LED2 P0_1 #define LED3 P0_4 #define KEY3 P1_1 #define KEY4 P2_0 /*********************************** *初始化LED **********************************/ void LEDInit(void) { /*********LED2************/ P0SEL &= ~(1<<1); //通用IO P0DIR |= 1<<1; //方向為輸出 LED2 = 1; //初始輸出高電平,燈滅 /*********LED3************/ P0SEL &= ~(1<<4); //通用IO P0DIR |= 1<<4; //方向為輸出 LED3 = 1; //初始輸出高電平,燈滅 } /*********************************** *初始化按鍵 **********************************/ void KEYInit(void) { /*********KEY3************/ P1SEL &= ~(1<<1); //通用IO P1DIR &= ~(1<<1); //方向為輸入 /*********KEY3************/ P2SEL &= ~(1<<0); //通用IO P2DIR &= ~(1<<0); //方向為輸入 } /*********************************** *毫秒級延遲函式 **********************************/ void Delayms(unsigned int ms) { unsigned int i,j; for (i = ms; i > 0; i--) { for (j = 587; j > 0; j--); } } /*********************************** *按鍵掃描函式 **********************************/ void KEYScan(void) { if (0 == KEY3)//當KEY3按下 { Delayms(10);//去抖 LED2 = ~LED2; //P0_1輸出狀態取反 } else if(0 == KEY4)//當KEY4按下 { Delayms(10);//去抖 LED2 = ~LED2; //P0_4輸出狀態取反 } } void main() { LEDInit(); KEYInit(); while(1) { KEYScan(); } }
2018.07.10更新:
前面的程式碼中,按鍵掃描函式其實是有點小問題的,改成下面的樣子效果會好些。
/*********************************** *按鍵掃描函式 **********************************/ void KEYScan(void) { if (0 == KEY3)//當KEY3按下 { Delayms(10);//去抖 if (0 == KEY3)//再次判斷 { LED2 = ~LED2; //P0_1輸出狀態取反 } } else if(0 == KEY4)//當KEY4按下 { Delayms(10);//去抖 if(0 == KEY4)//再次判斷 { LED2 = ~LED2; //P0_4輸出狀態取反 } } }