基于LPC1114的学习型红外遥控器

发布者:火星叔叔最新更新时间:2016-08-08 来源: eefocus关键字:LPC1114  学习型  红外遥控器 手机看文章 扫描二维码
随时随地手机看文章
一、LPC11XX GPIO操作

2010年3月8日,一个让我:(作者,非本人:)刻骨铭心的日子,38妇女节,收到婷婷的电路板非常高兴,盼望半年之久的LPC CM0终于拿到了。

在此对婷婷的表示衷心的感谢,感谢党,感谢人民给我这次学习机会。闲话少说,进入正题。

LPC11XX我就不介绍了。学习型红外遥控器也不介绍了。有不懂的地方大家可以baidu一下。

本设计就是采用LPC1114+OLED+红外接收头构成一个学习型红外遥控器,

安装LPCxpress,后插入LPC-Link 自动识别,

系统多出一个

【NXP原创贴大赛】--基于LPC1114的学习型红外遥控器 - 孤独的牧羊人 - 嵌入式网络人生

然后打开11XX的例程,正常安装路径在C:\nxp \lpcxpresso_3.1\Examples\LPC1000\LPC11xx下

文件名字 LPCXpresso1114_v1.00.zip

然后点击GPIO程序,打开GPIOtest.c开始学习。

发现和普通的 8位机真的相差很多,用了很多类似函数(库)的东西。

别的不管,先来个最简单的闪烁灯。

找到函数

功能:(设置 GPIO口方向),参数(端口号,位,输入或输出(0入1出))
GPIOSetDir( PORT0, 1, 0 );

GPIOSetValue()

一个是设置端口方向,一个是设置输出的值,直接调用就可以了。

下面是我的程序,本人菜鸟一只,程序也不会写,希望大家拍砖的话,别往死里拍,呵呵。

用的是P32的口。输出1的时候点亮LED。

/*****************************************************************************
 *   gpiotest.c:  main C entry file for NXP LPC11xx Family Microprocessors
 *
 *   Copyright(C) 2008, NXP Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2009.12.07  ver 1.00    Preliminary version, first Release
 *
******************************************************************************/
#include "LPC11xx.h"   /* LPC11xx Peripheral Registers */
#include "gpio.h"

/*****************************************************************************
**   Main Function  main()
******************************************************************************/
int main (void)
{
  /* Basic chip initialization is taken care of in SystemInit() called
   * from the startup code. SystemInit() and chip settings are defined
   * in the CMSIS system_.c file.
   */
  uint32_t a=60000;
  GPIOInit();
  GPIOSetDir(PORT3,2,1);
  while(1)
  {
   a=160000;
   while(a--);
   GPIOSetValue(PORT3,2,0);
   a=160000;
   while(a--);
   GPIOSetValue(PORT3,2,1);

  }

  /* use port0_1 as input event, interrupt test. */
  GPIOSetDir( PORT0, 1, 0 );
  /* port0_1, single trigger, active high. */
  GPIOSetInterrupt( PORT0, 1, 0, 0, 0 );
  GPIOIntEnable( PORT0, 1 );

  /* use port1_1 as input event, interrupt test. */
  GPIOSetDir( PORT1, 1, 0 );
  /* port0_1, single edge trigger, active high. */
  GPIOSetInterrupt( PORT1, 1, 0, 0, 0 );
  GPIOIntEnable( PORT1, 1 );

  /* use port2_1 as input event, interrupt test. */
  GPIOSetDir( PORT2, 1, 0 );
  /* port0_1, single edge trigger, active high. */
  GPIOSetInterrupt( PORT2, 1, 0, 0, 0 );
  GPIOIntEnable( PORT2, 1 );

  /* use port3_1 as input event, interrupt test. */
  GPIOSetDir( PORT3, 1, 0 );
  /* port0_1, single edge trigger, active high. */
  GPIOSetInterrupt( PORT3, 1, 0, 0, 0 );
  GPIOIntEnable( PORT3, 1 );

  while( 1 );
}

