按键控制的流水灯(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. 运行结果

按键控制流水灯

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值