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个

GPIO与控制寄存器的关系

相关寄存器描述

GPIO引脚值寄存器-IOxPIN

GPIO方向控制寄存器-IOxDIR:

GPIO输出置位寄存器-IOxSET:

GPIO输出清零寄存器-IOxCLR:

注意

①引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作的寄存器决定;
②大部分GPIO输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为4mA(短时间极限值40mA);
③复位后默认所有GPIO为输入模式。。

实例描述

功能:键盘输入.当检测到有按键输入时,对发光二极管进行取反控制 使用I/O口输入方式对按键进行扫描

平台:NXP-LPC2124

环境:Keil4 + Proteus7

要求如图

[cpp] view plain copy print?

  1. /******************************************************************************/  
  2. /*  This file is part of the uVision/ARM development tools                    */  
  3. /*  Copyright KEIL ELEKTRONIK GmbH 2002-2004                                  */  
  4. /*******************************************************************************        
  5. *File:Main.c 
  6. *功能: 键盘输入.当检测到有按键输入时,对发光二极管进行取反控制 
  7. *      使用I/O口输入方式对按键进行扫描 
  8. *******************************************************************************/  
  9.   
  10. #include   "config.h"  
  11.   
  12.   
  13. #define     LEDCON           0x00000200   // P0.9引脚控制LED,低电平点亮  
  14. #define     KEY              0x00008000   // P0.15引脚连接按键  
  15.   
  16. /******************************************************************************* 
  17. *名称:WaitKey() 
  18. *功能:等待一个有效按键.本函数有去抖功能 
  19. *******************************************************************************/  
  20.   
  21. void WaitKey(void)  
  22. {    
  23.     uint32 i;  
  24.     while(1)  
  25.     {   
  26.         // 当按下P0.15以后会输出低电平, P0.15位为0  
  27.         while((IO0PIN & KEY) != 0);          // 等待按键按下, IO0PIN & KEY) != 0表示IO0PIN的P0.15不是0, 标识没有按下  
  28.           
  29.         for(i = 0; i < 50000; i++);          // 延时消抖   
  30.         // 电路中的脉冲可能不稳定, 也就是说可能出现, 电平瞬时反转的情况  
  31.         // 而且按下的过程, 由于两块电极有一定的抖动, 这段时间电平不稳定,   
  32.         // 因此应该写程序消除电极抖动产生的影响  
  33.         //   
  34.         // 我们开始先判断电极P0.15是不是按下了, 如果按下了, 就延时一定时间再判断P0.15是不是按下了[p0.15 == 0]  
  35.         // 如果两次检测都P0.15 == 0我们才认为是一个有效的按下事件  
  36.           
  37.         if((IO0PIN & KEY) == 0)              // 如果IO0PIN的P0.15位引脚为0, 说明按下了P0.15  
  38.         {     
  39.             break;                          // 停止等的闪烁  
  40.         }  
  41.     }  
  42.      
  43.     // 只有当用户松开以后, LED灯才应该亮  
  44.     while((IO0PIN & KEY) == 0);              // 等待按键放开  
  45. }  
  46.   
  47. /******************************************************************************* 
  48. *名称:main() 
  49. *功能:读取按键,控制LED闪烁 
  50. *******************************************************************************/  
  51. int main(void)  
  52. {   
  53.     PINSEL0 = 0x00000000;                   // 设置所有引脚连接GPI0[功能选择]  
  54.     PINSEL1 = 0x00000000;                   //   
  55.   
  56.     IO0DIR  |= LEDCON;                       // 设置LED控制口为输出,其它I/O为输入[将P0.9置1, P0.9用于输出]  
  57.       
  58.     while( 1 )  
  59.     {   
  60.         IO0SET |= LEDCON;                   // 将P0.9引脚设置为输出高电平 = 1[LED灯暗]  
  61.         WaitKey( );  
  62.                                             //  将P0.9引脚设置为输出低电平 = 0[LED灯亮]  
  63.         IO0CLR = LEDCON;  
  64.         WaitKey( );  
  65.   
  66.     }  
  67.  }  

转载:http://blog.csdn.net/gatieme/article/details/21593485

时间: 2024-11-16 10:56:27

LPC2124--GPIO按键控制LED灯的闪烁的相关文章

