문제 설명
다음 요구하는 기능을 만족하는 코드를 작성하라
[요구 사항]
- LCD 보드의 방향키(JOG)의 DOWN Key는 PB5번에 연결되어 있다.
- 단, 이 KEY는 Pullup 저항을 연결하지 않은 상태라 누르면 GND에 연결되어 0이지만 떼면 Floating 상태가 된다.
- 이 JOG의 DWON Key를 누르면 LED0이 ON되고 떼면 OFF가 되는 코드를 구현하라
- (주의) 외부에 Pullup 저항이 없으므로 마이컴 내부의 Pullup 저항을 사용하도록 설정하여야 한다.
- 내부 Pullup 사용은 교재 221 페이지 표를 참고하라 (Input Pullup, Pulldown 모두 1000으로 설정하되
ODR 레지스터의 해당 비트를 0으로 하면 Pull-down, 1로하면 Pull-up 사용이 enable 된다.) - (주의) B 포트의 클록이 활성화(전원 인가)되어야 하므로 다음 코드를 꼭 시작부분에 추가한다.
RCC_APB2ENR |= (1<<3);
[제출 요령]
- 코드를 완성하면 반드시 동작 확인을 받은후 강사 지시에 의하여 코드를 업로드해야 함
- 임의로 코드 제출시 해당 문항 0점 처리되므로 주의 바람
- 모든 코드는 main.c 하나의 파일에만 작성할 것
- 다른 파일에 있는 수업때 제공 또는 작성한 코드를 사용한 경우는 복사하여 제출할 필요 없음 (예) LED_Display 함수 등
- 코드는 작성한 main.c의 전체를 복사하여 제출할 것 (다만 작성 코드와 무관한 기존 코드는 제거할 것)
정답 코드
#include "device_driver.h"
void Main(void)
{
Macro_Set_Bit(RCC->APB2ENR, 3);
Macro_Write_Block(GPIOB->CRL, 0xf, 0x8, 20);
Macro_Set_Bit(GPIOB->ODR, 5);
Macro_Write_Block(GPIOB->CRH, 0xf, 0x6, 0);
Macro_Set_Bit(GPIOB->ODR, 8);
while (1)
{
if (Macro_Check_Bit_Clear(GPIOB->IDR, 5)) Macro_Clear_Bit(GPIOB->ODR, 8);
else Macro_Set_Bit(GPIOB->ODR, 8);
}
}
메모
printf 내부의 \n 습관화 필요