Home > Study > C Language > ARM System Programming > [ex08] KEY_IN_LAB #2 Key에 의한 LED Toggling

[ex08] KEY_IN_LAB #2 Key에 의한 LED Toggling
Study Language

문제 설명


// main.c #2
void Main(void)
{
	Sys_Init();
	Uart_Printf("KEY Input Toggling #1\n");


	// KEY[1:0], GPB[7:6]을 GPIO 입력으로 선언



	for(;;)
	{
		// KEY0가 눌릴때마다 LED0의 값을 Toggling



	}
}

정답 코드


/* Key에 의한 LED Toggling */

#if 1

void Main(void)
{
	Sys_Init();
	Uart_Printf("KEY Input Toggling #1\n");

	Macro_Write_Block(GPIOB->CRL, 0xff, 0x44, 24);

	for(;;)
	{
		if(Macro_Check_Bit_Clear(GPIOB->IDR, 6))
		{
			Macro_Invert_Bit(GPIOB->ODR, 8);
		}
	}
}

#endif

/* Key Released 상태 대기에 의한 LED Toggling */

#if 0

void Main(void)
{
	Sys_Init();
	Uart_Printf("KEY Input Toggling #2\n");

	Macro_Write_Block(GPIOB->CRL, 0xff, 0x44, 24);

	for(;;)
	{
		if(Macro_Check_Bit_Clear(GPIOB->IDR, 6))
		{
			Macro_Invert_Bit(GPIOB->ODR, 8);
			while(!Macro_Check_Bit_Set(GPIOB->IDR, 6));
		}
	}
}

#endif

/* Inter-Lock을 적용한 Key에 의한 LED Toggling */

#if 0

void Main(void)
{
	int interlock = 1;

	Sys_Init();
	Uart_Printf("KEY Input Toggling #3\n");

	Macro_Write_Block(GPIOB->CRL, 0xff, 0x44, 24);

	for(;;)
	{
		if((interlock != 0) && Macro_Check_Bit_Clear(GPIOB->IDR, 6))
		{
			Macro_Invert_Bit(GPIOB->ODR, 8);
			interlock = 0;
		}

		else if((interlock == 0) && Macro_Check_Bit_Set(GPIOB->IDR, 6))
		{
			interlock = 1;
		}
	}
}

#endif

메모


printf 내부의 \n 습관화 필요