STM32 单片机通信实验:按键控制 LED 闪烁、数据收发和学号显示
基于 STM32 单片机,采用正点原子库,使用 Proteus 仿真综合设计
实验目标:
-
在程序整个执行过程中,要求控制单片机 A 的 LED1 灯以 500ms 的周期进行闪烁,提示系统正在运行。(20 分)
-
单片机 A 通过按键向单片机 B 发送字符'1',单片机 B 收到数据后控制 LED2 灯点亮;。(20 分)
-
单片机 A 通过按键向单片机 B 发送字符'2',单片机 B 收到数据后控制 LED2 灯熄灭;。(20 分)
-
单片机 A 连接一个按键,按下按键,单片机 A 通过串口向单片机 B 发送数据:“学号”,单片机 B 收到正确“学号”时,LCD 显示学号(30 分)。
代码实现:
单片机 A:
#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
u8 keyValue = 0;
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line6) != RESET) //检查LINE6是否发生中断
{
keyValue = 1;
EXTI_ClearITPendingBit(EXTI_Line6); //清除中断标志位
}
}
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
USART_Config(); //串口初始化
LED_Init(); //LED初始化
KEY_Init(); //按键初始化
EXTI_Config(); //外部中断初始化
while(1)
{
LED1 = !LED1; //LED1闪烁
delay_ms(500); //延时500ms
if(keyValue == 1) //检测到按键按下
{
USART_SendData(USART1,'1'); //向单片机B发送字符'1'
keyValue = 0; //清除按键标志位
}
}
}
单片机 B:
#include "stm32f10x.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
u8 recData = 0;
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断是否接收到数据
{
recData = USART_ReceiveData(USART1); //读取接收到的数据
USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志位
}
}
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
USART_Config(); //串口初始化
LED_Init(); //LED初始化
LCD_Init(); //LCD初始化
while(1)
{
if(recData == '1') //收到字符'1'
{
LED2 = 1; //LED2点亮
recData = 0; //清除接收到的数据
}
if(recData == '2') //收到字符'2'
{
LED2 = 0; //LED2熄灭
recData = 0; //清除接收到的数据
}
if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET) //检测是否接收到数据
{
u8 temp = USART_ReceiveData(USART1); //读取接收到的数据
if(temp == '1') //收到字符'1'
{
LCD_ShowString(0,2,"学号: 123456"); //在第二行显示学号
USART_SendString(USART1,"OK"); //向单片机A发送“OK”
}
}
}
}
实验步骤:
- 使用 Proteus 软件搭建硬件电路,连接单片机、LED、按键、LCD 等器件。
- 使用 Kile5 软件编写代码,并将代码烧录到单片机中。
- 运行程序,观察 LED 闪烁、按键控制 LED 点亮或熄灭、LCD 显示学号等现象。
实验结果:
成功实现按键控制 LED 闪烁、数据收发和学号显示功能。
实验总结:
本实验通过 STM32 单片机,学习了按键控制、LED 控制、串口通信、LCD 显示等基本操作,并掌握了使用正点原子库进行开发的方法。实验过程中,需要仔细阅读相关资料,理解代码的功能,并进行调试和测试。
原文地址: https://www.cveoy.top/t/topic/n3ru 著作权归作者所有。请勿转载和采集!