C\C++/임베디드 시스템

임베디드 시스템 스위치를 이용한 LED 구동

sundori 2023. 11. 8. 22:55
#include <mega128.h>  // 머크로티에서 Mega128을 위한 헤더 파일을 가져옵니다.

#define LED_CON *((unsigned char *)0x8000)  // LED_CONTROL을 위한 메모리 주소를 정의합니다.

void main(void) {  // 메인 함수 시작
    DDRB = 0x00;  // PORTB를 입력으로 설정 (0x00은 모든 핀을 입력으로 설정합니다).

    MCUCR = 0X80;  // 외부 메모리 및 I/O 제어를 활성화합니다.

    // 외부 I/O 디바이스 초기화
    LED_CON = 0X00;  // LED GLCD 제어 버스를 초기화합니다.

    while(1) {  // 무한 루프 시작
        static unsigned char Switch_Button = 0;  // 스위치 버튼 값을 저장하기 위한 변수를 정의합니다.
        Switch_Button = PINB;  // B 포트에서 읽어온 값을 Switch_Button에 저장합니다.

        switch(Switch_Button) {  // Switch_Button 값에 따라 분기합니다.
            case 0xfe: LED_CON = 0x01; break;  // 스위치 값이 0xFE이면 LED_CON을 0x01로 설정합니다.
            case 0xfd: LED_CON = 0x02; break;  // 스위치 값이 0xFD이면 LED_CON을 0x02로 설정합니다.
            case 0xfb: LED_CON = 0x04; break;  // 스위치 값이 0xFB이면 LED_CON을 0x04로 설정합니다.
            case 0xf7: LED_CON = 0x08; break;  // 스위치 값이 0xF7이면 LED_CON을 0x08로 설정합니다.
            case 0xef: LED_CON = 0x10; break;  // 스위치 값이 0xEF이면 LED_CON을 0x10로 설정합니다.
            case 0xdf: LED_CON = 0x20; break;  // 스위치 값이 0xDF이면 LED_CON을 0x20로 설정합니다.
            case 0xbf: LED_CON = 0x40; break;  // 스위치 값이 0xBF이면 LED_CON을 0x40로 설정합니다.
            case 0x7f: LED_CON = 0x80; break;  // 스위치 값이 0x7F이면 LED_CON을 0x80로 설정합니다.
            default: LED_CON = 0X00; break;     // 그 외의 경우, LED_CON을 0x00으로 설정합니다.
        }
    }
}