문제 설명
UART로 입력된 숫자(1~9)를 이용하여 LED 깜빡임 속도를 조절하고, 일정 주기로 UART를 통해 점(.)을 출력하는 프로그램을 작성하라.
- 숫자 1~9 입력 시 TIM4 타이머의 주기를 조절하여 LED 깜빡임 속도 변경
- 숫자 0 입력 시 LED 깜빡임을 멈춤
- TIM2를 이용해 일정 주기로 UART에 점(.) 출력
- 두 타이머는 독립적으로 동작하며, 깜빡임과 출력이 동시에 이루어짐
정답 코드
void Main(void)
{
Sys_Init();
char x;
int n;
int timer_run = 0;
int led = 0;
TIM4_Repeat(10);
TIM2_Repeat(100);
for(;;)
{
x = Uart1_Get_Pressed();
if(x != 0)
{
n = x - '0';
Uart1_Printf("%d", n);
// 0? timer_run = 0;
if (n==0)
{
timer_run = 0;
}
// 1~9? TIM4_Change_Value(n * 10); timer_run = 1
else
{
TIM4_Change_Value(n * 10);
timer_run = 1;
}
}
if(TIM4_Check_Timeout() && timer_run == 1)
{
//LED반전
LED_Display(led ^= 1);
}
if(TIM2_Check_Timeout())
{
Uart1_Printf(".");
}
}
}
메모
printf 내부의 \n 습관화 필요