[STM32] LED / 3 BUTTON SYSTICK

2021. 11. 9. 23:50코딩/STM32

#include "led_onoff.h"
#include "button.h"

extern volatile int Tms_counter;


//13.
void button_con()
{
   static int button1=0;
   static int button2=0;
   static int button3=0;
   if (getButtonState(BUTTON1_GPIO_Port, BUTTON1_Pin, &prevButton1State))
   {

      button1++;
      button1 %=2;   //0 1 0 1 0 1 0 1

      if (button1)

      {
         modestate = BLINK_UP;
      }
      else
      {
         modestate = BLINK_DOWN;
      }

   }

   if (getButtonState(BUTTON2_GPIO_Port, BUTTON2_Pin, &prevButton2State))
   {

      button2++;
      button2 %=2;   //0 1 0 1 0 1 0 1


      if (button2)
      {
         modestate = LED_ON_UP;
      }
      else
      {

         modestate = LED_ON_DOWN;

      }

   }

   if (getButtonState(BUTTON3_GPIO_Port, BUTTON3_Pin, &prevButton3State))
   {
      button3++;
      button3 %=2;   //0 1 0 1 0 1 0 1

      if (button3)

      {
         led_all_off();
      }

   }

}
void select_mode()
{

   switch(modestate)
   {
   case BLINK_UP :
      led_blink_up();
      break;

   case BLINK_DOWN :
      led_blink_down();
      break;

   case LED_ON_UP :
      led_on_up();
      break;

   case LED_ON_DOWN:
      led_on_down();
      break;

   case RESETBUTTON:
      led_all_off();
      break;

   }

}

void led_on_up()     // 0 ->01 -> 012 -> 0123 --- 01234567
{
   led_all_off();
   for (int i=0; i < 8; i++)
   {
      HAL_GPIO_WritePin(GPIOB, 0x01 << i, GPIO_PIN_SET);
      my_delay100();
      if (getButtonState(BUTTON3_GPIO_Port, BUTTON3_Pin, &prevButton3State))
      {
         led_all_off();
         modestate = RESETBUTTON;
         break;
      }
   }
}

//8.
void led_on_down()
{
   led_all_off();
   for (int i=0; i < 8; i++)
   {
      HAL_GPIO_WritePin(GPIOB, 0x80 >> i, GPIO_PIN_SET);
      my_delay100();
      if (getButtonState(BUTTON3_GPIO_Port, BUTTON3_Pin, &prevButton3State))
      {
         led_all_off();
         modestate = RESETBUTTON;
         break;
      }
   }
}
//7.
void led_blink_up()
{
   for (int i = 0; i<8; i++)
   {
      led_all_off();
      HAL_GPIO_WritePin(GPIOB, 0x01 << i, GPIO_PIN_SET);
      my_delay100();
      if (getButtonState(BUTTON3_GPIO_Port, BUTTON3_Pin, &prevButton3State))
      {
         led_all_off();
         modestate = RESETBUTTON;
         break;
      }
   }
}
//6.
void led_blink_down()
{
   for (int i = 0; i<8; i++)
   {
      led_all_off();
      HAL_GPIO_WritePin(GPIOB, 0x80 >> i, GPIO_PIN_SET);
      my_delay100();
      if (getButtonState(BUTTON3_GPIO_Port, BUTTON3_Pin, &prevButton3State))
      {
         led_all_off();
         modestate = RESETBUTTON;
         break;
      }
   }

}
//5.
void led_all_on()
{
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
}
//4.
void led_all_off()
{
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
}
//3.
void demoboard_led2_toggle_button()
{
	if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET)
	{
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
	}

}
//2.
void demoboard_led2_button_onoff()
{
	if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET)
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
	}
	else
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
	}
}
//1.
void demoboard_led2_onoff_haldelay()
{
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
	HAL_Delay(1000);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
	HAL_Delay(1000);
}

void my_delay100()
{
	Tms_counter = 0;
	while(Tms_counter <=100);
	{
	}
}