天天看点

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

继续阅读