[전자공학] PDA를 이용한 LCD 무선 제어 (졸업논문 정보통신
본 자료는 7페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
해당 자료는 7페이지 까지만 미리보기를 제공합니다.
7페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1. 개요

2. 활용방안

3. 개발환경

4. 선행기술
(1) PDA
(2) TCP/IP 통신
(3)Windows Socket
(4)TCP 프로그램
(5)I/O ActiveX Control
(6) AVR-8515

5. 제작과정
(1)클라이언트 프로그래밍
(2)서버 프로그래밍
(3)AVR-8515 프로그램

6. 문제점 및 결론

7. 부록 - AT90S8515 데이터 시트

본문내용

xFE; //RS = 0;
PORTC &= 0xFD; //RW = 0;
delay_us(1);
PORTC |= 0x04; //E = 1;
delay_us(1);
PORTC &= 0xFB; //E = 0;
}
//데이터 쓰기 함수
void Data(unsigned char byte)
{
Busy();
// 데이터 상위 바이트
PORTC = (byte & 0xF0); // 데이터
PORTC |= 0x01; //RS = 1;
PORTC &= 0xFD; //RW = 0;
delay_us(1);
PORTC |= 0x04; //E = 1;
delay_us(1);
PORTC &= 0xFB; //E = 0;
// 데이터 하위 바이트
PORTC = ((byte<<4) & 0xF0); // 데이터
PORTC |= 0x01; //RS = 1;
PORTC &= 0xFD; //RW = 0;
delay_us(1);
PORTC |= 0x04; //E = 1;
delay_us(1);
PORTC &= 0xFB; //E = 0;
}
// LCD 초기화
void LCD_init(void)
{
DDRC = 0xFF; // PORTC의 모든 포트를 출력으로 설정
PORTC &= 0xFB; //E = 0;
delay_ms(15);
Command(0x20);
delay_ms(5);
Command(0x20);
delay_us(100);
Command(0x20);
Command(FUNCSET);
Command(DISPON);
Command(ALLCLR);
Command(ENTMODE);
}
// 아스키 값을 16진수로 변환함수
int asc2hex(char ch)
{
if ( (ch >= '0') && (ch<='9')) return (ch-'0');
else if ( (ch >= 'a') && (ch<='f')) return (ch-'a'+10);
else if ( (ch >= 'A') && (ch<='F')) return (ch-'A'+10);
return 0;
}
// 대전국 출력 함수
void LCD_String(char flash str[])
{
char flash *pStr=0;
pStr = str;
while(*pStr) Data(*pStr++);
}
// 스코어 출력함수
void LCD_Score(char str[])
{
while(*str) Data(*str++);
}
interrupt [UART_RXC] void uart_rxc(void)
{
rx = UDR; // 수신된 UART 데이터 레지스터를 rx에 저장
UCR |= 0x20; // UART 데이터 레지스터 empty 인터럽트 인에이블 UDRIE = '1'
receive =1;
}
interrupt [UART_DRE] void uart_dre(void)
{
UDR = rx; // 수신된 rx를 UART 데이터 레지스터에 전송
UCR &= 0xDF; // UART 데이터 레지스터 empty 인터럽트 디스에이블 UDRIE = '0'
}
void main(void)
{
UCR |= 0x80;
UCR |= 0x10; // 수신 인에이블 RXEN = '1'
UCR |= 0x08; // 송신 인에이블 TXEN = '1'
UBRR = 51; // X-TAL = 8MHz 일때, BAUD = 9600
#asm ("sei")
LCD_init(); // LCD 초기화
DDRB = 0xFF; // B 포트 모든 핀을 출력으로 설정
PORTB = led; // B 포트에 초기값 출력
while(1)
{
if( receive ) // 수신된 rx DATA를 이용하여 LCD에 디스플레이
{
rx &= 0xff;
if( rx == 'H' )
{
if( cPacketNo >= 2 )
{
k_s=asc2hex(cScore[0]); // 수신된 아스키 값을 정수 값으로 변환
j_s=asc2hex(cScore[1]);
sprintf(str,"% 01u : %01u", k_s, j_s); //변환된 정수 값을 스트링으로 변환
Command(0x02);
LCD_String("Korea : Japan "); // 대전팀 디스플레이
Command(LINE2);
LCD_Score(str); // 스코어 디스플레이
}
cPacketNo = 0;
}
else if( rx == 'G' )
{
cPacketNo = 0;
}
else
{
cScore[cPacketNo++] = rx;
}
receive=0;
}
}
}
6. 문제점 및 결론
클라이언트, 서버프로그램을 에뮬레이터에서 돌려보면 완벽하게 동작하나 실제 클라이언트로 시도하면 안 되는 경우가 있었다. 이의 원인으로는 서버의 네트워크 환경에 방화벽이 있다면 소켓 통신 타임아웃이 되어서 제대로 동작하지 않았다. 즉, 방화벽이 설치된 네트워크 환경에서는 사용하지 못한다는 단점이 있다.
같은 Windows XP 환경이라도 서버프로그램 구동이 불가능 하였다. 즉, 서버 프로그램을 인스톨 하지 못했다. 이것은 개발 스킬이 부족한 것으로 차후 어떤 OS의 PC라도 서버프로그램을 인스톨하는 형태로 만들 수 있을 것으로 본다.
PDA에서 서버프로그램으로 2개의 숫자 데이터가 넘어갈 때 이상하게도 앞의 숫자가 '0'으로 나왔었다. 즉 앞쪽 데이터가 유실되는 것이었다. 이유는 지금도 모른다. 이에 대한 해결책으로 서버프로그램에서 쓰레기 값으로 하나의 스트링을 첨가해 놨더니 이러한 문제가 해결되었다.
조원 모두 하드웨어 분야가 취약하여 마지막 LCD를 구동시키는 데 애를 많이 먹었다. LCD 부분만 결국 다른 사람의 도움을 얻었다. 100% 우리 조의 힘으로 못했다는 게 조금 아쉽다.
본 졸업작품의 활용방안은 광범위 하다고 본다. 컨트롤 하는데 거리제약이 없어지기 때문이다. 심지어 지구 반대편에서 자동차를 타고 가면서도 하드웨어 컨트롤이 가능하다는데 매력이 있다고 본다.
축구심판용으로 개발해서 아쉬운 점은 좀더 많은 기능을 첨가했으면 좋았을 것인데, 조금 아쉽다. 예를 들어, 단순한 스코어링 뿐만 아니라 '황선홍 퇴장' 같은 문자열의 디스플레이, 운동장 조명 조절 등등도 이론상 가능하다고 본다.

키워드

  • 가격2,000
  • 페이지수22페이지
  • 등록일2003.01.22
  • 저작시기2003.01
  • 파일형식한글(hwp)
  • 자료번호#219912
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니