
呵呵,真是越來越懶了,隔了這麼長時間才來更新。 前面學習了如何基于MDK和proteus來建立ARM7的學習環境。今天我們就來實際演練一把,學習一下如何控制LPC2124的GPIO執行輸出操作。 1、執行個體功能:使用LPC2124的P1.18-P1.25這8個端口,控制8個LED實作一系列的LED亮滅實驗。 2、先來了解一下LPC2124的GPIO的一些功能。 LPC2124的64腳封裝最多可以有46個GPIO。GPIO的特性有
- 單獨的方向控制位
- 單獨控制的置位和清零
- 所有I/O在複位後預設為輸入
GPIO的控制寄存器有:
- 管腳值寄存器IOxPIN
- 輸出置位寄存器IOxSET
- 輸出清零寄存器IOxCLR
- 方向寄存器IOxDIR
LPC2124的引腳一般是多個功能複用的,可以通過引腳連接配接子產品在多個功能之間進行選擇。引腳連接配接子產品通過配置寄存器控制多路開關來連接配接引腳和片内外設(寄存器PINSELx)。 引腳連接配接子產品的用途是将引腳設定為需要的功能,可實作獨立的引腳配置。 外設在激活和任何相關中斷使能之前,必須連接配接到适當的引腳。 引腳連接配接子產品包含三個寄存器,分别是PINSEL0,PINSEL1,PINSEL2,其中PINSEL0,PINSEL1這兩個寄存器控制P0口。PINSEL2控制P1口。 例如,要設定P0.0為GPIO功能,則應進行如下設定: PINSEL0=PINSEL0&0xFFFFFFFC,這樣P0.0隻能作為GPIO使用,不能用作其它功能。 是以,GPIO的一般操作步驟是: 先通過PINSELx寄存器,将端口設定為GPIO功能,然後通過IOxDIR寄存器,選擇GPIO是作為輸入還是輸出口。如果作為輸入口,那麼可以通過IOxPIN讀出端口的值。如果作為輸出口,則可以通過IOxSET,IOxCLR設定端口輸出高電平還是低電平 3、通過MDK建立一個GPIO項目工程 #include <lpc21xx.h> #define uint8 unsigned char
#define uint16 unsigend short
#define uint32 unsigned int const uint32 LED8 = (0xff << 18); //8個LED分别連接配接到P1.25-P1.18
void delayms(uint32 delay)
{
uint32 i;
for(;delay > 0;delay--)
for(i = 0;i < 5000;i++);
}
const uint32 LED_TBL[] = {
0x00,0xff, //全部熄滅然後全部點亮
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, //依次逐個點亮
0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff, //依次逐個疊加點亮
0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01, //依次逐個遞減點亮
0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81, //兩個靠攏後分開
0x81,0xc3,0xe7,0xff,0xff,0xe7,0xc3,0x81, //從兩邊疊加後遞減
};
int main(void)
{
uint8 i;
PINSEL2 = PINSEL2 & (~0x80); //設定P1.25-P1.18為GPIO模式
IO1DIR = LED8; //設定為輸出口 while(1) //
{
for(i = 0;i < 42;i++)
{
IO1SET = ~((LED_TBL[i]) << 18); //低電平點亮LED
delayms(100); //
IO1CLR = (LED_TBL[i]) << 18; //
delayms(100);
}
}
}
4、在proteus環境下建立實驗電路 需要說明的是,由于LPC2124的端口輸入電流推薦是4mA,是以需要将LED的屬性修改如下:驅動電壓1.7V,電流4mA。
5、觀察仿真效果