如何用单片机写按键通过串口控制LED的亮灭

如何用单片机写按键通过串口控制LED的亮灭,如何将按键写入到串口当中,和电脑控制单片机发送数据一样吗?

读了3遍没有读懂
你到底是按钮在串口里还是LED在串口里,为什么一定要和串口有关系

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7673152
  • 除此之外, 这篇博客: 按键控制LED灯的亮灭中的 按键控制LED灯的亮灭 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 新建库函数的工程文件,在《利用固件库点亮LED灯》文章的基础上加上一个key.c文件和key.h文件。
    2. 初始化KEY的GPIO函数
    void KEY_GPIO_Config(void)
    {
      GPIO_InitTypeDef GPIO_InitStruct;
      
      RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK, ENABLE);
      
      GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
      GPIO_InitStruct.GPIO_Pin = KEY1_GPIO_PIN;
      GPIO_Init(KEY1_GPIO_PORT,&GPIO_InitStruct);
      
      GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
      GPIO_InitStruct.GPIO_Pin = KEY2_GPIO_PIN;
      GPIO_Init(KEY2_GPIO_PORT,&GPIO_InitStruct);   
    }
    
    1. 按键扫描函数
    //按键扫描
    uint8_t key_scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
    {
      if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)
      {
        //松手检测
        while(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON);
        return KEY_ON;
      }
      else
        return KEY_OFF;
    }
    
    1. 在main函数中调用
    int main(void)
    {
      LED_GPIO_Config();
      KEY_GPIO_Config();
      while(1)
      {
        if(key_scan(KEY1_GPIO_PORT, KEY1_GPIO_PIN) == KEY_ON)
        {
          LED_TOGGLE;
        }
        if(key_scan(KEY2_GPIO_PORT, KEY2_GPIO_PIN) == KEY_ON)
        {
          LED_TOGGLE;
        }
      }
    }
    

    其中LED_TOGGLE是利用宏定义的方式实现。
    这里需要注意的是不要掉;
    并且是控制LED的GPIO端口。

    #define LED_TOGGLE {LED_GPIO_PORT->ODR^=LED_GPIO_PIN;}
    
  • 以下回答由chatgpt基于相关博客总结生成:

    对于这个问题,你想通过单片机控制LED的亮灭,并且通过串口接收按键信号。首先,你需要了解以下几个方面的内容来实现这个功能:

    1. 单片机的选择:根据你的需求选择一款适合的单片机,比如STC 15w4或者ESP8266。

    2. LED的控制:通过设置单片机的GPIO口来控制LED的亮灭。可以使用直接驱动方式或者使用移位寄存器进行驱动。(参考资料段落4)

    3. 串口通信:使用串口接口来实现单片机与电脑的通信。通常,单片机会具有可用于串口通信的GPIO口。你可以配置单片机的串口参数,比如波特率、数据位、校验位等。(参考资料段落6)

    4. 按键信号的接收:通过设置单片机的GPIO口为输入模式,来接收按键的信号。可以通过轮询、中断或者定时器等方式来监听按键信号的状态。(具体实现方式视单片机型号而定)

    以下是一个基于STC单片机和C语言的示例代码,用于实现控制LED和接收按键信号:

    #include <reg52.h> // 导入STC 15w4的头文件
    
    // 定义LED控制的GPIO口
    sbit LED = P1^0;
    
    // 定义按键输入的GPIO口
    sbit Button = P3^2;
    
    // 延时函数
    void delay(int time) {
        int i, j;
        for(i=0; i<time; i++) {
            for(j=0; j<1000; j++){}
        }
    }
    
    void main() {
        // 初始化串口参数
        TMOD = 0x20; // 设置为定时器1工作在8位自动重装模式
        TH1 = 0xFD; // 设置波特率为9600
        TCON = 0x40; // 启动定时器1
        SCON = 0x50; // 设置串口工作在模式1(8位异步收发,波特率可变)
    
        // 初始化LED和按键口
        LED = 0; // 初始状态设置LED灭
        Button = 1; // 初始化按键口为上拉输入
    
        while(1) {
            // 检测按键信号
            if(Button == 0) { // 如果按键被按下
                // 发送按键信号到串口
                SBUF = '1'; // 发送ASCII码为1的字符到串口发送缓冲区
                while(!TI); // 等待发送完成
                TI = 0; // 清除发送完成标志位
                delay(1000); // 延时1秒,防止重复检测到按键
            }
        }
    }
    

    这个示例代码使用STC 15w4单片机来控制LED,并通过串口接收按键信号。你可以根据自己的情况修改代码中的GPIO口和串口参数。

    总结: 要实现通过单片机控制LED并通过串口接收按键信号的功能,你需要选择合适的单片机、设置LED控制的GPIO口和按键输入的GPIO口,并通过串口进行通信。具体的实现方式会因单片机型号和开发环境的不同而有所不同。以上是一个基于STC 15w4单片机和C语言的示例代码,你可以根据自己的需求进行适当的修改。如果你对具体实现有任何问题,请提供更多的详细信息,我将尽力帮助解决。