📄 mian.c
字号:
/****************************************************
*名 称: GPIO测试文件 *
*功 能: 测试GPIO中断 *
*备 注: 2011.1.9 *
*贞明电子:http://shop58972409.taobao.com *
*****************************************************/
/**************** 头文件调用&&宏定义 ****************/
#include "LPC11xx.h"
#include "GPIO.H"
/******************* 全局变量定义 *******************/
/********************** 函数声明 ********************/
__inline void delay_ms(uint32_t a);
/********************** 主函数 **********************/
int main(void)
{
SystemInit(); //系统初始化,包括使能时钟
GPIOInit(); //GPIO初始化,使能GPIO模块时钟
GPIOSetDir(PORT2,8,1); //设置P2.8为输出,LED1
GPIOSetDir(PORT2,9,1); //设置P2.9为输出,LED2
GPIOSetDir(PORT3,4,1); //设置P3.4为输出,LED3
LPC_IOCON->PIO2_11=0x00; //设置P2.11为GPIO功能
LPC_IOCON->PIO1_4=(1<<7); //注意:当有AD功能的引脚作为输入时,需要配置为数字输入。
LPC_IOCON->PIO2_11=0x00; //设置P2.11为GPIO功能
GPIOSetDir(PORT2,11,0); //设置P2.11为输入 KEY1
GPIOSetDir(PORT1,4,0); //设置P1.4为输入 KEY2
GPIOSetDir(PORT3,5,0); //设置P3.5为输入 KEY3
GPIOSetValue(PORT2,8,1); //灭3个灯
GPIOSetValue(PORT2,9,1);
GPIOSetValue(PORT3,4,1);
//GPIO中断的初始化
GPIOSetInterrupt(PORT2,11,0,0,1);//端口号, 位地址, sense, single/doublee, 上升/下降沿
GPIOSetInterrupt(PORT3,5,0,0,1);
GPIOSetInterrupt(PORT1,4,0,0,1);
GPIOIntEnable(PORT2,11); //使能该端口中断P2_11
GPIOIntEnable(PORT3,5); //使能该端口中断P3_5 (LPC1343为P2_5)
GPIOIntEnable(PORT1,4); //使能该端口中断P1_4
delay_ms(1000);
while(1)
{
}
}
/********************** 函数定义 ********************/
/****************************************************
*名 称: 延时函数 *
*参 数: 延时时间 *
*备 注: 内联函数 *
*****************************************************/
__inline void delay_ms(uint32_t a) //1ms延时函数
{
uint32_t i;
while( --a != 0){
for(i = 0; i<5500; i++);
}
}
/****************************************************/
/******************** 中断服务函数 ******************/
/****************************************************
*名 称: PIOINT1_IRQHandler *
*参 数: 无 *
*备 注: 使用GPIO一个管脚(端口1的管脚4)作为中断源*
*****************************************************/
void PIOINT1_IRQHandler(void) //中断服务函数
{
uint32_t regVal;
regVal = GPIOIntStatus( PORT1, 4 ); //读取该IO组某位的中断状态
if ( regVal )
{
LPC_GPIO2->DATA^=(1<<9); //P2_9闪动1次 LED2
GPIOIntClear( PORT1, 4); //清除中断标志
}
return;
}
/*****************************************************
*名 称: PIOINT2_IRQHandler *
*参 数: 无 *
*备 注: 使用GPIO一个管脚(端口2的管脚11)作为中断源*
******************************************************/
void PIOINT2_IRQHandler(void)
{
uint32_t regVal;
regVal= GPIOIntStatus( PORT2, 11);
if(regVal)
{
LPC_GPIO2->DATA^=(1<<8); //P2_8闪动1次 LED1
GPIOIntClear( PORT2, 11);
}
return;
}
/*****************************************************
*名 称: PIOINT2_IRQHandler *
*参 数: 无 *
*备 注: 使用GPIO一个管脚(端口3的管脚5)作为中断源 *
******************************************************/
void PIOINT3_IRQHandler(void)
{
uint32_t regVal;
regVal= GPIOIntStatus( PORT3, 5);
if(regVal)
{
LPC_GPIO3->DATA^=(1<<4); //P3_4闪动1次 LED3
GPIOIntClear( PORT3, 5);
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -