(1) 在程序整个执行过程中,要求控制单片机 A 的 LED1 灯以 500ms 的周期进行闪烁,提示系统正在运行。(20 分)

单片机 A 代码:

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    delay_init();
    LED_Init();
    USART1_Init();
    KEY_Init();

    while(1)
    {
        LED1 = !LED1;
        delay_ms(500);
        if(KEY_Scan(0) == KEY_ON)
        {
            USART1_SendChar('1');
        }
    }
}

(2) 单片机 A 通过按键向单片机 B 发送字符'1',单片机 B 收到数据后控制 LED2 灯点亮;。(20 分)

单片机 A 代码:

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    delay_init();
    LED_Init();
    USART1_Init();
    KEY_Init();

    while(1)
    {
        LED1 = !LED1;
        delay_ms(500);
        if(KEY_Scan(0) == KEY_ON)
        {
            USART1_SendChar('1');
            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
        }
    }
}

单片机 B 代码:

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    delay_init();
    LED_Init();
    USART1_Init();

    while(1)
    {
        if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
        {
            uint8_t data = USART1_ReceiveData();
            if(data == '1')
            {
                LED2 = 1;
            }
            else if(data == '2')
            {
                LED2 = 0;
            }
        }
    }
}

(3) 单片机 A 通过按键向单片机 B 发送字符'2',单片机 B 收到数据后控制 LED2 灯熄灭;。(20 分)

单片机 A 代码:

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    delay_init();
    LED_Init();
    USART1_Init();
    KEY_Init();

    while(1)
    {
        LED1 = !LED1;
        delay_ms(500);
        if(KEY_Scan(0) == KEY_ON)
        {
            USART1_SendChar('2');
            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
        }
    }
}

单片机 B 代码:

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    delay_init();
    LED_Init();
    USART1_Init();

    while(1)
    {
        if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
        {
            uint8_t data = USART1_ReceiveData();
            if(data == '1')
            {
                LED2 = 1;
            }
            else if(data == '2')
            {
                LED2 = 0;
            }
        }
    }
}

(4) 单片机A连接一个按键,按下按键,单片机A通过串口向单片机B发送数据:“学号”,单片机B收到正确“学号”时,LCD显示学号(30分)。

单片机 A 代码:

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    delay_init();
    LED_Init();
    USART1_Init();
    KEY_Init();

    while(1)
    {
        LED1 = !LED1;
        delay_ms(500);
        if(KEY_Scan(0) == KEY_ON)
        {
            USART1_SendString('19101234');
            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
        }
    }
}

单片机 B 代码:

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    delay_init();
    LED_Init();
    USART1_Init();
    LCD_Init();

    while(1)
    {
        if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
        {
            uint8_t data = USART1_ReceiveData();
            if(data == '1')
            {
                LED2 = 1;
            }
            else if(data == '2')
            {
                LED2 = 0;
            }
            else if(data == '1')
            {
                char str[10] = {0};
                uint8_t i = 0;
                while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                str[i++] = USART1_ReceiveData();
                while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                str[i++] = USART1_ReceiveData();
                while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                str[i++] = USART1_ReceiveData();
                while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                str[i++] = USART1_ReceiveData();
                while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                str[i++] = USART1_ReceiveData();
                while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                str[i++] = USART1_ReceiveData();
                while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                str[i++] = USART1_ReceiveData();
                while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                str[i++] = USART1_ReceiveData();
                if(strcmp(str, "19101234") == 0)
                {
                    LCD_ShowString(0, 0, "19101234");
                }
            }
        }
    }
}

原文地址: https://www.cveoy.top/t/topic/n3q0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录