天天看點

LPC2124--GPIO按鍵控制LED燈的閃爍 執行個體目的 知識點概括 執行個體描述

執行個體目的:掌握proteus軟體的使用及調試方法,學習io程式設計。

執行個體内容:

 學習使用proteus、ads、keil for arm軟體,掌握繪制原理及編譯程式。

 鍵盤輸入,當檢測到有按鍵輸入時,對發光二極管進行取反控制。使用

i/o口輸入方式對按鍵進行掃描。

執行個體步驟:

 在proteus中繪制原理圖。

 在keil for arm中輸入程式,并編譯通過。

 加載elf程式,觀察仿真結果。

 采用keil for arm與proteus的整合方式聯調。

lpc2000系列作為 “微控制器”,其gpio特性就顯得很

重要。它具有如下的特性:

①可以獨立控制每個gpio口的方向(輸入/輸出模式);

②可以獨立設定每個gpio的輸出狀态(高/低電平);

③所有gpio口在複位後預設為輸入狀态。

lpc2114/2124微控制器具有兩個端口--p0和p1,可以作為gpio使用的引腳數為46個。

lpc2210/2212/2214微控制器還包含另外兩個端口--p2和p3,這個兩個端口與外部存儲器總線複用,當它們全部作為gpio使用時,gpio引腳數多達112個

LPC2124--GPIO按鍵控制LED燈的閃爍 執行個體目的 知識點概括 執行個體描述
LPC2124--GPIO按鍵控制LED燈的閃爍 執行個體目的 知識點概括 執行個體描述
LPC2124--GPIO按鍵控制LED燈的閃爍 執行個體目的 知識點概括 執行個體描述
LPC2124--GPIO按鍵控制LED燈的閃爍 執行個體目的 知識點概括 執行個體描述
LPC2124--GPIO按鍵控制LED燈的閃爍 執行個體目的 知識點概括 執行個體描述
LPC2124--GPIO按鍵控制LED燈的閃爍 執行個體目的 知識點概括 執行個體描述

①引腳設定為輸出方式時,輸出狀态由ioxset和ioxclr中最後操作的寄存器決定;

②大部分gpio輸出為推挽方式(個别引腳為開漏輸出),正常拉出/灌入電流均為4ma(短時間極限值40ma);

③複位後預設所有gpio為輸入模式。。

功能:鍵盤輸入.當檢測到有按鍵輸入時,對發光二極管進行取反控制 使用i/o口輸入方式對按鍵進行掃描

平台:nxp-lpc2124

環境:keil4 + proteus7

要求如圖

LPC2124--GPIO按鍵控制LED燈的閃爍 執行個體目的 知識點概括 執行個體描述
LPC2124--GPIO按鍵控制LED燈的閃爍 執行個體目的 知識點概括 執行個體描述

/******************************************************************************/  

/*  this file is part of the uvision/arm development tools                    */  

/*  copyright keil elektronik gmbh 2002-2004                                  */  

/*******************************************************************************        

*file:main.c 

*功能: 鍵盤輸入.當檢測到有按鍵輸入時,對發光二極管進行取反控制 

*      使用i/o口輸入方式對按鍵進行掃描 

*******************************************************************************/  

#include   "config.h"  

#define     ledcon           0x00000200   // p0.9引腳控制led,低電平點亮  

#define     key              0x00008000   // p0.15引腳連接配接按鍵  

/******************************************************************************* 

*名稱:waitkey() 

*功能:等待一個有效按鍵.本函數有去抖功能 

void waitkey(void)  

{    

    uint32 i;  

    while(1)  

    {   

        // 當按下p0.15以後會輸出低電平, p0.15位為0  

        while((io0pin & key) != 0);          // 等待按鍵按下, io0pin & key) != 0表示io0pin的p0.15不是0, 辨別沒有按下  

        for(i = 0; i < 50000; i++);          // 延時消抖   

        // 電路中的脈沖可能不穩定, 也就是說可能出現, 電平瞬時反轉的情況  

        // 而且按下的過程, 由于兩塊電極有一定的抖動, 這段時間電平不穩定,   

        // 是以應該寫程式消除電極抖動産生的影響  

        //   

        // 我們開始先判斷電極p0.15是不是按下了, 如果按下了, 就延時一定時間再判斷p0.15是不是按下了[p0.15 == 0]  

        // 如果兩次檢測都p0.15 == 0我們才認為是一個有效的按下事件  

        if((io0pin & key) == 0)              // 如果io0pin的p0.15位引腳為0, 說明按下了p0.15  

        {     

            break;                          // 停止等的閃爍  

        }  

    }  

    // 隻有當使用者松開以後, led燈才應該亮  

    while((io0pin & key) == 0);              // 等待按鍵放開  

}  

*名稱:main() 

*功能:讀取按鍵,控制led閃爍 

int main(void)  

{   

    pinsel0 = 0x00000000;                   // 設定所有引腳連接配接gpi0[功能選擇]  

    pinsel1 = 0x00000000;                   //   

    io0dir  |= ledcon;                       // 設定led控制口為輸出,其它i/o為輸入[将p0.9置1, p0.9用于輸出]  

    while( 1 )  

        io0set |= ledcon;                   // 将p0.9引腳設定為輸出高電平 = 1[led燈暗]  

        waitkey( );  

                                            //  将p0.9引腳設定為輸出低電平 = 0[led燈亮]  

        io0clr = ledcon;  

 }  

轉載:http://blog.csdn.net/gatieme/article/details/21593485

繼續閱讀