下面是我的CC2530的學習筆記之點燈部分。
第一步:分析原理圖
找到需要對應操作的硬件
? 圖 1
通過這個圖1我們可以找到LED1和LED2連接的引腳,分別是P1_0和P1_1。
第二步 分析原理圖
? ?圖 2??
- 通過圖2 確認P1_0和P1_1引腳連接到LED,并且這些引腳可以通過單片機控制。
LED連接到兩個引腳:P1_0和P1_1,這兩個引腳屬于并行IO口。可以看到當P1_0和P1_1輸出高電平時,LED燈就會亮。這兩個引腳由單片機控制,當P1_0和P1_1輸出1(0低電平)時,LED燈亮。
?第三步?查手冊設置引腳和配置寄存器:
第一步 將引腳設為通用模式
????????首先我們要知道 CC2530 有3組端口 P0 P1 P2 ---> P0 P1 有8個引腳 P2 有5個引腳。合起來有21個數字輸入/輸出引腳。可以配置為通用數字I/O或外設I/O信號,配置為連接到ADC、定時器或 USART 外設。這些 I/O 口的用途可以通過一系列寄存器配置,由用戶軟件加以實現。
I/O 端口具備如下重要特性:
- 21 個數字 I/O 引腳
- 可以配置為通用 I/O 或外部設備 I/O
- 輸入口具備上拉或下拉能力
- 具有外部中斷能力。
????????21 個 I/O 引腳都可以用作于外部中斷源輸入口。因此如果需要外部設備可以產生中斷。外部中斷功能也可以從睡眠模式喚醒設備。
????????對于CC2530單片機的P1_0和P1_1引腳,配置為通用I/O口而不是外設I/O口是因為我們需要直接控制這些引腳的電平狀態來實現LED的點亮和熄滅。外設I/O口通常用于特定的硬件外設(如UART、SPI、I2C等),而在這種情況下,選擇通用I/O口更適合用于簡單的引腳電平控制。別糾結 反正就是選通用就對了。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ?圖 4? 此圖來自手冊??
????????我們根據圖3 和圖4 籃框部分可以看到如果我們需要配置端口功能為通用IO口,就選擇PxSEL寄存器因為我們是P1_0和P1_1引腳。 所以我們就選擇P1SEL寄存器。
PxSEL寄存器:?
????????PxSEL寄存器(這里的x可以是0、1或2)用來決定每個引腳的用途。你可以把它想象成一個開關板,每個開關對應一個引腳。這個開關可以讓引腳變成普通的輸入/輸出口(就像家里的開關控制燈的開關),或者讓引腳連接到單片機內部的特殊功能(比如UART、SPI等外設)。
?????????默認情況下,當單片機復位(重啟)后,所有的引腳都會被設置成普通的輸入口。這就像家里的所有開關在重啟后都默認是關閉狀態,等你需要的時候再手動打開。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 5?此圖來自手冊?
? 要將P1_0和P1_1引腳配置為普通I/O口,可以這樣設置:
P1SEL &= ~0x03; /將P1_0和P1_1配置為通用I/O 把第0位和第1位置為0。
引腳從0 開始 0 1 2 3 4 5 6 7 共8位0 0 0 0 0 0 0 0
/// 0 0 0 0 0 0 1 1 如果你要配置為外設IO 就把對應位,置為1就可以了
?第二步 設置引腳方向為輸出
????????在將方向設置為輸出的時候,我們要先知道什么是輸入輸出,不需要多懂,簡單了解一下就好了,懂這個為啥設為輸出即可。
輸入:輸入是指檢測各個引腳上的電平狀態。
電平狀態:電平狀態分為高電平和低電平。高電平表示有電壓,通常用數字符號1表示;低電平表示接地,通常用數字符號0表示。
應用示例:一個常見的輸入例子是按鈕。當按鈕按下時,引腳檢測到高電平(1);當按鈕松開時,引腳檢測到低電平(0)。
輸出:輸出是指控制引腳電平的高低狀態。
電平狀態:通過設置引腳的電平狀態,可以控制外部設備。例如,高電平(1)可以點亮LED,低電平(0)可以熄滅LED。
應用示例:你提供的圖片就是一個輸出的例子。P1_0和P1_1引腳通過電阻連接到LED,當引腳輸出高電平時,LED亮起;當引腳輸出低電平時,LED熄滅。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 6?此圖來自手冊?
???????????????????????????????????????????????????????????????? ? ? 圖? 7
???????我們根據圖6?和圖7?籃框部分可以看到如果我們需要配置改變方向為輸入,就選擇PxDIR寄存器因為我們是P1_0和P1_1引腳。 所以我們就選擇P1DIR寄存器。
PxDIR寄存器的作用
????????PxDIR寄存器就像一個控制面板,用來決定每個引腳是作為輸入還是輸出。每個引腳都有一個對應的開關(位),你可以通過這個開關來設置引腳的方向是輸入還是輸出。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 8
代碼如下:
P1SEL &= ~0x03; /將P1_0和P1_1配置為通用I/O
P1DIR |= 0x03; // 將P1_0和P1_1設置為輸出
?寫到這里我們的寄存器配置就完成了。
?第四步 軟延時
void delay(int num)
{ int i = 0; for(i = 0; i < num; i++) { int j = 0; for(j = 0; j <400; j++) {}}
}
這個軟延時不精準,但是能達到延時的作用了,為了閃爍嘛
下面我們就可以來編寫簡單的LED閃爍的代碼了,下面是代碼的流程圖;
代碼
那下面就請你根據這個圖來完善你的代碼嘍 實現LED燈閃爍
#include "ioCC2530.h"
#define LED1 P1_0
#define LED2 P1_1 void LED_Init()
{ P1SEL &= ~0X03; P1DIR |= 0X03; LED1 = 0; LED2 = 0;
} void delay(int num)
{ int i = 0; for(i = 0; i < num; i++) { int j = 0; for(j = 0; j <400; j++) ; }
} void main()
{ LED_Init(); while(1) {LED1 = !LED1; LED2 = !LED2; delay(1000); }
}
蕪湖 完結 撒花
附上原理圖????????