Language/AVR

ATmega 128 : LED Bar 포인터 동작 구현

짱도르딘 2024. 5. 26. 13:10
728x90

LED Bar를 포인터로 구현하여 진행하였다.

 

헤더파일, 소스파일, 메인파일로 나누어 진행하였다,

 

가장 먼저 메인파일의 코드는 다음과 같다.

#include "common.h" 
#include "led.h"


int main(void)
{
	ledInit();
	uint8_t ledData = 0x01;
	
    while (1) 
    {
		for (uint8_t i = 0; i < 7; i++)
		{
			ledLeftShift(&ledData);
			_delay_ms(200);
		}
		for (uint8_t i = 0; i < 7; i++)
		{
			ledRightShift(&ledData);
			_delay_ms(200);
		}
    }
}

 

메인파일에서 C언어에서 기본 제공해주는 헤더파일을 정리한 "common.h" 헤더파일과, led 동작 구현을 위한 "led.h" 헤더파일을 선언하였다.

 

다음은 led 동작 구현을 위해 별도로 구현한 led 헤더파일이다.

#ifndef LED_H_
#define LED_H_

#include <avr/io.h>

#define LED_DDR DDRC
#define LED_PORT PORTC

void ledInit();
void GPIO_Output(uint8_t data);
void ledLeftShift(uint8_t *data);
void ledRightShift(uint8_t *data);


#endif /* LED_H_ */

 

led 헤더파일에는 구현한 함수들을 모아서 선언하였다.

 

다음은 led 동작 구현을 위한 led 소스파일의 코드이다.

#include "led.h"

void ledInit() // C포트 전체출력 함수
{
	LED_DDR = 0xff;
}

void GPIO_Output(uint8_t data) // GPIO : General Purpose Input Output
							   // 즉, AVR PIN 모드를 Input 또는 Output으로 설정하는 것
{
	LED_PORT = data; // 8bit 값을 가진 data에 따라 출력 결정
}

void ledLeftShift(uint8_t *data)
{
	*data = (*data >> 7) | (*data << 1);
	GPIO_Output(*data);
}

void ledRightShift(uint8_t *data)
{
	*data = (*data << 7) | (*data >> 1);
	GPIO_Output(*data);
}

 

*data = (*data >> 7) | (*data << 1); 이 부분과  *data = (*data << 7) | (*data >> 1); 이 부분은 따로 공부해서 정리하겠음!!

 

다음은 common 헤더파일이다.

#ifndef COMMON_H_
#define COMMON_H_

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>



#endif /* COMMON_H_ */

 

common 헤더파일에는 Microchip Studio에서 기본적으로 주어지는 헤더파일들을 모아 정리해둔 곳이다.

 

 

 

728x90