STM32:制作LED流水灯

STM32:制作LED流⽔灯
1.系统设计说明
本系统利⽤Proteus内的STM32F103C4作为微控制器,使⽤了7个按键和九个LED灯,根据不同按键的触发将会显⽰出不同颜⾊的流⽔灯。每完成⼀次流⽔灯循环都会对按键进⾏⼀次检测,进⼊下⼀次循环。
按键为普通开关K1-K7,LED1, LED4, LED7为红⾊LED,LED2, LED5, LED8为绿⾊LED,LED3, LED6 ,LED9为蓝⾊LED。原理图如下:
三等残废2.系统功能说明
按下不同的按键会显⽰不同颜⾊的流⽔灯,如下表:
模式    按键状态    效果
维果茨基1    仅按下K1    红⾊LED流⽔灯
2    仅按下K2    绿⾊LED流⽔灯
3    仅按下K3    蓝⾊LED流⽔灯
4    仅按下K4    黄⾊LED流⽔灯
5    仅按下K5    紫⾊LED流⽔灯
6    仅按下K6    青⾊LED流⽔灯
7    仅按下K7    ⽩⾊LED流⽔灯
8    开关均为按下    关闭流⽔灯,⽆LED亮起
9    任意按下两个及以上开关    红、绿、蓝⾊LED流⽔灯
注:红+绿=黄 ; 红+蓝=紫 ; 绿+蓝=青 。
3.软件设计说明
⾸先确定使⽤STM32F103C4,根据需要⾃⾏设计LED和KEY与引脚连接(注意要避开PB2,PB3,PB4,PA13,PA14,PA15)。
然后对LED的GPIO进⾏配置。步骤依次为:定义LED连接的GPIO端⼝--定义控制LED打开关闭的--定义基本混⾊显⽰的宏—初始化LED的端⼝。
led.h
#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"
/* 定义LED连接的GPIO端⼝*/
#define LED1_GPIO_PORT    GPIOB                /* GPIO端⼝ */
#define LED1_GPIO_CLK      RCC_APB2Periph_GPIOB  /* GPIO端⼝时钟 */
#define LED1_GPIO_PIN      GPIO_Pin_0          /* 连接到SCL时钟线的GPIO */
#define LED2_GPIO_PORT    GPIOB                /* GPIO端⼝ */
#define LED2_GPIO_CLK      RCC_APB2Periph_GPIOB  /* GPIO端⼝时钟 */
#define LED2_GPIO_PIN      GPIO_Pin_1          /* 连接到SCL时钟线的GPIO */
#define LED3_GPIO_PORT    GPIOB                /* GPIO端⼝ */
#define LED3_GPIO_CLK      RCC_APB2Periph_GPIOB  /* GPIO端⼝时钟 */
#define LED3_GPIO_PIN      GPIO_Pin_5          /* 连接到SCL时钟线的GPIO */
#define LED4_GPIO_PORT    GPIOB                /* GPIO端⼝ */
#define LED4_GPIO_CLK      RCC_APB2Periph_GPIOB  /* GPIO端⼝时钟 */
#define LED4_GPIO_PIN      GPIO_Pin_6          /* 连接到SCL时钟线的GPIO */
#define LED5_GPIO_PORT    GPIOB                /* GPIO端⼝ */
#define LED5_GPIO_CLK      RCC_APB2Periph_GPIOB  /* GPIO端⼝时钟 */
#define LED5_GPIO_PIN      GPIO_Pin_7          /* 连接到SCL时钟线的GPIO */
#define LED6_GPIO_PORT    GPIOB                /* GPIO端⼝ */
#define LED6_GPIO_CLK      RCC_APB2Periph_GPIOB  /* GPIO端⼝时钟 */
#define LED6_GPIO_PIN      GPIO_Pin_8          /* 连接到SCL时钟线的GPIO */
#define LED7_GPIO_PORT    GPIOB                /* GPIO端⼝ */
#define LED7_GPIO_CLK      RCC_APB2Periph_GPIOB  /* GPIO端⼝时钟 */
#define LED7_GPIO_PIN      GPIO_Pin_9          /* 连接到SCL时钟线的GPIO */
#define LED8_GPIO_PORT    GPIOB                /* GPIO端⼝ */
#define LED8_GPIO_CLK      RCC_APB2Periph_GPIOB  /* GPIO端⼝时钟 */
#define LED8_GPIO_PIN      GPIO_Pin_10          /* 连接到SCL时钟线的GPIO */
#define LED9_GPIO_PORT    GPIOB                /* GPIO端⼝ */
#define LED9_GPIO_CLK      RCC_APB2Periph_GPIOB  /* GPIO端⼝时钟 */
#define LED9_GPIO_PIN      GPIO_Pin_11          /* 连接到SCL时钟线的GPIO */
/* 定义控制IO的宏 */
#define LED1_OFF    GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN); #define LED1_ON      GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
#define LED2_OFF    GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN); #define LED2_ON      GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);
#define LED3_OFF    GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN); #define LED3_ON      GPIO_ResetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);
#define LED4_OFF    GPIO_SetBits(LED4_GPIO_PORT,LED4_GPIO_PIN); #define LED4_ON      GPIO_ResetBits(LED4_GPIO_PORT,LED4_GPIO_PIN);
#define LED5_OFF    GPIO_SetBits(LED5_GPIO_PORT,LED5_GPIO_PIN); #define LED5_ON      GPIO_ResetBits(LED5_GPIO_PORT,LED5_GPIO_PIN);
#define LED6_OFF    GPIO_SetBits(LED6_GPIO_PORT,LED6_GPIO_PIN);
#define LED6_OFF    GPIO_SetBits(LED6_GPIO_PORT,LED6_GPIO_PIN); #define LED6_ON      GPIO_ResetBits(LED6_GPIO_PORT,LED6_GPIO_PIN);
#define LED7_OFF    GPIO_SetBits(LED7_GPIO_PORT,LED7_GPIO_PIN); #define LED7_ON      GPIO_ResetBits(LED7_GPIO_PORT,LED7_GPIO_PIN);
#define LED8_OFF    GPIO_SetBits(LED8_GPIO_PORT,LED8_GPIO_PIN); #define LED8_ON      GPIO_ResetBits(LED8_GPIO_PORT,LED8_GPIO_PIN);
#define LED9_OFF    GPIO_SetBits(LED9_GPIO_PORT,LED9_GPIO_PIN); #define LED9_ON      GPIO_ResetBits(LED9_GPIO_PORT,LED9_GPIO_PIN);
/* 基本混⾊ */
//红
#define LED_RED1  \
LED1_ON;\
LED2_OFF\
LED3_OFF
#define LED_RED2  \
LED4_ON;\
LED5_OFF\
LED6_OFF
#define LED_RED3  \
LED7_ON;\
LED8_OFF\
LED9_OFF
//绿
#define LED_GREEN1  \
LED1_OFF;\
LED2_ON\
LED3_OFF
#define LED_GREEN2  \
LED4_OFF;\
LED5_ON\
LED6_OFF
#define LED_GREEN3  \
LED7_OFF;\
LED8_ON\
LED9_OFF
//蓝
#define LED_BLUE1 \
LED1_OFF;\
LED2_OFF\
LED3_ON
#define LED_BLUE2 \
LED4_OFF;\
LED5_OFF\
LED6_ON
#define LED_BLUE3 \
LED7_OFF;\
LED8_OFF\
LED9_ON
//黄(红+绿)
#define LED_YELLOW1 \
日本九二式重机LED1_ON;\
LED2_ON\
LED3_OFF
#define LED_YELLOW2 \
LED4_ON;\
LED5_ON\
LED6_OFF
麦田里的向日葵#define LED_YELLOW3 \
LED7_ON;\
LED8_ON\
LED8_ON\
LED9_OFF
//紫(红+蓝)
#define LED_PURPLE1 \
LED1_ON;\
LED2_OFF\
LED3_ON
#define LED_PURPLE2 \
LED4_ON;\
LED5_OFF\
LED6_ON
#define LED_PURPLE3 \
LED7_ON;\
LED8_OFF\
LED9_ON
/
/青(绿+蓝)
#define LED_CYAN1 \
LED1_OFF;\
LED2_ON\
LED3_ON
#define LED_CYAN2 \
LED4_OFF;\
LED5_ON\
LED6_ON
#define LED_CYAN3 \
LED7_OFF;\
LED8_ON\
LED9_ON
//⽩(红+绿+蓝)
#define LED_WHITE1 \
LED1_ON;\
LED2_ON\
LED3_ON
#define LED_WHITE2 \
LED4_ON;\
LED5_ON\
LED6_ON
#define LED_WHITE3 \
LED7_ON;\
LED8_ON\
LED9_ON
//⿊(全部关闭)
#define LED_RGBOFF \
LED1_OFF;\
LED2_OFF;\
LED3_OFF;\
LED4_OFF;\
LED5_OFF;\
LED6_OFF;\
LED7_OFF;\
LED8_OFF;\
LED9_OFF
void LED_GPIO_Config(void); #endif /* __LED_H */
led.c
#include "led.h"
/*初始化LED的IO*/
void LED_GPIO_Config(void)
{
/*定义⼀个GPIO_InitTypeDef类型的结构体*/
2011江苏高考语文
GPIO_InitTypeDef GPIO_InitStructure;
/*开启LED相关的GPIO外设时钟*/
RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK | LED4_GPIO_CLK | LED5_GPIO_CLK | LED6_GPIO_CLK | LED7_GPIO
/*选择要控制的GPIO引脚1*/
GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;
/*设置引脚模式为通⽤推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*设置引脚速率为50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*调⽤库函数,初始化GPIO*/
GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚2*/
GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;
/*调⽤库函数,初始化GPIO*/
GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚3*/
GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;
/*调⽤库函数,初始化GPIOF*/
GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚4*/
GPIO_InitStructure.GPIO_Pin = LED4_GPIO_PIN;
/*调⽤库函数,初始化GPIOF*/
GPIO_Init(LED4_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚5*/
GPIO_InitStructure.GPIO_Pin = LED5_GPIO_PIN;
奇人趣事/*调⽤库函数,初始化GPIO*/
GPIO_Init(LED5_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚6*/
GPIO_InitStructure.GPIO_Pin = LED6_GPIO_PIN;
/*调⽤库函数,初始化GPIOF*/
GPIO_Init(LED6_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚7*/
GPIO_InitStructure.GPIO_Pin = LED7_GPIO_PIN;
/
*调⽤库函数,初始化GPIOF*/
GPIO_Init(LED7_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚8*/
GPIO_InitStructure.GPIO_Pin = LED8_GPIO_PIN;
/*调⽤库函数,初始化GPIOF*/
GPIO_Init(LED8_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚9*/

本文发布于:2024-09-22 19:44:03,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/570794.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:控制   连接   按键   引脚   时钟   定义
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议