编程实现控制STM32F103XC8T6实验板上LED的开关和频闪的快慢,实验板上有4个按键,从按键1至4被按下,LED闪烁频率实现由最低2s到最高5s的转变,请给出具体实现代码,此处使用hc05蓝牙传输实现信息传输
时间: 2024-03-24 13:37:27 浏览: 68
以下是实现代码:
```c
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "24cxx.h"
#include "OLED4PINiic.h"
#include "usart.h"
#include "time.h"
#include "74HC595_led.h"
int main(void)
{
u8 speed = 4; // 闪烁速度,初始为4
u32 cnt = 0; // 计数器,用于实现闪烁频率
u8 led_state = 0; // LED状态,初始为关闭
u8 buf[1]; // 用于存储蓝牙接收到的数据
delay_init(); // 延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中断优先级组别配置
uart_init(115200); // 串口初始化
LED_Init(); // LED初始化
KEY_Init(); // 按键初始化
HC595_Init(); // 74HC595芯片初始化
while (1)
{
if (cnt++ > speed * 500000) // 闪烁频率
{
cnt = 0;
led_state = !led_state;
LED1 = led_state; // 控制LED开关
HC595_Send_Data(~(1 << led_state)); // 控制74HC595芯片输出
}
if (KEY_Scan(0) == KEY1_PRES)
{
speed = 8; // 按键1:最低2s闪烁一次
buf[0] = '1'; // 发送数据'1'给蓝牙模块
UART1_Send(buf, 1); // 通过串口1发送数据
}
else if (KEY_Scan(0) == KEY2_PRES)
{
speed = 6; // 按键2:2.5s闪烁一次
buf[0] = '2'; // 发送数据'2'给蓝牙模块
UART1_Send(buf, 1); // 通过串口1发送数据
}
else if (KEY_Scan(0) == KEY3_PRES)
{
speed = 4; // 按键3:3s闪烁一次
buf[0] = '3'; // 发送数据'3'给蓝牙模块
UART1_Send(buf, 1); // 通过串口1发送数据
}
else if (KEY_Scan(0) == KEY4_PRES)
{
speed = 2; // 按键4:最高5s闪烁一次
buf[0] = '4'; // 发送数据'4'给蓝牙模块
UART1_Send(buf, 1); // 通过串口1发送数据
}
if (USART_RX_STA & 0x8000) // 接收到蓝牙数据
{
u8 len = USART_RX_STA & 0x3fff; // 获取数据长度
USART_RX_BUF[len] = '\0'; // 字符串结尾加'\0'
if (USART_RX_BUF[0] == '1') // 接收到数据'1'
{
speed = 8; // 最低2s闪烁一次
}
else if (USART_RX_BUF[0] == '2') // 接收到数据'2'
{
speed = 6; // 2.5s闪烁一次
}
else if (USART_RX_BUF[0] == '3') // 接收到数据'3'
{
speed = 4; // 3s闪烁一次
}
else if (USART_RX_BUF[0] == '4') // 接收到数据'4'
{
speed = 2; // 最高5s闪烁一次
}
USART_RX_STA = 0; // 清空接收状态
}
}
}
```
通过蓝牙传输实现信息传输需要额外添加串口接收和发送功能。在此代码中,我们使用了USART1作为蓝牙串口,通过接收和发送函数实现信息的传输。当接收到的数据为'1'-'4'时,修改闪烁速度。同时,按键按下时也会发送相应的数据给蓝牙模块,实现了双向通信。
阅读全文