본문 바로가기
[Intel] 엣지 AI SW 아카데미/펌웨어 프로그래밍 75hour

[Intel] 엣지 AI SW 아카데미 8일차 [Intel] 엣지 AI SW 아카데미

by 0x01 2023. 11. 17.

제목: [Intel] 엣지 AI SW 아카데미

부제목: 8일차

일정: 2023.11.06(월)

수업 내용: 
 

 - C언어 프로그래밍

 - Micro Processor 원리 

 - Atmel사의 8bit Micro-controller 

 - KUT0128 Evaluation Board 기능과 특징

 

 - IO Port 제어

목표: 
 LED 출력 회로

 

중요한점 PULL UP 저항!!

 

예제) LED 순차 점멸하기 [배열이용]

#include <mega128.h>
#include <delay.h> // 딜레이 함수 정의 헤더 파일

const unsigned char led[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};

void main(void) // 배열 이용하여 순차 점멸하기(Flash 형 : 값 고정 이용)
{
    int i;
    DDRC = 0xFF; // 포트C 출력 설정
    
    while(1){ // 무한 루프
        for(i = 0;i < 8;i++){
        PORTC = led[i]; // i번째 led값 출력
        delay_ms(500); // 500ms 딜레이
        }
    }
}

 

실험영상 :

https://youtube.com/shorts/zqkpjBmpoHU?feature=share

 

예제) LED 하나만 점멸하기

#include <mega128.h>
#include <delay.h> // 딜레이 함수 정의 헤더 파일

void main(void)
{
    DDRC = 0xFF; // 포트C 출력 설정
    PORTC = 0x55; // 포트C 0x55 출력
    
    while(1){ // 무한 루프
        PORTC = PORTC ^ 0x01; // PORTC의 0비트만 반전
        delay_ms(500); // 500ms 딜레이
    }
}

 

실험영상 :

https://youtube.com/shorts/goUmucz7jbU?feature=share

 

예제) 스위치 상태 읽기

#include <mega128.h>

void main(void)
{
    unsigned char sw;
    
    DDRC = 0xFF; // 포트C 출력 설정
    DDRE = 0x00; // 포트E 입력 설정
    PORTC = 0xFF; // LED 모두 off (output=1, off)
    
    while(1){
        sw = PINE & 0b00010000; // PE4비트 추출 (PORT E의 4번 입력핀)
        if(sw != 0) PORTC = 0xFF; // 입력이 1이면, SW OFF -> LED 모두 OFF
        else PORTC = 0x00; // 입력이 0이면, SW ON -> LED 모두 ON
    }
}

 

예제) 스위치 상태에 따라 다르게 출력하기

#include <mega128.h>

void main(void) { 
    unsigned char key;
    
    DDRC = 0xFF; // 포트 C 출력 설정
    DDRE = 0x00; // 포트 E 입력 설정
    PORTC = 0xFF; // LED 모두 OFF
    
    while(1){ 
        key = PINE & 0xF0; // 포트 E 4.5.6.7 읽어오기.
        
        switch(key){
        	case 0b11100000 : // SW1(E.4)이 눌리면 LED 모두 ON
                PORTC = 0x00;
                break; 
        	casse 0b11010000 : // SW2(E.5)가 눌리면 LED 모두 OFF
                PORTC = 0xFF;
                break;
            case 0b10110000 : // SW3(E.6)이 눌리면 짝수번째 LED ON
                PORTC = 0b01010101;
                break;
            case 0b01110000 : // SW4(E.7)가 눌리면 홀수번째 LED ON
                PORTC = 0b10101010;
                break;
            default: 
            	break;
        } // end of switch
    } // end of while
} // end of main

 

설명:

 버튼 입력에 따른 LED 점등 표시 각각 틀리게 하는 예제입니다.

 switch 문으로 총 4개의 케이스로 나눴으며,

 각각의 케이스는 버튼의 입력이 이루어 지는 것을 표현 하였고,

 입력에 따른 LED의 점등이 되게끔 만들어진 코드입니다.