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;
}
'Cadence Certificate Specialist > AVR' 카테고리의 다른 글
각각의 FND 숫자 표시 (0) | 2014.06.18 |
---|---|
AVR ATmega128A 를 이용한 신호등 동작 구현 - 2 - (0) | 2014.06.18 |
ATmega128 Datasheet /AVR KIT (0) | 2014.06.15 |