로그인 회원가입 
              
상품검색상품검색 검색 
아이디  
비밀번호
보안접속 보안접속
회원가입
  아이디찾기
  비밀번호찾기
상품목록
  로봇
  마이크로프로세서보드
  제어모듈
  소프트웨어
  로봇부품
  무선/네트웍모듈
  전자부품
  개발장비
  모터제품
  카메라
  배터리
  과학상자
  전자도서
  하이테크 서보모터 무선조정기
  아카데미
  air plane
  r/c-car
  무선조종기
  파워,전원
  취미/퍼즐
  타미야
  팀로시
  후다바
  교시오
  자율결제
  전자용품
  전자키트
  가맹점용 교육자재
자유게시판
공지사항
뉴스/이벤트
이용안내 FAQ
상품 사용후기
자유게시판2
상품 Q&A
자료실
갤러리
로봇
추천기획전
전화: 02-875-5508
팩스: 02-875-5517
운영시간
  09:00~17:00
주문 : 상시 24시간
 
현재위치: > 게시판 > 자료실
자료실
자료실입니다.


찾기
제목 파워개미소스 0  추천하기
작성자 대표 관리자 작성일 2005-12-03 02:29:51 조회수 489
   
   
#include <90s8515.h>
#include 
#include 

unsigned char Inte0 = 0;                                               
unsigned char Inte1 = 0;
char k; 

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x1B
#endasm
#include 

/*********************************************************
            lcd 한굴 출력 : 로보
*********************************************************/         
typedef unsigned char byte;
                                                                              
flash byte char0[8]={
                     0b00011111,
                     0b00000001,
                     0b00011111,
                     0b00010000,  
                     0b00010000,
                     0b00011111,
                     0b00000000,
                     0b00000000
                     };  // ㄹ       
flash byte char1[8]={       
                     0b00000100,
                     0b00000100,
                     0b00000100,
                     0b00000100,  
                     0b00000100,
                     0b00011111,
                     0b00000000,
                     0b00000000
                     };  // ㅗ       
flash byte char2[8]={
                     0b00010001,
                     0b00010001,
                     0b00011111,
                     0b00010001,  
                     0b00011111,
                     0b00000000,
                     0b00011111,
                     0b00000000
                     };  // ㅂ      
flash byte char3[8]={
                     0b00000100,
                     0b00000100,
                     0b00000100,
                     0b00000100,  
                     0b00000100,
                     0b00011111,
                     0b00000000,
                     0b00000000
                     };  // ㅗ      
  
 
// Declare your global variables here
void define_char(byte flash *pc,byte char_code)  // cg ram에 저장하는 함수
{                                                                                
	byte i,a;                                                                  
	a=(char_code<<3) | 0x40;                                                   
	for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);                            
}                                                                          
                                                                           
void company()
{
	lcd_init(16);               	// LCD module initialization
	define_char(char0,0); 		// define user character 0
	define_char(char1,1);           // define user character 1
	define_char(char2,2);           // define user character 2
	define_char(char3,3);           // define user character 3
	define_char(char4,4);
	define_char(char5,5);
	define_char(char6,6);
	define_char(char7,7);
 	define_char(char8,8);
   	define_char(char9,9);                
		lcd_gotoxy(0,0);   // ㄹ
		lcd_putchar(6);  

		lcd_gotoxy(0,1); 
		lcd_putchar(3);    // ㅗ

		lcd_gotoxy(2,0); 
		lcd_putchar(2);    // ㅂ
               
		lcd_gotoxy(2,1); 
		lcd_putchar(3);    // ㅗ



}
void shift()  // RIGHT -> STOP -> LEFT SHIFT
{
     int j;
     for(j=0;j<10;j++)
         {
	      if(j<5)
	      {
	      _lcd_ready();  //rs=0
	      _lcd_write_data(0x1c); //data shift : right
	      delay_ms(500);
	      }
             else if(j>=5)  
              {
              _lcd_ready();
              _lcd_write_data(0x18); //data shift  : left
	      delay_ms(500);
	      }
	  }    
}    

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
	Inte0=1;
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
	Inte1=2;
}

