基于 STM32 单片机,采用正点原子库,使用 Proteus 仿真综合设计:使用按键发送学号

本文介绍基于 STM32 单片机,采用正点原子库,使用 Proteus 仿真进行综合设计,并使用 Kile5 软件编写代码,实现按键发送学号功能。单片机 A 连接按键,按下按键后,单片机 A 通过串口向单片机 B 发送学号。单片机 B 收到正确学号后,在 LCD 上显示学号。

代码实现

#include 'stm32f10x.h'
#include 'usart.h'
#include 'delay.h'
#include 'key.h'
#include 'lcd.h'

int main()
{
    u8 flag = 0;
    u8 data[10];
    u8 rxdata[10];
    u8 i = 0;
    u8 j = 0;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB时钟
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PB12
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50MHz
    GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB
    
    USART1_Config(); //串口1初始化
    KEY_Init(); //按键初始化
    LCD_Init(); //LCD初始化
    
    while(1)
    {
        if(KEY_Scan() == WKUP_PRES) //检测按键是否按下
        {
            flag = 1;
            USART_SendData(USART1, '1'); //发送数据
            while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); //等待接收数据
            rxdata[i++] = USART_ReceiveData(USART1); //接收数据
        }
        
        if(flag == 1) //判断是否接收到数据
        {
            if(rxdata[j] != '\n') //判断数据是否接收完毕
            {
                data[j] = rxdata[j]; //将数据存入数组
                j++;
            }
            else
            {
                data[j] = '\0'; //添加字符串结束标志
                j = 0;
                flag = 0;
                if(strcmp((char *)data, '学号') == 0) //判断是否收到正确的学号
                {
                    GPIO_SetBits(GPIOB, GPIO_Pin_12); //点亮LED
                    LCD_ShowString(0, 0, 'My ID is: '); //在LCD上显示学号
                    LCD_ShowString(60, 0, '20210001');
                }
                else
                {
                    GPIO_ResetBits(GPIOB, GPIO_Pin_12); //熄灭LED
                }
            }
        }
    }
}

代码解释

  1. 引入头文件stm32f10x.husart.hdelay.hkey.hlcd.h 包含了实现代码所需的功能函数定义。
  2. 初始化:代码中初始化了 GPIOB(用于控制 LED)、串口 1、按键和 LCD,确保硬件设备能够正常工作。
  3. 主循环:代码使用 while(1) 循环不断执行以下操作:
    • 检测按键是否按下。
    • 如果按下,发送数据 '1' 到串口,并等待接收数据。
    • 接收数据并将其存入数组 rxdata 中。
    • 判断是否接收到完整的数据(数据以 '\n' 结尾)。
    • 判断接收到的数据是否为 '学号'。
    • 如果数据正确,点亮 LED 并显示学号;否则,熄灭 LED。

总结

本代码实现了使用 STM32 单片机、正点原子库、Proteus 仿真和 Kile5 软件编写代码的功能。通过按键发送学号,单片机 A 向单片机 B 发送数据,单片机 B 接收数据后在 LCD 上显示学号。

**注意:**在实际应用中,需要根据实际硬件连接情况修改代码中的引脚定义和相关参数。


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

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