/*********************************************************************************
**                            End Of File
*********************************************************************************/
 


[最后修改于2010-03-10 12:51:40]
使用Keil MDK +ULink2开发LPC11XX

LPCXpresso软件虽然不错,但还是没有常用的KEIL IAR 顺手,怎么说也是用惯了,一狠心,买了个ULINK2,从今天开始使用MDK +ULink2开发LPC1114。

先来介绍一下软件部分,使用新版本 MDK 410B(www.mcu123.com有下载),无缝支持LPC1114,安装完软件后,ulink2插到电脑usb口可以自动识别,新建工程,选NXP LPC1114 301 芯片,一路下来没什么问题,关键是ULINK2的配置。

上图。

【NXP原创贴大赛】--基于LPC1114的学习型红外遥控器 - 孤独的牧羊人 - 嵌入式网络人生

【NXP原创贴大赛】--基于LPC1114的学习型红外遥控器 - 孤独的牧羊人 - 嵌入式网络人生

由于LPC11XX不支持JTAG ,所以只能用图中的SW方式了。

硬件方面,LPC1114的板子需要修改,把LPC-LINK和LPC1114要断开,就是电路图J4的部分,把PCB划开后,焊上2.54间距排针,

以后想用LPCXpresso软件带LPC-link的话跳线就可以用了。一举两得。

上图。

【NXP原创贴大赛】--基于LPC1114的学习型红外遥控器 - 孤独的牧羊人 - 嵌入式网络人生


在来个图。和闪烁灯的程序。

【NXP原创贴大赛】--基于LPC1114的学习型红外遥控器 - 孤独的牧羊人 - 嵌入式网络人生

 

 

 

 

#include
#include
//---------------------------------------------------------
void sysint(void);
//---------------------------------------------------------
main(void)
{
uint32_t i;
  /* Enable AHB clock to the GPIO domain. */
  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);
  /* Set up NVIC when I/O pins are configured as external interrupts. */
  NVIC_EnableIRQ(EINT0_IRQn);
  NVIC_EnableIRQ(EINT1_IRQn);
  NVIC_EnableIRQ(EINT2_IRQn);
  NVIC_EnableIRQ(EINT3_IRQn);
  LPC_GPIO0->DIR=0xFF;
  while(1)
  {
    LPC_GPIO0->DATA=~LPC_GPIO0->DATA;
 i=300000;
 while(i--);
  }
}
//---------------------------------------------------------
void sysint (void)
{
//  uint32_t i;

#ifdef __DEBUG_RAM   
  LPC_SYSCON->SYSMEMREMAP = 0x1;  /* remap to internal RAM */
#else
#ifdef __DEBUG_FLASH   
  LPC_SYSCON->SYSMEMREMAP = 0x2;  /* remap to internal flash */
#endif
#endif

#if (CLOCK_SETUP)                       /* Clock Setup */
  /* bit 0 default is crystal bypass,
  bit1 0=0~20Mhz crystal input, 1=15~50Mhz crystal input. */
  LPC_SYSCON->SYSOSCCTRL = 0x00;

  /* main system OSC run is cleared, bit 5 in PDRUNCFG register */
  LPC_SYSCON->PDRUNCFG &= ~(0x1<<5);
  /* Wait 200us for OSC to be stablized, no status
  indication, dummy wait. */
  for ( i = 0; i < 0x100; i++ );

#if (MAIN_PLL_SETUP)
  Main_PLL_Setup(); 
#endif

#endif /* endif CLOCK_SETUP */

  /* System clock to the IOCON needs to be enabled or
  most of the I/O related peripherals won't work. */
  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16);
  return;
}
 

心情:利用了2天的业余时间,终于LED灯闪亮了,感觉LPC1114的功能真的很强大,比一般的51单片机复杂的多。以后要多努力学习了。
不知不觉已经11点多了。在喝一瓶,洗洗睡了。
GPIO"库"函数中文说明

