在本教程中,我們將學習如何使用另一個IO 引腳作為輸入并控制額外的 LED。在不浪費太多時間的情況下,讓我們評估一下我們需要什么樣的硬件設置。
硬件設置和要求
由于需要將開關用作輸入,我們首先需要的是一個按鈕。我們還需要一個額外的 LED 來由該按鈕控制。除了這兩個之外,我們還需要一個電阻器來限制 LED 電流,以及一個用于下拉按鈕的附加電阻器。這將在示意圖部分進一步說明。我們需要的組件 -
一個按鈕(任何種類的瞬時開關,特別是觸覺開關)
LED的任何顏色
4.7k 下拉電阻
100R電阻
更不用說,除了上述組件,我們還需要基于N76E003 微控制器的開發板以及Nu-Link 編程器。此外,還需要面包板和連接線來連接所有組件,如下所示。
N76E003 LED和按鈕接口電路
正如我們在下面的示意圖中看到的,開發板內部的測試 LED 連接在端口 1.4上,另外一個 LED 連接在端口 1.5上。電阻 R3 用于限制 LED 電流。
在引腳 1.6 中,連接了一個名為 SW 的按鈕。每當按下按鈕時,引腳將變為高電平。否則會被 4.7K的下拉電阻R1 拉低。
該引腳也是編程器訪問的與程序相關的引腳。它用于發送程序數據。但是,我們將看到選擇這些引腳的原因,并獲得有關N76E003 引腳映射的公平信息。
N76E003 引腳圖
N76E003的引腳圖如下圖所示——
正如我們所看到的,每個引腳都有多種功能,可以用于不同的目的。讓我們舉個例子。引腳 1.7 可用作中斷、模擬輸入或通用輸入輸出操作。因此,如果任何引腳用作 I/O 引腳,則相應的功能將不可用。
因此,用作 LED 輸出引腳的引腳 1.5 將失去 PWM 和其他功能。但這不是問題,因為該項目不需要其他功能。之所以選擇引腳 1.5 作為輸出,引腳 1.6 作為輸入,是因為 GND 和 VDD 引腳最近可用,便于連接。
但是,在這個微控制器的 20 個引腳中,有 18 個引腳可以用作 GPIO 引腳。引腳 2.0 專用于復位輸入,不能用作輸出。除此引腳外,所有引腳均可配置為下述模式。
根據數據表,PxM1.n 和 PxM2.n 是兩個寄存器,用于確定 I/O 端口的控制操作。現在,開始寫入和讀取 GPIO 端口是完全不同的事情。因為寫入端口控制寄存器會改變端口的鎖存狀態,而讀取端口會獲得邏輯狀態的狀態。但要讀取端口,必須將其設置為輸入模式。
N76E003 的簡單 GPIO 控制程序
本教程使用的完整程序可以在本頁底部找到,代碼解釋如下。
將引腳設置為輸入
讓我們先從輸入開始。如前所述,要讀取端口的狀態,需要將其設置為輸入。因此,由于我們選擇了 P1.6 作為我們的輸入開關引腳,我們通過下面的代碼片段行來表示它。
#define SW P16
需要將相同的引腳設置為輸入。因此,在設置功能上,使用下面的行將引腳設置為輸入。
無效設置(無效){
P14_準模式;
P15_準模式;
P16_輸入模式;
}
這一行P16_Input_Mode; 在“BSP include library”的Function_define.h頭文件中定義,將pin位設置為P1M1|=SET_BIT6; P1M2&=~SET_BIT6。SET_BIT6也在同一個頭文件中定義為 -
#define SET_BIT6 0x40
將引腳設置為輸出
與輸入引腳相同,板載測試 LED 和外部 LED1 使用的輸出引腳也在代碼的第一部分中定義了各自的引腳。
#define Test_LED P14
#define LED1 P15
這些引腳使用以下行在設置函數中設置為輸出。
無效設置(無效){
P14_Quasi_Mode; // 輸出
P15_準模式;// 輸出
P16_輸入模式;
}
這些行也在Function_define.h頭文件中定義,它將引腳位設置為P1M1&=~SET_BIT4; P1M2&=~SET_BIT4。SET_BIT6也在同一個頭文件中定義為 -
#define SET_BIT4 0x10
無限循環
一個硬件,如果連接到電源并且工作正常,應該連續輸出,應用程序永遠不會停止。它無限次地做同樣的事情。無限while循環的功能來了。while 循環內的應用程序無限運行。
而(1){
Test_LED = 0;
sw_delay(150);
測試_LED = 1;
sw_delay(150);
如果(SW == 1){
LED1 = 0;
}
其他 {
LED1 = 1;
}
}
}
上面的 while 循環根據sw_delay值使 LED 閃爍,并檢查 SW 的狀態。如果開關被按下,P1.6 為高電平,因此當按下時,讀取狀態為 1。在這種情況下,當開關被按下并且端口 P1.6 保持高電平時, LED1 將發光。
對 N76E003 進行編程并驗證輸出
在我們的 N76E003 入門教程中,我們已經學習了如何對 N76E003 進行編程,因此我們將在這里重復相同的步驟來對我們的電路板進行編程。代碼編譯成功,返回0個warning和0個Errors,使用Keil默認的刷機方式刷機。
如上圖所示,當我按下按鈕時,我們的外部 LED 會亮起。
#include "N76E003.h"
#include "SFR_Macro.h"
#include "函數定義.h"
#include "Common.h"
#include "延遲.h"
#define Test_LED P14
#define LED1 P15
#define SW P16
無效設置(無效);
無效 sw_delay (int ms);
無效的主要(無效){
設置();
而(1){ Test_LED = 0;
sw_delay(150);
測試_LED = 1;
sw_delay(150);
如果(SW == 1){
LED1 = 0;
}
別的 {
LED1 = 1;
}
}
}
// 基于軟件的延遲。時間不準確。
無效 sw_delay (int ms){
整數a,b;
對于(a=0;a<1296;a++){
對于 (b=0; b
}
//這是應用程序運行前的設置文件
無效設置(無效){
P14_準模式;
P15_準模式;
P16_輸入模式;
}
-
led
+關注
關注
242文章
23295瀏覽量
661268 -
LED閃爍
+關注
關注
0文章
29瀏覽量
9822 -
IO引腳
+關注
關注
0文章
10瀏覽量
9409
發布評論請先 登錄
相關推薦
評論