void buzzer_on()
{     
     int i;
     
     for(i=0;i<5;i++)
     {
     	PORTC.7=0;       //값이 0일때 부저 울림
      	delay_ms(500);
      	PORTC.7=1;       
      	delay_ms(50);

      	PORTC.7=1;       //값이 0일때 부저 울림
      	delay_ms(100);
      	PORTC.7=0;       
     }
}  
  
void led_on()
{
 	
       int i;
       for(i=0;i<3;i++)
      	{
      	PORTB.3=0;        // LEFT LED1 ON
     	PORTB.4=1;
      	PORTB.5=1;
      	delay_ms(700);
      	
     	PORTB.3=1;       
      	PORTB.4=0;       // RIGHT LED2 ON
      	PORTB.5=1;
      	delay_ms(700);
      	
      	PORTB.3=1;
      	PORTB.4=1;
      	PORTB.5=0;      // CENTER LED3 ON
      	delay_ms(700);
      	
      	}

        PORTB.3=1;
      	PORTB.4=1;
      	PORTB.5=1;      // 모든 LED 소등
}

void led_left()            // LEFT LED ON
{
	PORTB.3=1;       
     	PORTB.4=0;
      	PORTB.5=1;
}
void led_right()          // RIGHT LED ON
{
        PORTB.3=0;         
     	PORTB.4=1;
      	PORTB.5=1;
}

void led_center()         // CENTER LED1 ON
{
	PORTB.3=1;        
     	PORTB.4=1;
      	PORTB.5=0;
}

void led_off()         // CENTER LED1 ON
{
        PORTB.3=1;
      	PORTB.4=1;
      	PORTB.5=1;      // 모든 LED 소등
}

void motor_init()
{
    int i;
    
    for(i=0;i<40;i++)
      {
	PORTD.5=1;     // PORTD.5 : CENTER LEG, PORTD.6 : LEFT LEG, PORTD.7; RIGHT LEG
	PORTD.6=1;
	PORTD.7=1;
	delay_us(1500);

	PORTD.5=0;
	PORTD.6=0;
	PORTD.7=0;
	delay_ms(2);
       }
}

void forward_walk()    //  => backward walking            
{
   int i;
   
   for(i=0;i<25;i++)
     {
	PORTD.5=1;     // PORTD.5 : CENTER LEG, PORTD.6 : LEFT LEG, PORTD.7; RIGHT LEG
	delay_us(2000);

	PORTD.5=0;
	delay_ms(10);
      }

   for(i=0;i<20;i++)
     {
	PORTD.6=1;
	PORTD.7=1;
	delay_us(1100);

	PORTD.6=0;
	PORTD.7=0;
	delay_ms(10);
      }

   for(i=0;i<25;i++)
     {
	PORTD.5=1;
	delay_us(900);

	PORTD.5=0;
	delay_ms(10);
      }
 
   for(i=0;i<20;i++)
     {
	PORTD.6=1;
	PORTD.7=1;
	delay_us(1900);
                  
        
        PORTD.6=0;
	PORTD.7=0;
	delay_ms(10);
      }
}                                              

void back_walk()
{
    int i;
    
    for(i=0;i<25;i++)
      {
	PORTD.5=1;     // PORTD.5 : CENTER LEG, PORTD.6 : LEFT LEG, PORTD.7; RIGHT LEG
	delay_us(2000);

	PORTD.5=0;
	delay_ms(10);
       }

    for(i=0;i<20;i++)
      {
	PORTD.6=1;
	PORTD.7=1;
	delay_us(1900);
	PORTD.6=0;
	PORTD.7=0;
	delay_ms(10);
       }

    for(i=0;i<25;i++)
      {
	PORTD.5=1;
	delay_us(900);

	PORTD.5=0;
	delay_ms(10);
      }
 
    for(i=0;i<20;i++)
      {
	PORTD.6=1;
	PORTD.7=1;
	delay_us(1100);

	PORTD.6=0;
	PORTD.7=0;
	delay_ms(10);
       }
}

