IT 융합공학특론[12] : LED 점등프로그램

NOAH·2021년 6월 11일
0

아두이노

목록 보기
9/13
post-thumbnail


#define F_CPU 16000000UL
//CPU 클럭 시간 16MHz 설정 


#include <avr/io.h>
#inlcude <util/delay.h>


int main(void)
{
	DDRA = 0b11111111;
    //PROTA의 8피트를 모두출력으로 사용하겠음
    // DDRA = 0xFF; 와 동일
    
    
    while(1)
    {
    PORTA = 0b11111110;
    _delay_ms(1000); //1초 지연
    PORTA = 0b11111111;
    }
    
}

비트 단위 부정연산자로 직관적으로 바꾸기

~연산자를 이용해서

이렇게 1일때 점등될 수 있도록 해줄 수 있다.

그런데 첫번째 비트는 부호비트 이기 때문에 한번 더 생각할 필요가 있다.

다양한 방식으로 점등시키기

10 진수


#define F_CPU 16000000UL 

#include <avr/io.h>
#inlcude <util/delay.h>


int main(void)
{
	DDRA = 0b11111111;
	

    while(1)
    {
    
    for(int i = 0; i < 256 ; i ++)
    {
    PORTA = ~i;
    _delay_ms(1000);
    }

    }
    
}

2진수


#define F_CPU 16000000UL 

#include <avr/io.h>
#inlcude <util/delay.h>


int main(void)
{
	DDRA = 0b11111111;
	
    while(1)
    {
    PORTA = (unsigned char) ~0xaa; _delay_ms(1000);
    PORTA = (unsigned char) ~0x55; _delay_ms(1000);
    PORTA = (unsigned char) ~0x7e; _delay_ms(1000);
    PORTA = (unsigned char) ~0x99; _delay_ms(1000);
    }
    
}

배열

# define F_CPU160000000UL

#include<avr/io.h>
#include<util/delay.h>

int main(void)
{
DDRA = 0b11111111;
unsigned char ledtable[] {
~0x01, ~0x02, ~0x04, ~0x08, ~0x10, ~0x20,
~0x40, ~0x80, ~0x40, ~0x20, ~0x10, ~0x08,
~0x04, ~0x02 };
}

while(1){
	for(int i = 0; i < 14 ; i++){
    PORTA = leㅇtable[i]
    _delay_ms(1000);
}
}

shift 연산자.

# define F_CPU16000000UL

#include<avr/io.h>
#include<util/delay.h>

int main(void)
{
	DDRA = 0b11111111;
    
    int i = 0;
    int value = 0x01;
    
    while(1) {
    
    	PORTA = ~value;
        _delay_ms(1000);
        value <<== 1;
        
        if(value == 0x100) value = 0x01;
    }
    
}

0개의 댓글