使用AiCube创建工程,将LED的P2端口设置为开漏模式,将按钮P32引脚设置为内部上拉电阻。并设置P32引脚上的INT0外部中断模式为下降沿中断,这样按下就可以触发中断。
接下来编写代码
复制代码 然后在exit.c修改中断函数
- //<<AICUBE_USER_HEADER_REMARK_BEGIN>>
- ////////////////////////////////////////
- // 在此添加用户文件头说明信息
- // 文件名称: exti.c
- // 文件描述:
- // 文件版本: V1.0
- // 修改记录:
- // 1. (2026-03-12) 创建文件
- ////////////////////////////////////////
- //<<AICUBE_USER_HEADER_REMARK_END>>
-
-
- #include "config.h"
-
-
- //<<AICUBE_USER_INCLUDE_BEGIN>>
- // 在此添加用户头文件包含
- //<<AICUBE_USER_INCLUDE_END>>
-
-
- //<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
- // 在此添加用户全局变量定义、用户宏定义以及函数声明
- extern u8 funindex;
- //<<AICUBE_USER_GLOBAL_DEFINE_END>>
-
-
-
- ////////////////////////////////////////
- // 外部中断INT0初始化函数
- // 入口参数: 无
- // 函数返回: 无
- ////////////////////////////////////////
- void EXTI0_Init(void)
- {
- INT0_FallingInt(); //设置外部中断为下降沿中断
- INT0_SetIntPriority(0); //设置中断为最低优先级
- INT0_EnableInt(); //使能外部中断
-
- //<<AICUBE_USER_EXTI0_INITIAL_BEGIN>>
- // 在此添加用户初始化代码
- //<<AICUBE_USER_EXTI0_INITIAL_END>>
- }
-
-
- ////////////////////////////////////////
- // 外部中断INT0中断服务程序
- // 入口参数: 无
- // 函数返回: 无
- ////////////////////////////////////////
- void EXTI0_ISR(void) interrupt INT0_VECTOR
- {
- //<<AICUBE_USER_EXTI0_ISR_CODE1_BEGIN>>
- // 在此添加中断函数用户代码
- funindex++;
- if(funindex>=2) funindex=0;
- //<<AICUBE_USER_EXTI0_ISR_CODE1_END>>
- }
-
-
- //<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
- // 在此添加用户函数实现代码
- //<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
-
-
复制代码 这样在中断函数里就可以快速修改索引序号,因为只有2个流水灯花样函数,这里就让这个变量只可以是0或者1,如果有更多花样可以继续添加。
现在编译烧录,单片机就默认单个点亮流动,按下后会立马触发中断进入第二种花样单个熄灭流动。
|