如何让指示灯翻转,主要用单片机知识

用单片机或者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 中运行的代码应该尽量短小,以避免影响系统的性能。

希望这能帮到您。