void right_turn()
{
    int i;
    
    for(i=0;i<25;i++)
      {        
	PORTD.5=1;     // PORTD.5 : CENTER LEG, PORTD.6 : LEFT LEG, PORTD.7; RIGHT LEG
	delay_us(900);

	PORTD.5=0;
	delay_ms(10);
      }

    for(i=0;i<20;i++)
      {
        PORTD.6=1;
	PORTD.7=1;
	delay_us(1000);
	
        PORTD.6=0;
        PORTD.7=1;     
        delay_us(1300);
        
	PORTD.6=0;
	PORTD.7=0;
	delay_ms(10);
      }

    for(i=0;i<25;i++)
      {
	PORTD.5=1;
	delay_us(2000);

	PORTD.5=0;
	delay_ms(10);
      }
 
    for(i=0;i<20;i++)
      {
  	PORTD.6=1;
	PORTD.7=1;
	delay_us(1000);
	          
	PORTD.6=1;
	PORTD.7=0;     
	delay_us(1300);
                  
	PORTD.6=0;
	PORTD.7=0;
	delay_ms(10);
      }
 }

void left_turn()
{
    int i;
    
    for(i=0;i<25;i++)
      {        
	PORTD.5=1;     // PORTD.5 : CENTER LEG, PORTD.6 : LEFT LEG, PORTD.7; RIGHT LEG
	delay_us(900);

	PORTD.5=0;
	delay_ms(10);
      }

    for(i=0;i<20;i++)
      {
        PORTD.6=1;
	PORTD.7=1;
	delay_us(1000);
	
        PORTD.6=1;
        PORTD.7=0;     
        delay_us(1300);
        
	PORTD.6=0;
	PORTD.7=0;
	delay_ms(10);
      }

    for(i=0;i<25;i++)
      {
	PORTD.5=1;
	delay_us(2000);

	PORTD.5=0;
	delay_ms(10);
      }
 
    for(i=0;i<20;i++)
      {
  	PORTD.6=1;
	PORTD.7=1;
	delay_us(1000);
	          
	PORTD.6=0;
	PORTD.7=1;     
	delay_us(1300);
                  
	PORTD.6=0;
	PORTD.7=0;
	delay_ms(10);
      }
 }
void forward()            //lcd 전진
{        
        lcd_clear();      // lcd를 지움
       	lcd_gotoxy(0,0);    // lcd의 위치 지정 함수  (행, 열)
        lcd_putsf("Forward" ); 
}
                             
void backward()           //lcd 후진
{       
 	lcd_clear();        
       	lcd_gotoxy(0,1);    // lcd의 위치 지정
	lcd_putsf("Back" );
}

void left()               //lcd 좌회전
{                    
	lcd_clear();
      	lcd_gotoxy(0,0);  
	lcd_putsf("Left" );
}

void right()              // lcd 우회전전
{
 	lcd_clear();       
        lcd_gotoxy(0,1);  
       	lcd_putsf("Right" );
}

void stop()              // lcd 우회전전
{
 	lcd_clear();       
        lcd_gotoxy(0,1);  
       	lcd_putsf("Stop" );
}
void ir()
{
   int i;
   unsigned int c;

     c = (PINB.0)&0x01;
          PORTB.1 = 1;
	  PORTB.2 = 1;
	  delay_ms(3);
	  PORTB.1 = 0;
	  PORTB.2 = 0;
	  delay_ms(2);
	
	if (c)
	{
	        backward();
		for(i=0;i<3;i++)
		{       
			back_walk();
		}
		left();
		for(i=0;i<3;i++)
		{
			left_turn();
		}
	}
	
	else
	{
    	        forward;
		forward_walk();
        }
}  

void print()
{
	printf("===================================================== \r");
        printf("                          ^                           \r");
      	printf("                          |                           \r");
      	printf("                     forward = '8'                    \r");
      	printf("                                                      \r");
	printf("  <- left = '4'      stop = '5'        right = '6' -> \r");
	printf("                                                      \r");
	printf("                    backward = '2'                    \r");
	printf("                          |                           \r");
	printf("                          v                           \r");
	printf("===================================================== \r");
	printf("Press key what you want \r");
}

void initialization()
{
   int i;     
        motor_init();
        buzzer_on();
    	led_on();
   	for (i=0;i<1;i++)
	{
	company();
	shift();
	}
}	

