STM32-心得体会

本系统利用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_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_PO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值