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