void main(void)   // 메인 함수
{
  // Port A
DDRA=0x00;
PORTA=0x00;
// Port B
DDRB=0x3e;        // 포트의 방향 결정
PORTB=0x36;       //LED1, LED2, LED3의 포트만 사용 (PORTB.3,PORTB.4,PORTB.5)
// Port C
DDRC=0x80;
PORTC=0x00;
// Port D
DDRD=0x00;
PORTD=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
GIMSK=0xC0;
MCUCR=0x0A;
GIFR=0xC0;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// UART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// UART Receiver: On
// UART Transmitter: On
// UART Baud rate: 9600
UCR=0x18;
UBRR=0x19;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

// 인터럽트 인에이블
#asm("sei") 
     PORTB.3=1;        
     PORTB.4=1;

// LCD의 초기화
lcd_init(16);
initialization();
print();

while (1)      // 무한루프
	{
       // I, C, TEST의 변수를 정수현으로 선언
      	int i;
        int j=0;
        int test=0;
  
  /***********************************************************    
                  적외선 센서
  ************************************************************/
        ir(); 
      
  /***********************************************************    
                  시리얼(UART) 통신
  ************************************************************/
      
        if(USR.7){         
		k=getchar();          
   		putchar(k);                  
              	 }
       	    if(k == 0x38)      		// keyboard input " forward "
   	       {
      		printf("forward \r");
      	        test = 0;
       		}
       	    else if(k == 0x32)  		// keyboard input " backward "
      		{
       		printf("backward \r");
       		test = 4;
       		}
	    else if(k == 0x36)   			// keyboard input " right "
		{                                               
		printf("right \r");
		test = 5;
       		}
	    else if(k == 0x34)            	// keyboard input " left "
		{                                               
		printf("left \r");
		test = 6;
       		}
	    else if(k == 0x35)		// keyboard input " stop "
		{
		printf("stop \r");
		test = 7;
       	        }
       
  
  /***********************************************************    
                  외부 인터럽트 0 , 1
  ************************************************************/
  
     j = Inte0 + Inte1 + test ;   
       switch(j)
        {
         case 0 :      // 장애물이 없을 경우, // 시리얼 통신에서 숫자 8을 누를 경우 호출 함수                   
                      led_center(); 
                      forward();
                      forward_walk();
                      break;
         case 1 :      // 좌측에 장애물이 있을 경우
                      backward();
               for (i=0;i<5;i++){         
                      back_walk();
                      }
                      led_right();
                      right();
               for (i=0;i<3;i++){    
                      right_turn();
                      }   
                      led_off();
                      Inte0=0;
                      break;
       
         case 2 :     // 우측에 장애물이 있을 경우
                      led_center();
                      backward();
                for (i=0;i<5;i++){
                      back_walk();
                      }
                      led_left();
                      left();
                for (i=0;i<3;i++){      
                      left_turn();
                      }
                      led_off();
                      Inte1=0; 
                     break;
          case 4:      // 시리얼 통신에서 숫자 2를 누를 경우 호출 함수
                       backward();
                       led_center();
                       back_walk();
                       break;
          case 5 :     // 시리얼 통신에서 숫자 4을 누를 경우 호출 함수
          	      right();
          	      led_right();
          	      right_turn();
          	      break; 
	  case 6 :     // 시리얼 통신에서 숫자 6을 누를 경우 호출 함수
                      left();
                      led_left();
                      left_turn();
              	      break;
          case 7 :      // 시리얼 통신에서 숫자 5를 누를 경우 호출 함수
                      stop();
                      motor_init();
              	      break;    	             
         default: break;  
         }     
     };
  } 
댓글달기
이름 비밀번호

0 / 0 byte(한글 0자, 영문/숫자 0자)
★점수주기 : 1 2 3 4 5
* 왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)
첨부파일
비밀번호 * 수정 및 삭제하려면 비밀번호를 입력하세요.
답변
수정
  스팸신고 스팸해제
글쓰기
 
이전글 코드비전메뉴얼
다음글 초음파센서모듈테스트소스
 
 
| 회사소개 | 이용약관 | 개인정보취급방침 | 이용안내
Copyright ⓒ 2010 로보플라자인포 All rights reserved.
전화 : 02-875-5508 FAX : 02-875-5517
Contact robotplaza@manfix.com for more information.
법인명(상호):주식회사 목련 주소:10254 경기도 고양시 일산동구 지영로147번길 81-18 (지영동) 나동
사업자 등록번호 안내 [117-81-90610] / 통신판매업 신고 신고예정
개인정보보호책임자 :박경희(robotplaza@manfix.co.kr) / 대표자(성명):박경희
cafe24