1. 程式人生 > >CC2530微處理器接口開發技術——信號燈的設計與實現

CC2530微處理器接口開發技術——信號燈的設計與實現

函數 位操作 運算符 默認 延時函數 define amp 開發板 延時

  本問主要介紹了CC2530處理器的通用輸入/輸出接口(GPIO),以及GPIO的位操作,理解GPIO的基本原理和功能,最後使用C語言驅動CC2530的GPIO實現對信號燈的控制。

  CC2530的GPIO引腳有3個8位端口,分別是端口0,端口1和端口2,分別表示位P0,P1,P2,其中P0和P1是8位端口,而P2只有5位可用,所有端口均可以通過SFR寄存器來進行位尋址和字節尋址。

  寄存器PxSEL中的x表示端口0~2,用來設置端口的每個引腳位GPIO(0)或者外部設備輸入信號(1),在默認情況下,當復位之後,所有的數字輸入/輸出引腳都設置為通用輸入引腳。

  寄存器PxDIR用來改變一個端口引腳的方向,0設置為輸入,1設置為輸出。

  GPIO一般是通過位操作完成寄存器設置的,而常用的位操作符有按位與“&”,按位或“|”,按位取反“~”,按位異或“^”,以及左移“<<”和右移“>>”操作。值得註意的是常使用按位或運算符將一個數據位置1,比如將P0端口方向寄存器的第一位和第二位置1(P0端口的0和1引腳置為輸出模式),可以寫為P0DIR |= 0x03;常使用按位與“&”將一個數據位置0,比如P0SEL &= ~0x03;,表示將將端口0和1配置位GPIO模式。

  通過查看電路圖,實現CC2530微處理器開發板上的紅燈亮,只需使P0_1為0即可。

  驅動程序如下:

 1 #include "iocc2530.h"
 2 
 3 #define uint unsigned int
 4 #define uchar unsigned char 
 5 
 6 #define Rled P1_1
 7 #define Gled P1_0
 8 #define ON  0
 9 #define OFF 1
10 #define Key1 P1_4
11 
12 void delay(uint n){//定義延時函數
13     uint
i, j; 14 for(i = 0; i < n; i++) 15 for(j = 500; j >= 0; j--); 16 } 17 void key_init(){ 18 P1SEL &= 0x10;//GPIO模式 19 P1DIR &= 0x10;//輸出模式 20 } 21 void led_init(){ 22 P1SEL &= ~0x03;//GPIO模式 23 P1DIR |= 0x03; //輸出模式 24 25 Rled = OFF; 26 Gled = OFF; 27 } 28 void main() 29 { 30 led_init();//led初始化 31 key_init();//案件初始化 32 Rled = ON;//打開紅燈 33 34 while(1){ 35 if(Key1 == ON){ 36 delay(1000); //消抖 37 if(Key1 == ON){ 38 while(Key1 == ON);//松手檢測 39 40 Rled = ~Rled; 41 } 42 } 43 } 44 }

  燒寫完成後,可以看到綠燈常亮,按鍵被按下之後紅燈改變一次狀態,功能完成。

  需要思考的是有時按鍵控制led時不太準確,後者說不太靈敏,從而引入下一節,通過中斷使得按鍵控制led更加準確。

CC2530微處理器接口開發技術——信號燈的設計與實現