목차
없음
본문내용
프트
TCNT0=0xFF-91;
tov_cnt++;
if (tov_cnt >= count_limit) { //count_limit = 9
tov_cnt=0;
if (b_mode == MODE_DISPLAY) //텍스트 모드
{
char_col_idx++;
if (char_col_idx >= CHAR_SIZE) { // CHAR_SIZE는 1개 문자가 표시되는 크기, 8
char_col_idx = 0;
char_row_idx++;
if (char_row_idx >= CH_SET_SIZE) {
char_row_idx=0;
}
}
} else if (b_mode == MODE_TIMER) //디지털 시계모드
{
char_col_idx++;
if (char_col_idx >= CHAR_SIZE) { // CHAR_SIZE는 1개 문자가 표시되는 크기, 8
char_col_idx = 0;
char_row_idx++;
if (char_row_idx >= CH_SET_SIZE) {
char_row_idx=0;
}
}
////////////////////////시계루틴//////////////////////////////////////////
timer_cnt++;
if (timer_cnt >= 2439) { //1초가 만들어진 순간 (1242.2360248)
timer_cnt=0;
sec++;
if (sec > 59) {
sec =0;
min++;
//분
CH_SET[5] = (min % 10) + 53; // 53은 숫자 0이 저장된 배열 인덱스(코드값) 즉, 초의 1의자리를 세팅
CH_SET[4] = (min / 10) + 53;
}
if (min > 59) {
min = 0;
hour++;
//시
CH_SET[2] = (hour % 10) + 53; // 53은 숫자 0이 저장된 배열 인덱스(코드값) 즉, 초의 1의자리를 세팅
CH_SET[1] = (hour / 10) + 53;
}
if (hour > 23) {
hour = 0;
//시
CH_SET[2] = (hour % 10) + 53; // 53은 숫자 0이 저장된 배열 인덱스(코드값) 즉, 초의 1의자리를 세팅
CH_SET[1] = (hour / 10) + 53;
}
//초
CH_SET[8] = (sec % 10) + 53; // 53은 숫자 0이 저장된 배열 인덱스(코드값) 즉, 초의 1의자리를 세팅
CH_SET[7] = (sec / 10) + 53;
}
/////////////////////////////////////////////////////////
} // end of else if (b_mode == MODE_TIMER
}
#asm("sei");
}
///////////////////////////////////////////////////////////////
//ATmega128 포트, 타이머, 인터럽트 초기화
void initialize(void) {
// Input/Output Ports initialization
PORTA=0xFF;
DDRA=0xFF;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
PORTE=0x00;
DDRE=0x00;
PORTF=0x00;
DDRF=0x00;
PORTG=0x00;
DDRG=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0b00000010; //8분주
TCNT0=0xFF-99;//100번을 센다
OCR0=0x00;
// External Interrupt(s) initialization
// INT0: Off, INT1: Off, INT2: Off, INT3: Off
// INT4: Off,INT5: Off,INT6: Off, INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
ETIMSK=0x00;
// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud rate: 9600
UCSR0A=0x00;
UCSR0B=0xD8;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x67;
ACSR=0x80;
SFIOR=0x00;
} //end of initialize()
/////////////////////////////////////////////////////////
// main 시작
void main(void)
{
initialize();//mcu초기화
CH_SET_IDX = 0;
#asm("sei")// Global enable interrupts
//전체 주기 133755 micro sec
while (1) {
PORTA = CHAR_TBL[CH_SET[char_row_idx]][char_col_idx];
} // end of while-loop
} //end of main()
3-4. 블루투스 신호 생성 안드로이드 어플리케이션 제작
안드로이드 스마트폰을 통해 잔상 디스플레이에 표시되는 잔상 문자를 변경할 수 있도록 어플리케이션을 작성하였다.
접속할 대상을 정하는 부분이다.
POVD가 본 프로젝트에 사용된 블루투스 모듈의 주소이다.
잔상 문자의 좌, 우측 시프트와 정지가 가능하다.
문자를 송신하여 잔상 디스플레이에 나타낼 수 있다.
시계모드로 전환시키거나 다시 텍스트 모드로 전환시킬 수 있도록 모드 전환버튼을 두었다.
4. 결론
본 팀프로젝트를 통해 최종 완성된 모습은 다음과 같다.
실제 시연모습은 동영상자료를 참조하도록 한다.
TCNT0=0xFF-91;
tov_cnt++;
if (tov_cnt >= count_limit) { //count_limit = 9
tov_cnt=0;
if (b_mode == MODE_DISPLAY) //텍스트 모드
{
char_col_idx++;
if (char_col_idx >= CHAR_SIZE) { // CHAR_SIZE는 1개 문자가 표시되는 크기, 8
char_col_idx = 0;
char_row_idx++;
if (char_row_idx >= CH_SET_SIZE) {
char_row_idx=0;
}
}
} else if (b_mode == MODE_TIMER) //디지털 시계모드
{
char_col_idx++;
if (char_col_idx >= CHAR_SIZE) { // CHAR_SIZE는 1개 문자가 표시되는 크기, 8
char_col_idx = 0;
char_row_idx++;
if (char_row_idx >= CH_SET_SIZE) {
char_row_idx=0;
}
}
////////////////////////시계루틴//////////////////////////////////////////
timer_cnt++;
if (timer_cnt >= 2439) { //1초가 만들어진 순간 (1242.2360248)
timer_cnt=0;
sec++;
if (sec > 59) {
sec =0;
min++;
//분
CH_SET[5] = (min % 10) + 53; // 53은 숫자 0이 저장된 배열 인덱스(코드값) 즉, 초의 1의자리를 세팅
CH_SET[4] = (min / 10) + 53;
}
if (min > 59) {
min = 0;
hour++;
//시
CH_SET[2] = (hour % 10) + 53; // 53은 숫자 0이 저장된 배열 인덱스(코드값) 즉, 초의 1의자리를 세팅
CH_SET[1] = (hour / 10) + 53;
}
if (hour > 23) {
hour = 0;
//시
CH_SET[2] = (hour % 10) + 53; // 53은 숫자 0이 저장된 배열 인덱스(코드값) 즉, 초의 1의자리를 세팅
CH_SET[1] = (hour / 10) + 53;
}
//초
CH_SET[8] = (sec % 10) + 53; // 53은 숫자 0이 저장된 배열 인덱스(코드값) 즉, 초의 1의자리를 세팅
CH_SET[7] = (sec / 10) + 53;
}
/////////////////////////////////////////////////////////
} // end of else if (b_mode == MODE_TIMER
}
#asm("sei");
}
///////////////////////////////////////////////////////////////
//ATmega128 포트, 타이머, 인터럽트 초기화
void initialize(void) {
// Input/Output Ports initialization
PORTA=0xFF;
DDRA=0xFF;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
PORTE=0x00;
DDRE=0x00;
PORTF=0x00;
DDRF=0x00;
PORTG=0x00;
DDRG=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0b00000010; //8분주
TCNT0=0xFF-99;//100번을 센다
OCR0=0x00;
// External Interrupt(s) initialization
// INT0: Off, INT1: Off, INT2: Off, INT3: Off
// INT4: Off,INT5: Off,INT6: Off, INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
ETIMSK=0x00;
// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud rate: 9600
UCSR0A=0x00;
UCSR0B=0xD8;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x67;
ACSR=0x80;
SFIOR=0x00;
} //end of initialize()
/////////////////////////////////////////////////////////
// main 시작
void main(void)
{
initialize();//mcu초기화
CH_SET_IDX = 0;
#asm("sei")// Global enable interrupts
//전체 주기 133755 micro sec
while (1) {
PORTA = CHAR_TBL[CH_SET[char_row_idx]][char_col_idx];
} // end of while-loop
} //end of main()
3-4. 블루투스 신호 생성 안드로이드 어플리케이션 제작
안드로이드 스마트폰을 통해 잔상 디스플레이에 표시되는 잔상 문자를 변경할 수 있도록 어플리케이션을 작성하였다.
접속할 대상을 정하는 부분이다.
POVD가 본 프로젝트에 사용된 블루투스 모듈의 주소이다.
잔상 문자의 좌, 우측 시프트와 정지가 가능하다.
문자를 송신하여 잔상 디스플레이에 나타낼 수 있다.
시계모드로 전환시키거나 다시 텍스트 모드로 전환시킬 수 있도록 모드 전환버튼을 두었다.
4. 결론
본 팀프로젝트를 통해 최종 완성된 모습은 다음과 같다.
실제 시연모습은 동영상자료를 참조하도록 한다.
소개글