lpc1768-用串口接收字符为命令来控制LED灯,该怎么写程序?(LPC1768)

问题描述 用串口接收字符为命令来控制LED灯,该怎么写程序?(LPC1768) 用串口助手发送特定字符来控制LED的亮灭?? 或者给个思路吧!核心的代码写一点也好啊! 有没有大神帮忙把控制部分的程序写下,谢谢啦!刚开始学,请教啊! 解决方案 继电器应该有自己的串口命令吧,你发命令就行了 解决方案二: 买来继电器后 会给你接口的 解决方案三: 单片机接收字符,然后判断,然后使能对应的LED

net4 5-C#控制LED灯总算发送是失败

问题描述 C#控制LED灯总算发送是失败 主程序 using LedDemo.Common; using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using Syste

蓝牙模块控制LED灯的简单程序

问题描述 蓝牙模块控制LED灯的简单程序 怎么实现手机和蓝牙模块的通信,手机发送的值是SBUF吗,直接用就可以吗.我想用数字0控制灯灭,手机只要发送一个0吗,SBUF=0? 解决方案 http://www.dzsc.com/data/2014-9-26/106862.html 解决方案二: 看我博客!有详细说明......

FPGA学习之按键控制led

按键控制led 设计要求:通过8个按键分别控制一个led的亮灭.   该实验有两个模块:按键缓存模块和由按键值控制led模块 按键缓存模块:通过二级缓存,将按键值存入key_r1,防止按键时产生的尖峰脉冲影响按键值. 由按键值控制led模块:采用case语句,一一对应控制led的亮灭.   顶层代码: module keyled(clk,rst_n,key,led);   input clk; input rst_n; input [7:0]key; output [7:0]led;   //二

socket通信——多角度控制LED灯亮灭

今天以物联网网关(网关链接)以服务器,在多个客户端就做一个非常简单的功能:点亮或熄灭网关上的LED灯.目前想到了三种方式,分别是:TCP&UDP测试工具.自编Java客户端和Mono Android客户端.相信这会很有意思的.   1.服务器端 在使用或编写客户端之前,首先来看看服务器端代码,其专门通过串口烧进网关内部 OutputPort led = new OutputPort((Cpu.Pin)GPIO_NAMES.PF8, false); Socket sc; Socket ss = n

控制Android LED灯颜色的代码实例_Android

很多Android手机上都配有LED灯,比如HTC的手机在充电.新来短信等时候都会有响应的指示,其实很简单的这都是NotificationManager的一些参数而已,下面Android123给大家说下如何通过代码控制LED灯的闪烁,因为有些机型没有LED灯或颜色种类较少,发布时需要真机观察. 复制代码 代码如下:         final int ID_LED=19871103;         NotificationManager nm=(NotificationManager)getS

控制Android LED灯颜色的代码实例

很多Android手机上都配有LED灯,比如HTC的手机在充电.新来短信等时候都会有响应的指示,其实很简单的这都是NotificationManager的一些参数而已,下面Android123给大家说下如何通过代码控制LED灯的闪烁,因为有些机型没有LED灯或颜色种类较少,发布时需要真机观察. 复制代码 代码如下:        final int ID_LED=19871103;         NotificationManager nm=(NotificationManager)getSy

Tiny4412开发板 LED灯的控制

exynos4412裸版控制led灯. 1.查看电路图. 2.查看4412手册.找到对应的寄存器. 3.配置对应的寄存器. 一.再开发板上我们的外部设备led,在核心板.所以我们需要打开核心板电路图.   zshh@HP:~/work/arm/arm资料/exynos4412_lzy/schematic$ lsLCD-HD700-1306.pdf   Tiny4412_1306_core_board_sch.pdfLCD-S701-121212.pdf  Tiny4412SDK_1306_mai

《JavaScript机器人编程指南》——1.6 Hello,World!——让板载LED灯闪烁

1.6 Hello,World!--让板载LED灯闪烁 现在我们已经搭建好开发环境了,可以通过写JavaScript来使用我们的Arduino开发板了.我们会从Arduino微控制器上的LED灯闪烁开始. 1.6.1 编写Johnny-Five脚本 使用你喜爱的IDE,在你的项目目录中创建一个hello-world.js文件.然后,复制粘贴或键入如下代码. var five = require("johnny-five"); var board = new five.Board();