用单片机或者c语言操作。
以INT05(P2.7,INT0的输入5)作为外部中断输入,使用下降沿触发中断,每按下一次按钮将连接P3.2的指示灯状态翻转一次。
1、
#include <reg52.h>
sbit LED = P3^2; // 连接 P3.2 的指示灯
// 中断服务程序
void interrupt_handler() interrupt 0
{
LED = !LED; // 翻转指示灯的状态
}
void main()
{
IT0 = 1; // 设置 INT0 为下降沿触发
EX0 = 1; // 开启 INT0 中断
EA = 1; // 开启总中断
while (1); // 死循环,等待中断
}
2、
#include <stdio.h>
#include <stdint.h>
#define BUTTON_PORT P2 // 定义按钮所在的端口
#define BUTTON_PIN 7 // 定义按钮所在的引脚
#define LED_PORT P3 // 定义指示灯所在的端口
#define LED_PIN 2 // 定义指示灯所在的引脚
// 中断服务函数
void ISR(void)
{
// 将指示灯的状态翻转一次
LED_PORT ^= (1 << LED_PIN);
}
int main(void)
{
// 设置按钮引脚为输入
BUTTON_PORT &= ~(1 << BUTTON_PIN);
// 设置指示灯引脚为输出
LED_PORT |= (1 << LED_PIN);
// 设置外部中断触发条件:下降沿触发
IT0 = 1; // 设置为下降沿触发
EX0 = 1; // 启用外部中断0
// 启用中断
EA = 1;
while (1) {
// 轮询按钮的状态,如果按钮被按下,则触发外部中断
if (!(BUTTON_PORT & (1 << BUTTON_PIN))) {
// 触发外部中断
EX0 = 0;
EX0 = 1;
}
}
return 0;
}
提供参考实例【stm32外部中断的简单理解与操作简单范例——按键控制LED翻转】,链接:https://blog.csdn.net/m0_58193842/article/details/126991932
这是一个比较典型的外部中断程序。首先,您需要在单片机的 IO 口配置中将 INT05 设置为中断输入。然后,您可以在中断服务程序(ISR)中编写代码来响应中断。
在 C 语言中,您可以使用 __interrupt 宏来声明 ISR。ISR 的函数名称通常以 ISR 开头,例如 _ISR_INT0_VECTOR。您可以使用 #pragma 指令来声明 ISR 函数的名称和中断向量。例如:
#pragma vector=INT0_vect
__interrupt void _ISR_INT0_VECTOR(void)
{
// 处理中断的代码
}
在 ISR 中,您可以编写代码来翻转 P3.2 的指示灯状态。可以使用位运算符来翻转单片机的 IO 口状态。例如,要将 P3.2 的状态翻转,可以使用如下代码:
P3 ^= (1 << 2); // 翻转 P3.2 的状态
注意,在 ISR 中运行的代码应该尽量短小,以避免影响系统的性能。
希望这能帮到您。