NXP的LPC11XX功能很强大。"库"函数也非常多,功能也很强大,充分理解"库"函数能帮助我们快速学习LPC11XX,下面是英文和中文"库"函数的翻译,希望能帮助大家快速学习LPC11XX,以后我会抽出时间,翻译其他功能的"库"函数。

/*****************************************************************************
 *   gpio.c:  GPIO C file for NXP LPC11xx Family Microprocessors
 *
 *   Copyright(C) 2008, NXP Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2008.07.20  ver 1.00    Prelimnary version, first Release
 *
*****************************************************************************/
#include "LPC11xx.h"   /* LPC11xx Peripheral Registers */
#include "gpio.h"

/* Shadow registers used to prevent chance of read-modify-write errors */
/* Ultra-conservative approach... */
volatile uint32_t GPIOShadowPort0;
volatile uint32_t GPIOShadowPort1;
volatile uint32_t GPIOShadowPort2;
volatile uint32_t GPIOShadowPort3;

volatile uint32_t gpio0_counter = 0;
volatile uint32_t gpio1_counter = 0;
volatile uint32_t gpio2_counter = 0;
volatile uint32_t gpio3_counter = 0;
volatile uint32_t p0_1_counter  = 0;
volatile uint32_t p1_1_counter  = 0;
volatile uint32_t p2_1_counter  = 0;
volatile uint32_t p3_1_counter  = 0;

/*****************************************************************************
** Function name:  PIOINT0_IRQHandler
**
** Descriptions:  Use one GPIO pin(port0 pin1) as interrupt source
**
** parameters:   None
** Returned value:  None
**
*****************************************************************************/
void PIOINT0_IRQHandler(void)
{
  uint32_t regVal;

  gpio0_counter++;
  regVal = GPIOIntStatus( PORT0, 1 );
  if ( regVal )
  {
 p0_1_counter++;
 GPIOIntClear( PORT0, 1 );
  }  
  return;
}

/*****************************************************************************
** Function name:  PIOINT1_IRQHandler
**
** Descriptions:  Use one GPIO pin(port1 pin1) as interrupt source
**
** parameters:   None
** Returned value:  None
**
*****************************************************************************/
void PIOINT1_IRQHandler(void)
{
  uint32_t regVal;

  gpio1_counter++;
  regVal = GPIOIntStatus( PORT1, 1 );
  if ( regVal )
  {
 p1_1_counter++;
 GPIOIntClear( PORT1, 1 );
  }  
  return;
}

/*****************************************************************************
** Function name:  PIOINT2_IRQHandler
**
** Descriptions:  Use one GPIO pin(port2 pin1) as interrupt source
**
** parameters:   None
** Returned value:  None
**
*****************************************************************************/
void PIOINT2_IRQHandler(void)
{
  uint32_t regVal;

  gpio2_counter++;
  regVal = GPIOIntStatus( PORT2, 1 );
  if ( regVal )
  {
 p2_1_counter++;
 GPIOIntClear( PORT2, 1 );
  }  
  return;
}

/*****************************************************************************
** Function name:  PIOINT3_IRQHandler
**
** Descriptions:  Use one GPIO pin(port3 pin1) as interrupt source
**
** parameters:   None
** Returned value:  None
**
*****************************************************************************/
void PIOINT3_IRQHandler(void)
{
  uint32_t regVal;

  gpio3_counter++;
  regVal = GPIOIntStatus( PORT3, 1 );
  if ( regVal )
  {
 p3_1_counter++;
 GPIOIntClear( PORT3, 1 );
  }  
  return;
}

/*****************************************************************************
** Function name:  GPIOInit
**
** Descriptions:  Initialize GPIO, install the
**      GPIO interrupt handler
**
** parameters:   None
** Returned value:  true or false, return false if the VIC table
**      is full and GPIO interrupt handler can be
**      installed.
**
*****************************************************************************/
void GPIOInit( void )
{
  /* Enable AHB clock to the GPIO domain. */
  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);

