Page 566 - 2
P. 566
PORTD = 0xff; //PORTD 를 전부 1 으로 설정
DDRF = 0xff; //PORTF 전체를 출력으로 설정
EICRA = (0<<ISC31) | (0<<ISC30) | (0<<ISC21) | (0<<ISC20) | (1<<ISC11) | (0<<ISC10) |
(1<<ISC01) | (0<<ISC00); // 외부인터럽트0,1 을 하강에지에서 실행되도록 설정
EICRB = (0<<ISC71) | (0<<ISC70) | (1<<ISC61) | (0<<ISC60) | (1<<ISC51) | (0<<ISC50) |
(1<<ISC41) | (0<<ISC40); // 외부인터럽트 4,5 를 하강에지에서 실행되도록 설정
EIMSK = (0<<INT7) | (1<<INT6) | (1<<INT5) | (1<<INT4) | (0<<INT3) | (0<<INT2) | (1
<<INT1) | (1<<INT0); // 외부인터럽트0,1,4,5 를 사용
EIFR = (0<<INTF7) | (1<<INTF6) | (1<<INTF5) | (1<<INTF4) | (0<<INTF3) | (0<<INTF2)
| (1<<INTF1) | (1<<INTF0); // 외부인터럽트 플래그 0,1,4,5 를 사용
TIMSK = 0x01; //TimerCounter0 을 오버플로우로 설정
TCCR0 = 0x07; //TimerCountControlResister 를 1024 분주로 설정
TCNT0 = 0; //TCNT 값을 0 으로 초기화
#asm ("sei") // 모든 인터럽트를 허용
lcd_cmd(0x20);
lcd_cmd(0x28); //LCD 펑션 셋
lcd_cmd(0x06); //LCD 엔트리모드 설정
lcd_cmd(0x0c); //Display ON
lcd_cmd(0x01); //Display 초기화
}
void lcw(unsigned char ch) //LCD 단일문자 출력함수
{
// 상위 4 비트 전송
PORTG = 0x05; //LCD Write Mode 로 설정
PORTC = ch & 0xf0; // 상위 4bit 에 문자 전송
PORTG &= 0xfb; //LCD 끄기
// 하위 4 비트 전송
PORTG = 0x05;
PORTC = ch <<4;
PORTG &= 0xfb;
delay_us(400);
}
void lcd_str(unsigned char *str) //LCD 문자열 출력함수
{
while(*str)
{
lcw(*str++);
delay_ms(50); // 글자 하나마다 약 50ms 의 지연시간을 가짐.
}
}
- 566 -