답변 : atmega128A 코드 한번 봐주세요 ㅠㅠ
페이지 정보
작성자 master 작성일18-12-03 01:52 조회3,710회 댓글0건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-12-03 오전 1:57:32
// by Ok-Hyun Park
//
ATMEGA과제 관련해서 질문있습니다.
1.LED가 3초 동안 켜져야합니다.
2.FND가 "1234" 디스플레이 돼야합니다.
3.Buzzer가 3초 동안 소리나야합니다.
4.1,2,3번이 한 거 번에 나타나야합니다.
위가 바로 저희 과제의 조건입니다.
아래는 저희가 짠 코드인데,
Putty에 Select가 뜨지 않고 바로 숫자만 나옵니다.
그리고 출력을 했을때 상대의 아트메가에 뜨지 않고 제 아트메가에 출력이 됩니다.
어디를 수정을 해야 오류를 잡을 수 있을까요?
//
#define F_CPU 16000000UL
#include <avr/io.h>// AVR 기본 include
#include <util/delay.h>
//
#define NULL 0
//
unsigned char digit[4]={0x06,0x5b,0x4f,0x66};
unsigned char fnd_sel[4]={0x08,0x04,0x02,0x01};
//
char getchar0(){ while(!(UCSR0A&0x80)); return(UDR0); }
char getchar1(){ while(!(UCSR1A&0x80)); return(UDR1); }
void putchar0(char c){ while(!(UCSR0A&0x20)); UDR0=c; }
void putchar1(char c){ while(!(UCSR1A&0x20)); UDR1=c; }
void puts0(char*s){ while(*s)putchar0(*s++); }
void puts1(char*s){ while(*s)putchar1(*s++); }
//
int main(){
char c,*ptr,prompt[]="Youngju Lee>>"; // 본인이름 입력할것.
UBRR0L=8; UCSR0B=0x18;
UBRR1L=8; UCSR1B=0x18;
_delay_ms(2000);
puts0(prompt);
while(1){
if(UCSR0A&0x80){
c=getchar0(); // 1 character를 받아서
switch(c){
case '1':{ putchar1(c); DDRA=0xff; PORTA=0xff; _delay_ms(3000); PORTA=0x00; break; }
case '2':{
DDRC=0xff; DDRG=0x0f;
putchar1(c);
for(int j=0; j<150; j++){
for(int i=0; i<4; i++){ PORTC=digit[i]; PORTG=fnd_sel[i]; _delay_ms(5); }
}
PORTC=0x00; PORTG=0x00;
break;
}
case '3':{
putchar1(c);
for(int i=0; i<1499; i++){ PORTB=0x10; _delay_ms(1); PORTB=0x00; _delay_ms(1); }
break;
}
case '4':{
putchar1(c); DDRA=0xff; DDRC=0xff; DDRG=0x0f; DDRB=0x10;
for(int z=0; z<375; z++){
for(int i=0; i<4; i++){
PORTA=0xff; PORTC=digit[i]; PORTG=fnd_sel[i]; PORTB=0x10; _delay_ms(1); PORTB=0x00; _delay_ms(1);
}
}
PORTA=0x00; PORTC=0x00; PORTG=0x00; PORTB=0x00;
break;
}
}
}
//
if((UCSR1A&0x80)){
c=getchar1(); putchar0(c);
if(c=='\r'){ putchar0('\n'); puts0(prompt); }
}
}
}
댓글 : 0
조회수 : 3,710
등록된 댓글이 없습니다.