#ifdef __JTAG_DISABLED 
  LPC_IOCON->JTAG_TDO_PIO1_1  &= ~0x07;
  LPC_IOCON->JTAG_TDO_PIO1_1  |= 0x01;
#endif

  /* Set up NVIC when I/O pins are configured as external interrupts. */
  NVIC_EnableIRQ(EINT0_IRQn);
  NVIC_EnableIRQ(EINT1_IRQn);
  NVIC_EnableIRQ(EINT2_IRQn);
  NVIC_EnableIRQ(EINT3_IRQn);
  return;
}

/*****************************************************************************
** Function name:  GPIOSetDir
**
** Descriptions:  Set the direction in GPIO port
**
** parameters:   port num, bit position, direction (1 out, 0 input)
** Returned value:  None
**
*****************************************************************************/
void GPIOSetDir( uint32_t portNum, uint32_t bitPosi, uint32_t dir )
{
  /* if DIR is OUT(1), but GPIOx_DIR is not set, set DIR
  to OUT(1); if DIR is IN(0), but GPIOx_DIR is set, clr
  DIR to IN(0). All the other cases are ignored.
  On port3(bit 0 through 3 only), no error protection if
  bit value is out of range. */
  switch ( portNum )
  {
 case PORT0:
   if ( !(LPC_GPIO0->DIR & (0x1<   LPC_GPIO0->DIR |= (0x1<    else if ( (LPC_GPIO0->DIR & (0x1<   LPC_GPIO0->DIR &= ~(0x1<  break;
  case PORT1:
   if ( !(LPC_GPIO1->DIR & (0x1<   LPC_GPIO1->DIR |= (0x1<    else if ( (LPC_GPIO1->DIR & (0x1<   LPC_GPIO1->DIR &= ~(0x1<  break;
 case PORT2:
   if ( !(LPC_GPIO2->DIR & (0x1<   LPC_GPIO2->DIR |= (0x1<    else if ( (LPC_GPIO2->DIR & (0x1<   LPC_GPIO2->DIR &= ~(0x1<  break;
 case PORT3:
   if ( !(LPC_GPIO3->DIR & (0x1<   LPC_GPIO3->DIR |= (0x1<    else if ( (LPC_GPIO3->DIR & (0x1<   LPC_GPIO3->DIR &= ~(0x1<  break;
 default:
   break;
  }
  return;
}

/*****************************************************************************
** Function name:  GPIOSetValue
**
** Descriptions:  Set/clear a bitvalue in a specific bit position
**      in GPIO portX(X is the port number.)
**
** parameters:   port num, bit position, bit value
** Returned value:  None
**
*****************************************************************************/
void GPIOSetValue( uint32_t portNum, uint32_t bitPosi, uint32_t bitVal )
{
  /* if bitVal is 1, the bitPosi bit is set in the GPIOShadowPortx. Then
   * GPIOShadowPortx is written to the I/O port register. */
  switch ( portNum )
  {
 case PORT0:
   if(bitVal)
  GPIOShadowPort0 |= (1<    else
  GPIOShadowPort0 &= ~(1<

   /* Use of shadow prevents bit operation error if the read value
   * (external hardware state) of a pin differs from the I/O latch
   * value. A potential side effect is that other GPIO code in this
   * project that is not aware of the shadow will have its GPIO
   * state overwritten.
   */
  LPC_GPIO0->DATA = GPIOShadowPort0;
 break;
  case PORT1:
  if(bitVal)
   GPIOShadowPort1 |= (1<   else
   GPIOShadowPort1 &= ~(1<

  LPC_GPIO1->DATA = GPIOShadowPort1;
 break;
 case PORT2:
  if(bitVal)
   GPIOShadowPort2 |= (1<   else
   GPIOShadowPort2 &= ~(1<

  LPC_GPIO2->DATA = GPIOShadowPort2;
 break;
 case PORT3:
  if(bitVal)
   GPIOShadowPort3 |= (1<   else
   GPIOShadowPort3 &= ~(1<

  LPC_GPIO3->DATA = GPIOShadowPort3;
 break;
 default:
   break;
  }
  return;
}

/*****************************************************************************
** Function name:  GPIOSetInterrupt
**
** Descriptions:  Set interrupt sense, event, etc.
**      edge or level, 0 is edge, 1 is level
**      single or double edge, 0 is single, 1 is double
**      active high or low, etc.
**
** parameters:   port num, bit position, sense, single/doube, polarity
** Returned value:  None
**
*****************************************************************************/
void GPIOSetInterrupt( uint32_t portNum, uint32_t bitPosi, uint32_t sense,
   uint32_t single, uint32_t event )
{
  switch ( portNum )
  {
 case PORT0:
   if ( sense == 0 )
   {
  LPC_GPIO0->IS &= ~(0x1<   /* single or double only applies when sense is 0(edge trigger). */
  if ( single == 0 )
    LPC_GPIO0->IBE &= ~(0x1<   else
    LPC_GPIO0->IBE |= (0x1<    }
   else
    LPC_GPIO0->IS |= (0x1<    if ( event == 0 )
  LPC_GPIO0->IEV &= ~(0x1<    else
  LPC_GPIO0->IEV |= (0x1<  break;
  case PORT1:
   if ( sense == 0 )
   {
  LPC_GPIO1->IS &= ~(0x1<   /* single or double only applies when sense is 0(edge trigger). */
  if ( single == 0 )
    LPC_GPIO1->IBE &= ~(0x1<   else
    LPC_GPIO1->IBE |= (0x1<    }
   else
    LPC_GPIO1->IS |= (0x1<    if ( event == 0 )
  LPC_GPIO1->IEV &= ~(0x1<    else
  LPC_GPIO1->IEV |= (0x1<  break;
 case PORT2:
   if ( sense == 0 )
   {
  LPC_GPIO2->IS &= ~(0x1<   /* single or double only applies when sense is 0(edge trigger). */
  if ( single == 0 )
    LPC_GPIO2->IBE &= ~(0x1<   else
    LPC_GPIO2->IBE |= (0x1<    }
   else
    LPC_GPIO2->IS |= (0x1<    if ( event == 0 )
  LPC_GPIO2->IEV &= ~(0x1<    else
  LPC_GPIO2->IEV |= (0x1<  break;
 case PORT3:
   if ( sense == 0 )
   {
  LPC_GPIO3->IS &= ~(0x1<   /* single or double only applies when sense is 0(edge trigger). */
  if ( single == 0 )
    LPC_GPIO3->IBE &= ~(0x1<   else
    LPC_GPIO3->IBE |= (0x1<    }
   else
    LPC_GPIO3->IS |= (0x1<    if ( event == 0 )
  LPC_GPIO3->IEV &= ~(0x1<    else
  LPC_GPIO3->IEV |= (0x1<  break;
 default:
   break;
  }
  return;
}

/*****************************************************************************
** Function name:  GPIOIntEnable
**
** Descriptions:  Enable Interrupt Mask for a port pin.
**
** parameters:   port num, bit position
** Returned value:  None
**
*****************************************************************************/
void GPIOIntEnable( uint32_t portNum, uint32_t bitPosi )
{
  switch ( portNum )
  {
 case PORT0:
   LPC_GPIO0->IE |= (0x1<  break;
  case PORT1:
   LPC_GPIO1->IE |= (0x1<  break;
 case PORT2:
   LPC_GPIO2->IE |= (0x1<  break;
 case PORT3:
   LPC_GPIO3->IE |= (0x1<  break;
 default:
   break;
  }
  return;
}

/*****************************************************************************
** Function name:  GPIOIntDisable
**
** Descriptions:  Disable Interrupt Mask for a port pin.
**
** parameters:   port num, bit position
** Returned value:  None
**
*****************************************************************************/
void GPIOIntDisable( uint32_t portNum, uint32_t bitPosi )
{
  switch ( portNum )
  {
 case PORT0:
   LPC_GPIO0->IE &= ~(0x1<  break;
  case PORT1:
   LPC_GPIO1->IE &= ~(0x1<  break;
 case PORT2:
   LPC_GPIO2->IE &= ~(0x1<  break;
 case PORT3:
   LPC_GPIO3->IE &= ~(0x1<  break;
 default:
   break;
  }
  return;
}

/*****************************************************************************
** Function name:  GPIOIntStatus
**
** Descriptions:  Get Interrupt status for a port pin.
**
** parameters:   port num, bit position
** Returned value:  None
**
*****************************************************************************/
uint32_t GPIOIntStatus( uint32_t portNum, uint32_t bitPosi )
{
  uint32_t regVal = 0;

  switch ( portNum )
  {
 case PORT0:
   if ( LPC_GPIO0->MIS & (0x1<   regVal = 1;
 break;
  case PORT1:
   if ( LPC_GPIO1->MIS & (0x1<   regVal = 1; 
 break;
 case PORT2:
   if ( LPC_GPIO2->MIS & (0x1<   regVal = 1;     
 break;
 case PORT3:
   if ( LPC_GPIO3->MIS & (0x1<   regVal = 1;     
 break;
 default:
   break;
  }
  return ( regVal );
}

/*****************************************************************************
** Function name:  GPIOIntClear
**
** Descriptions:  Clear Interrupt for a port pin.
**
** parameters:   port num, bit position
** Returned value:  None
**
*****************************************************************************/
void GPIOIntClear( uint32_t portNum, uint32_t bitPosi )
{
  switch ( portNum )
  {
 case PORT0:
   LPC_GPIO0->IC |= (0x1<  break;
  case PORT1:
   LPC_GPIO1->IC |= (0x1<  break;
 case PORT2:
   LPC_GPIO2->IC |= (0x1<  break;
 case PORT3:
   LPC_GPIO3->IC |= (0x1<  break;
 default:
   break;
  }
  return;
}

/******************************************************************************
**                            End Of File
******************************************************************************/
 

/*****************************************************************************
** 函数名:  GPIOSetDir
** 功能:  设置GPIO口方向
** 参数:  端口号(PORT0-PORT3), 第几位(0-31), 方向 (1 输出, 0 输入)
** 返回值:  无
*****************************************************************************/

/*****************************************************************************
** 函数名:  GPIOSetValue
** 功能:  设置端口的值
** 参数:  端口号(PORT0-PORT3), 第几位(0-31), 方向 (1 输出, 0 输入)
** 返回值:  无
*****************************************************************************/

/*****************************************************************************
** 函数名:  GPIOSetInterrupt
** 功能:  设置中断
** 参数:  端口号(PORT0-PORT3),
   第几位(0-31),
   触发方式(边缘触发还是电平触发 0边缘,1电平),
   单/双电平触发,(0单电平,1,双电平),
   根据触发方式选类型(0上升沿或高电平,1下降沿或低电平)
** 返回值:  无
*****************************************************************************/

/*****************************************************************************
** 函数名:  GPIOIntEnable
** 功能:  允许I/O引脚中断
** 参数:  端口号(PORT0-PORT3), 第几位(0-31),
** 返回值:  无
*****************************************************************************/

/*****************************************************************************
** 函数名:  GPIOIntDisable
** 功能:  禁止I/O引脚中断
** 参数:  端口号(PORT0-PORT3), 第几位(0-31),
** 返回值:  无
*****************************************************************************/

/*****************************************************************************
** 函数名:  GPIOIntStatus
** 功能:  获得引脚中断状态
** 参数:  端口号(PORT0-PORT3), 第几位(0-31),
** 返回值:  0 无中断或中断屏蔽,1 有中断
*****************************************************************************/

/*****************************************************************************
** 函数名:  GPIOIntClear
** 功能:  清除边沿检测逻辑
** 参数:  端口号(PORT0-PORT3), 第几位(0-31),
** 返回值:  无
*****************************************************************************/

/*****************************************************************************
** 函数名:  GPIOInit
** 功能:  GPIO初始化
** 参数:  无
** 返回值:  真或假,(一般不用)。
*****************************************************************************/


关键字:LPC1114  学习型  红外遥控器 引用地址:基于LPC1114的学习型红外遥控器

上一篇:LPC1114 红外遥控解码程序(RC5 )
下一篇:s3c2440 存储系统和I/O空间 认识

推荐阅读最新更新时间:2024-03-16 15:04

LPC1114 外部中断介绍
外部中断作为处理器响应外部事件的通道,在控制系统中起着非常重要的作用。下面就来讨论一下LPC1114外部中断的使用情况。 LPC1114的每一个引脚都可以响应一个外部中断,所以有多少个引脚就有多少个外部中断。但LPC1114的中断系统非常强大,外部中断只是它其中的一小部分。因此,要用好外部中断,就必须先来了解LPC1114的整个中断系统。下面就来看一下它的中断系统。 在LPC11xx系列处理器中,有一个部分被称为“私有外设总线”(Private peripheral bus),它位于Memory map中地址为0xE0000000~0xE0100000的地方,包含有下表中的几个核心外设。 其中的Nested Ve
[单片机]
<font color='red'>LPC1114</font> 外部中断介绍
基于HX1838(HS0038)与STC10F04单片机的红外遥控器的读码程序
//此程序在硬件上测试通过,要弄懂的话就要去看看HT6221的时序图。 //此程序可以将读到的键值,地址码通过串口发送到计算机,上位机可用串口调试助手查看。 ///C51的红外解码程序,可以根据需要自己修改: //////////////////////////// //11.0592Mhz #include reg51.h //根据自己的接线来改 sbit IRIN = P3^2; //红外接收器数据线 sbit led = P3^7; //指示灯 //////////////////////////////////////////// //定义数组IRCOM,分别装解码后得到的数据 //IRCOM 低8位地址码 //IRCO
[单片机]
cortex m0 lpc1114_GPIO引脚寄存器综述
LPC1114一共有42个GPIO,分为4个端口,P0、P1、P2口都是12位的宽度,引脚从Px.0~Px.11,P3口是6位的宽度,引脚从P3.0~P3.5。 每个GPIO都可以通过软件设置为输入或输出引脚,读取引脚的电平,就需要把引脚设置为输入引脚,比如引脚用来做ADC输入引脚或按键检测引脚的时候。需要程序控制引脚电平的时候,就把引脚设置为输出引脚,比如引脚控制外部三极管导通与截止的时候。 每个GPIO都可以作为中断引脚来感知外部。中断还可以设置为电平中断或边沿触发中断。电平中断又可以设置为低电平中断或高电平中断,边沿触发又可以设置为下降沿中断或上升沿中断,也可以设置为双边沿触发中断。它的灵活性给我们设计带了很大的方便。 引脚
[单片机]
LPC1114时钟配置
要让LPC1114正常工作,首先要对它的时钟源进行配置。LPC1114的最高工作频率为50MHz,因此给它的主时钟频率最大不能超过50MHz。实际上,通常都是使用频率较低的晶振,以降低外部电磁干扰,然后再通过内部倍频的方式把主时钟频率提高。根据管方手册给出的数据,外部晶振的频率范围是1MHz~25MHz,一般情况下使用12MHz晶振,然后内部进行4倍频,主时钟工作频率为48MHz。 要对LPC1114的时钟进行配置,必须要了解它的时钟结构,先来看一下它的时钟结构图,如下图所示。 首先来看主时钟,给主时钟(main clock)提供选择有4个源,分别是:内部RC振荡器、未倍频之前的PLL时钟、内部看门狗时钟、经过PLL倍频之后的
[单片机]
<font color='red'>LPC1114</font>时钟配置
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved