通过设计一个基于stm32的流水灯设计

img


通过设计一个基于stm32的流水灯设计,至少是实现6种以上的流水方式,通过案件可以完成选择类型,开始闪烁,停止闪烁,等。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7484022
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:基于stm32单片机的水位检测自动抽水系统
  • 除此之外, 这篇博客: 【毕业设计】基于stm32的智能水杯 - 恒温控制 饮水杯 单片机 物联网 嵌入式中的 2 系统设计 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 该智能水杯控制系统是由 STM32 单片机作为主要控制芯片,接受和发送信号给温度传感器,进行温度检测;温度检测是由温度传感器来执行,实时采集水杯内液体温度并利用 LCD 屏显示; 电池检测由电池电压指示电路进行操控, 实时检测电池电量, 并通过 LED 灯进行提示;内置充电电池充电可提供无线和 USB接口充电方式;控温及发热系统由 PTC 发热体构成, 并利用闭环控制使水杯液体温度恒温;利用无线模块,接收来自手机App所发出的指令, 通过手机App与水杯进行匹配进行加热操作,并反馈水杯的使用状态

    系统设计

    在这里插入图片描述

写个例子


#include "stm32f4xx_hal.h"

#define LED_PIN_1 GPIO_PIN_0
#define LED_PIN_2 GPIO_PIN_1
#define LED_PIN_3 GPIO_PIN_2
#define LED_PIN_4 GPIO_PIN_3
#define LED_PORT GPIOD

void Delay(uint32_t ms) {
    HAL_Delay(ms);
}

void LED_On(uint16_t pin) {
    HAL_GPIO_WritePin(LED_PORT, pin, GPIO_PIN_SET);
}

void LED_Off(uint16_t pin) {
    HAL_GPIO_WritePin(LED_PORT, pin, GPIO_PIN_RESET);
}

void LED_Toggle(uint16_t pin) {
    HAL_GPIO_TogglePin(LED_PORT, pin);
}

void LED_AllOff() {
    LED_Off(LED_PIN_1);
    LED_Off(LED_PIN_2);
    LED_Off(LED_PIN_3);
    LED_Off(LED_PIN_4);
}

void FlowingPattern1() {
    for (int i = 0; i < 4; i++) {
        LED_On(LED_PIN_1 << i);
        Delay(200);
        LED_Off(LED_PIN_1 << i);
    }
}

void FlowingPattern2() {
    for (int i = 0; i < 4; i++) {
        LED_On(LED_PIN_4 >> i);
        Delay(200);
        LED_Off(LED_PIN_4 >> i);
    }
}

void FlowingPattern3() {
    for (int i = 0; i < 4; i++) {
        LED_Toggle(LED_PIN_1 << i);
        Delay(200);
    }
    LED_AllOff();
}

void FlowingPattern4() {
    for (int i = 0; i < 4; i++) {
        LED_Toggle(LED_PIN_4 >> i);
        Delay(200);
    }
    LED_AllOff();
}

void FlowingPattern5() {
    for (int i = 0; i < 4; i++) {
        LED_Toggle(LED_PIN_1 << i);
        Delay(200);
    }
    for (int i = 3; i >= 0; i--) {
        LED_Toggle(LED_PIN_1 << i);
        Delay(200);
    }
    LED_AllOff();
}

void FlowingPattern6() {
    for (int i = 0; i < 4; i++) {
        LED_Toggle(LED_PIN_4 >> i);
        Delay(200);
    }
    for (int i = 3; i >= 0; i--) {
        LED_Toggle(LED_PIN_4 >> i);
        Delay(200);
    }
    LED_AllOff();
}

int main(void) {
    HAL_Init();
    __HAL_RCC_GPIOD_CLK_ENABLE();

    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.Pin = LED_PIN_1 | LED_PIN_2 | LED_PIN_3 | LED_PIN_4;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);

    while (1) {
        FlowingPattern1();
        FlowingPattern2();
        FlowingPattern3();
        FlowingPattern4();
        FlowingPattern5();
        FlowingPattern6();
    }
}