본문 바로가기

Cadence Certificate Specialist/AVR

7SEGMENT를 이용한 숫자 이동










7SEGMENT를 이용한 숫자 이동




#define F_CPU 16000000UL


#include <avr/io.h>

#include <util/delay.h>


#define FND (*(volatile unsigned char*)0x8000)    //led1의 주소 지정


void io_init(void)     //입출력

{

MCUCR |=(1<<SRE) | (1<<SRW10);

XMCRA=(1<<SRL2) | (0<<SRL1) | (0<<SRL0)|(1<<SRW01) | (1<<SRW00) | (1<<SRW11);

XMCRB |= 0x00;

}



int main(void)

int number[6] = {3, 7, 5, 2, 9, 5};

int i; //

int j; //이동하는 변수지정

int k; //hz조절 변수지정

io_init();



while(1)

{

//------------------------1번째 숫자 이동하기-------------------------------

//--------------------------------------------------------------------------

for(j=5; j>-1; j--)

{

FND = (number[0] <<3)+j;

_delay_ms(500);

}




//------------------------1번째 숫자 고정하기-------------------------------

//------------------------2번째 숫자 이동하기-------------------------------


for(j=5; j>0; j--)

{

for(k=0; k<250; k++)

{

FND=(number[0]<<3)+0; //1번째7seg에서 고정

_delay_ms(1);

FND=(number[1]<<3)+j; //2번째숫자 이동

_delay_ms(1);

}

}



//------------------------1,2번째 숫자 고정하기-------------------------------

//------------------------3번째 숫자 이동하기---------------------------------

for(j=5; j>1; j--)

{

for(k=0; k<166; k++)

{

FND=(number[0]<<3)+0; //1번째7seg에서 고정

_delay_ms(1);

FND=(number[1]<<3)+1; //2번째7seg에서 고정

_delay_ms(1);

FND=(number[2]<<3)+j; //3번째숫자 이동

_delay_ms(1);

}

}



//------------------------1,2,3번째 숫자 고정하기-----------------------------

//------------------------4번째 숫자 이동하기---------------------------------





for(j=5; j>2; j--)

{

for(k=0; k<125; k++)

{

FND=(number[0]<<3)+0; //1번째7seg에서 고정

_delay_ms(1);

FND=(number[1]<<3)+1; //2번째7seg에서 고정

_delay_ms(1);

FND=(number[2]<<3)+2; //3번째7seg에서 고정

_delay_ms(1);

FND=(number[3]<<3)+j; //4번째숫자 이동

_delay_ms(1);

}

}



//------------------------1,2,3,4번째 숫자 고정하기---------------------------

//------------------------5번째 숫자 이동하기---------------------------------


for(j=5; j>3; j--)

{

for(k=0; k<100; k++)

{

FND=(number[0]<<3)+0; //1번째7seg에서 고정

_delay_ms(1);

FND=(number[1]<<3)+1; //2번째7seg에서 고정

_delay_ms(1);

FND=(number[2]<<3)+2; //3번째7seg에서 고정

_delay_ms(1);

FND=(number[3]<<3)+3; //4번째7seg에서 고정

_delay_ms(1);

FND=(number[4]<<3)+j; //5번째숫자 이동

_delay_ms(1);

}

}



//------------------------1,2,3,4,5번째 숫자 고정하기-------------------------

//------------------------6번째 숫자 고정하기---------------------------------



for(j=5; j==5; j--)

{

for (k=0; k<83; k++)

{

FND=(number[0]<<3)+0; //1번째7seg에서 고정        

_delay_ms(1);

FND=(number[1]<<3)+1; //2번째7seg에서 고정

_delay_ms(1);

FND=(number[2]<<3)+2; //3번째7seg에서 고정

_delay_ms(1);

FND=(number[3]<<3)+3; //4번째7seg에서 고정

_delay_ms(1);

FND=(number[4]<<3)+4; //5번째7seg에서 고정

_delay_ms(1);

FND=(number[5]<<3)+5; //6번째7seg에서 고정

_delay_ms(1);

}

}

}


return 0;


}