마이크로 계산기 설계
본 자료는 7페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
해당 자료는 7페이지 까지만 미리보기를 제공합니다.
7페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1. 실험 과제
2. 회로 구성
3. 코딩
5. 실험 고찰

본문내용

,
i++; //소수점 2째짜리 출력 하게 된다.
}
}
void calculator(void) {
inputsum(); //배열로 입력받은 숫자들을 더하는 함수
switch(ao) { //연산부호에 맞게 계산을 한다.
case '+' : result = (float)fnr + (float)snr;
break;
case '-' : result = (float)fnr - (float)snr;
break;
case '*' : result = (float)fnr * (float)snr;
break;
case '/' : result = (float)fnr / (float)snr;
break;
}
result += 0.005;
ans=1; //결과 값이 나왔다는 것을 알리기 위해 ans 변수에 1을 저장
outputsum(); //결과값을 배열로 따로 분리 하고 출력 하는 함수
}
void inputdelay(void) {
c=0;
while(inputcomplete == 0) {
if(level==0) { //첫번째 숫자 입력을 뜻하는 level=0일때 실행
receivedata = RX1_Byte();
while(!(receivedata=='\r' || receivedata=='\n')) {
if(receivedata=='.') {
fn[c] = receivedata; //.이 찍힐 경우 그대로 저장하고,
}
else {
fn[c] = receivedata - 48; //숫자가 들어 왔을 경우 48을 빼고 저장하여, 본래의 값이 된다.
}
TX1_Byte(receivedata);
receivedata = RX1_Byte();
c++;
}
fnc=c; //입력할때 마다 첫번째 숫자 카운트인 fnc가 증가 한다.
inputcomplete = 1; //입력을 마치면 빠져나간다.
}
else if(level==1) { //연산 부호 입력을 뜻하는 level=2 실행
receivedata = RX1_Byte();
while(!((receivedata=='\r' || receivedata=='\n') && c==1)) {
switch(receivedata) {
case '+' : TX1_Byte('+');
ao='+';
c=1;
aoc++; //연산부호가 입력 되었다는 aoc값 을 증가 시킨다.
receivedata = RX1_Byte();
break;
case '-' : TX1_Byte('-');ao='-';
c=1;
aoc++;
receivedata = RX1_Byte();
break;
case '*' : TX1_Byte('*');ao='*';
c=1;
aoc++;
receivedata = RX1_Byte();
break;
case '/' : TX1_Byte('/');ao='/';
c=1;
aoc++;
receivedata = RX1_Byte();
break;
}
}
inputcomplete = 1;
}
else if(level==2) { //두번째 숫자 입력을 뜻하는 level=3일때 실행
receivedata = RX1_Byte();
while(!(receivedata=='\r' || receivedata=='\n')) {
if(receivedata=='.') {
sn[c] = receivedata;
}
else {
sn[c] = receivedata - 48;
}
TX1_Byte(receivedata);
receivedata = RX1_Byte();
c++;
}
snc=c;
inputcomplete = 1;
}
}
c=0;
inputcomplete=0;
}
void delay(int d1, int d2)
{
int i,j;
for(i=0 ; i {
for(j=0 ; j }
}
void USART_Init(unsigned int baud) {
UCSRA = 0x00; //USART를 11.5kbps로 실행
UCSRB = (1< UCSRC = (1< UBRRH = (unsigned char) 0;
UBRRL = (unsigned char) baud;
}
void Timer_Init(void) {
TCCR0 =0x01; //timer0 overflow기능을 사용 하며, 프리스케일은 없음으로 선택 한다.
TCNT0 =0x00;
TIMSK =0x01;
}
void TX1_Byte(unsigned char data) {
while(!(UCSRA & (1< UDR = data;
}
unsigned char RX1_Byte(void) {
while(!(UCSRA & (1< return UDR;
}
4. 실행 모습
5. 실험 고찰
- 마지막 실험인 팀 프로젝트를 끝내고 나니, 정말 이제는 마이크로 프로세서에 대해 많은 것을 배운 것 같은 기분이 들었다. 이번 프로젝트는 우리가 이제까지 배웠던 모든 부분을 다 사용하여야만 완성 할 수 있는 부분이어서, 역시 기말 고사 대신으로 하기엔 적합하였던 과제였던 것 같다. 처음에 회로를 구성하는데 있어서 어려움을 많이 겪었다. 6,8,9,12핀은 저항을 연결해 A포트에 네 개 B포트에 여덟 개를 꼽아 저항을 연결하고 나머지 여덟 개는 C포트에 연결을 하여 회로 구성을 마쳤다. 그리고 저항값이 너무 세어서 세그먼트의 불빛이 약해 저항값이 적은 것으로 중간에 교체를 하기도 하였다. 실험을 마치고 마지막 테스트를 받는 과정에서 세그먼트의 잔상과 첫 번째 숫자에 소수점을 입력 하지 않았을 때 소수점이 제대로 찍히지 않는 문제점이 발생 했다. 테스트전 실험 할 때는 항상 소수점을 넣어서 실험을 했기 때문에 문제가 있을 거라고는 생각을 못했지만 막상 테스트 할 때 소수점을 넣지 않고 계산을 하니깐 소수점 위치가 정확하게 찍히지 않았던 것이다. 실험하는 도중 잔상은 잔류 전류가 흐르기 때문에 괜찮을 거라고 생각했으나 그 불빛의 세기가 너무 세다보니 문제가 되었던 것 같다. 위의 두 가지 문제점만 아니었더라면 좀 더 완벽한 실험을 했을 텐데 하는 아쉬움을 남겼다.
한 학기 동안 수고 하셨고, 덕분에 많은 것을 배웁니다.
감사합니다.
  • 가격3,000
  • 페이지수21페이지
  • 등록일2012.06.30
  • 저작시기2010.4
  • 파일형식한글(hwp)
  • 자료번호#755971
본 자료는 최근 2주간 다운받은 회원이 없습니다.
다운로드 장바구니