LPC1114外部中断程序

该代码示例展示了LPC1114单片机中GPIO端口的初始化、方向设置以及延时函数的实现。同时,通过Key.c文件配置了按键中断,当P1.8引脚检测到低电平触发中断时,P0.3引脚进行特定的电平翻转,以实现简单的中断响应操作。
摘要由CSDN通过智能技术生成

  main.c如下:

#include "LPC11XX.h"
#include "gpio.h"
#include "timer16.h"
#include "main.h"
#include "Key.h"
#include "LCD.h"

void Delay_Sec ( unsigned char Time ) { /* “1s * Time”延时函数 */
    u16 i;

    while ( Time ) {
        for ( i = 0; i < 3000000; i++ );

        Time--;
    }
}

void Delay_Ms ( unsigned int Time ) { /* “1ms * Time”延时函数 */
    u16 i;

    while ( Time ) {
        for ( i = 0; i < 3000; i++ );

        Time--;
    }
}

void Delay_Us ( unsigned int Time ) { /* “1us * Time”延时函数 */
    u8 i;

    while ( Time ) {
        for ( i = 0; i < 3; i++ );

        Time--;
    }
}

int main ( void ) {
    // SystemInit(); /* 系统初始化,主要是设置主时钟 */
    // GPIOInit(); /* IO口初始化,主要是开启GPIO时钟 */
    // GPIOSetDir( 0, 3, 1 ); /* 设置P0.3为输出(LPC1114单片机输出需设置为1,输入需设置为0) */
    LPC_GPIO0->DIR |= ( 0x1 << 3 ); /* 设置P0.3为输出 */
    LPC_GPIO2->DIR |= ( 0x1 << 9 );
    Key_GPIO_Init();
    Key_Intrrupt_Init();

    while ( 1 ) {
        // GPIOSetValue( 0, 3, 0 ); /* 给P0.3位写0 */
        // LPC_GPIO0->DATA &= ~(0x1 << 3); /* 给P0.3位写0 */
        LCD_RW_High;
        Delay_Ms ( 100 );
        LCD_RW_Low;
        Delay_Ms ( 100 );
    }
}

  key.c如下:

#include "LPC11XX.h"
#include "gpio.h"
#include "main.h"
#include "Key.h"

void Key_GPIO_Init ( void ) {
    LPC_GPIO1->DIR &= ~ ( 0x1 << 8 ); /* 设置P1.8为输入 */
}

void Key_Intrrupt_Init ( void ) { /* 配置中断 */
    GPIOSetInterrupt ( 1, 8, 1, 0, 0 ); /* P1.8低电平触发中断 */
    GPIOIntEnable ( 1, 8 ); /* 使能中断 */
    NVIC_EnableIRQ ( EINT1_IRQn ); /* 使能中断入口 */
}

  gpio.c如下:

#include "LPC11xx.h" /* LPC11xx Peripheral Registers */
#include "gpio.h"

void PIOINT1_IRQHandler ( void ) {
    uint32_t regVal;
    gpio1_counter++;
    regVal = GPIOIntStatus ( 1, 8 );

    if ( regVal ) {
        LPC_GPIO0->MASKED_ACCESS[ ( 1 << 3 )] = ( 0 << 3 );
        Delay_Ms ( 2000 );
        LPC_GPIO0->MASKED_ACCESS[ ( 1 << 3 )] = ( 1 << 3 );
        Delay_Ms ( 2000 );
        LPC_GPIO0->MASKED_ACCESS[ ( 1 << 3 )] = ( 0 << 3 );
        Delay_Ms ( 2000 );
        LPC_GPIO0->MASKED_ACCESS[ ( 1 << 3 )] = ( 1 << 3 );
        Delay_Ms ( 2000 );
        GPIOIntClear ( 1, 8 ); /* 清除中断标志位 */
    }

    return;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值