LPC1768菜鸟学习之GPIO和外部中断

LPC1768的P0口和P2口既能做输入输出,还可以配置为中断源。

现在P2.10作为按键,配置如下:

void BUTTON_init(void)

{

 LPC_GPIO2->FIODIR      &=~(1 << 10);    /* PORT2.10 definedas input       */

 LPC_GPIOINT->IO2IntEnF |=  (1<< 10);    /* enable falling edgeirq         */

 

 NVIC_EnableIRQ(EINT3_IRQn);             /* enable irq in nvic             */

}

void EINT3_IRQHandler()

{

 LPC_GPIOINT->IO2IntClr |= (1 << 10);     /* clear pending interrupt         */

    LED_ON;

Dealy(1000);

 LED_OFF;

}

EINT3和GPIO中断共用,所以按一下按键直接进入EINT3的中断服务程序里。

 

而lpc1768有4个外部中断输入,为P2.10~P2.13,同样取P2.10作为按键

void EINTInit( void )

{

 LPC_PINCON->PINSEL4 = 0x00100000;      /*set P2.10 as EINT0 and

                                                               P2.0~7GPIO output */

 LPC_GPIO2->FIODIR = 0x000000FF;    /*port 2, bit 0~7 only */

 LPC_GPIO2->FIOCLR = 0x000000FF;   /*turn off LEDs */

 

  LPC_SC->EXTMODE = EINT0_EDGE;             /* INT0 edge trigger */

 LPC_SC->EXTPOLAR = 0;                          /* INT0 is falling edge by default */

 

 NVIC_EnableIRQ(EINT0_IRQn);

 return( TRUE );

}

void EINT0_IRQHandler (void)

{

 LPC_SC->EXTINT = EINT0;          /* clear interrupt */   //EINT0==0x10

              LED_ON;

Dealy(1000);

 LED_OFF;

}

LPC1768是一款基于ARM Cortex-M3内核的微控制器,拥有丰富的GPIO资源和中断控制功能。使用LPC1768控制四位数码管可以通过以下步骤实现: 1. 确定数码管接口 LPC1768GPIO口数量较多,可以选择其中四个口作为数码管的控制口,分别控制数码管的四个数码位。例如,可以将P0.0~P0.3口与数码管的A~D位相连。 2. 配置GPIO口 使用LPC1768GPIO口需要先将其配置为输出模式。可以使用LPC1768GPIO库函数来进行配置,例如: LPC_GPIO0->FIODIR |= (1<<0)|(1<<1)|(1<<2)|(1<<3); //将P0.0~P0.3口设置为输出模式 3. 中断控制 为了控制数码管的显示,需要定时更新数码管的显示数据。可以使用LPC1768的定时器中断来实现定时更新,例如: //初始化定时器1 LPC_TIM1->PR = 0; //设置预分频系数为1 LPC_TIM1->MR0 = 100000; //设置计数器最大值为100000 LPC_TIM1->MCR = (1<<0)|(1<<1); //设置计数器为重载模式,并清除计数器 LPC_TIM1->TCR = (1<<1); //复位定时器计数器 LPC_TIM1->TCR &= ~(1<<1); //停止计数器 //配置中断 NVIC_EnableIRQ(TIMER1_IRQn); //使能定时器1中断 //定时器1中断处理函数 void TIMER1_IRQHandler(void) { //更新数码管显示数据 ... //清除中断标志位 LPC_TIM1->IR |= (1<<0); } 4. 数码管显示数据更新 在定时器中断处理函数中,需要更新数码管的显示数据。可以使用LPC1768GPIO库函数来控制GPIO口输出高低电平,从而控制数码管的亮灭。例如: //更新数码管显示数据函数 void update_display(void) { static uint8_t digit = 0; //当前显示的数码位 static uint8_t data[4] = {0}; //数码管显示数据 //更新数码管显示数据 data[0] = ...; data[1] = ...; data[2] = ...; data[3] = ...; //控制数码管显示 LPC_GPIO0->FIOCLR = (1<<0)|(1<<1)|(1<<2)|(1<<3); //清除所有数码位的输出 LPC_GPIO0->FIOSET = (1<<digit); //设置当前数码位的输出 LPC_GPIO1->FIOPIN = (data[digit]<<16); //设置当前数码位的输出数据 //更新数码位 digit++; if(digit >= 4) { digit = 0; } } 5. 完整代码 下面是一个简单的LPC1768控制四位数码管的示例代码:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值