按键控制的流水灯(IDE+Protuse)

实验条件:Cube IDE +Protuse

任务目标: STM32F103R6T6系列的MCU引脚上接有8个LED灯和两个按键,原理图如下,编程实现当KEY1按下时LED灯从上到下流水,当KEY2按下时,LED灯从下至上流水。

 一 、Protuse模型的搭建

1.  使用的仿真元器件

 

 2. 使用总线通信,添加方式如下:

 3. 使用线标连接原理图中的总线(参考“中断方式实现数码管显示(IDE+Protuse)”)

二、Cube MX的设置

1. 芯片选择“STM32F103R6T6”

2.引脚配置 

按键引脚: PA4、PA6 (通用输入)

LED灯控制:PC0-PC7 (通用输出)

3.1 复位及时钟控制(参考“中断方式实现数码管显示(IDE+Protuse)”)

3.2 调试接口(参考“中断方式实现数码管显示(IDE+Protuse)”)

4.时钟配置(参考“中断方式实现数码管显示(IDE+Protuse)”)

输入频率为8MHz,最高为72MHz 

5.工程配置(参考“中断方式实现数码管显示(IDE+Protuse)”)

三、Cube IDE程序编写 

1. 定义变量

/* USER CODE BEGIN PV */
 int8_t i=0;
 uint16_t PIN[]={LED_1_Pin,LED_2_Pin,LED_3_Pin,LED_4_Pin,LED_5_Pin,LED_6_Pin,
		 LED_7_Pin,LED_8_Pin};
/* USER CODE END PV */

2.while()函数

    /* USER CODE BEGIN 3 */
	  if(HAL_GPIO_ReadPin(GPIOA,KEY_1_Pin)==GPIO_PIN_RESET)
	  {
		  HAL_GPIO_WritePin(GPIOC, LED_1_Pin|LED_2_Pin|LED_3_Pin|LED_4_Pin
		                            |LED_5_Pin|LED_6_Pin|LED_7_Pin|LED_8_Pin, GPIO_PIN_SET);
		  HAL_Delay(100);
		  if(HAL_GPIO_ReadPin(GPIOA,KEY_1_Pin)==GPIO_PIN_RESET)
		  {
			  for(i=0;i<=7;i++)
			  {
				  HAL_GPIO_WritePin(GPIOC, PIN[i],GPIO_PIN_RESET);
				  HAL_Delay(100);
				  HAL_GPIO_WritePin(GPIOC, PIN[i],GPIO_PIN_SET);
				  HAL_Delay(100);
			  }
		  }
	  }
	  else if( HAL_GPIO_ReadPin(GPIOA,KEY_2_Pin)==GPIO_PIN_RESET)
	  {
		  HAL_Delay(10);
		 		  if( HAL_GPIO_ReadPin(GPIOA,KEY_2_Pin)==GPIO_PIN_RESET)
		 		  {
		 			  for(i=7;i>=0;i--)
		 		  {
		 				  HAL_GPIO_WritePin(GPIOC, PIN[i],GPIO_PIN_RESET);
		 				  HAL_Delay(100);
		 				  HAL_GPIO_WritePin(GPIOC, PIN[i],GPIO_PIN_SET);
		 				  HAL_Delay(100);
		 		  }
		 		  }
	  }
  }

  /* USER CODE END 3 */

3.编译程序并生成hex文件。

4. 运行结果

按键控制流水灯


版权声明:本文为weixin_45785022原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。