BASIC4MCU | 질문게시판 | 답변 : 답변 : SG90C
페이지 정보
작성자 master 작성일2018-12-18 15:31 조회8,025회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=7015
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-18 오후 3:36:47// by Ok-Hyun Park//#define F_CPU 16000000#include <avr/io.h>#include <stdio.h>#include <util/delay.h>#include <math.h>#include <avr/interrupt.h>//#define LINE1 0x80 //첫번째 라인의 DDRAM address: 0x00->0x80+0x00#define LINE2 0xC0 //두번째 라인의 DDRAM address: 0x40->0x80+0x40#define MAX 4//PG2=LCD_EN,PG1=RW,PG0=RS 에 연결#define CMD_WRITE 0x09 //명령어쓰기 E=1,RW=0,RS=0 1#define CMD_READ 0x0B //명령어읽기 E=1,RW=1,RS=0 1#define DATA_WRITE 0x0D //데이터쓰기 E=1,RW=0,RS=1 1#define DATA_READ 0x0F //데이터읽기 E=1,RW=1,RS=1 1#define LCD_EN 0x01 //PG0에 연결되어 있기 때문에 bit2를 1로 했다.//void LCD_cmd_write(char cmd){PORTA=cmd; PORTG=CMD_WRITE; PORTG=PORTG^LCD_EN; _delay_ms(2);}//void LCD_data_write(char data){PORTA=data; PORTG=DATA_WRITE; PORTG=PORTG^LCD_EN; _delay_ms(2);}//char rx_char(){ while((UCSR1A&0x80)==0); return UDR1; }void tx_char(char t){ while((UCSR1A&0x20)==0); UDR1=t; }void USART_SendString(char *s){ while(*s)tx_char(*s++); }void LCD_wr_string(char d_line,char *s){ LCD_cmd_write(d_line); while(*s)LCD_data_write(*s++); }//void init_LCD(void){_delay_ms(15); LCD_cmd_write(0x38); LCD_cmd_write(0x38); LCD_cmd_write(0x38);LCD_cmd_write(0x08); LCD_cmd_write(0x01); LCD_cmd_write(0x06); LCD_cmd_write(0x0C);}//void svangle1(float angle){unsigned int pulse; pulse=angle*225/90+375+0.5; OCR1A=pulse;}//void svangle2(float angle){unsigned int pulse; pulse=angle*225/90+375+0.5; OCR1B=pulse;}//unsigned int Echo1(){unsigned int range;PORTC=PORTC|0x01; _delay_us(10); PORTC=PORTC&0xfe;while((PINC&4)==0); TCNT3=0; TCCR3B=2;while(PINC&4); TCCR3B=8; range=TCNT3/116;return range;}//unsigned int Echo2(){unsigned int range;PORTC=PORTC|0x02; _delay_us(10); PORTC=PORTC&0xfd;while((PINC&8)==0); TCNT3=0; TCCR3B=2;while(PINC&8); TCCR3B=8; range=TCNT3/116;return range;}//void init_Echo(){TCCR3A=0; TCCR3B=8; _delay_ms(100);}//int main(void){int flag=0,range[2]; char str[16];PORTA=0xFF; DDRA=0xFF; //LCD 데이터 버스PORTG=0x3F; DDRG=0x7F; //LCD 컨트롤 신호(PG2=LCD_EN,PG1=RW,PG0=RS)DDRC=0x03;DDRB=0xff;init_LCD();UCSR1B=0x18; UBRR1L=0x67;TCCR1A=0xA2; TCCR1B=0x1b; ICR1=4999;init_Echo();while(1){range[0]=Echo1(); //들어가는거 //차단//if(range[0]<30){if(flag==0){ flag=1;LCD_wr_string(LINE1,str); USART_SendString("CW \r\n");PORTB|=1; _delay_ms(1000); PORTB&=~1;svangle1( 0); _delay_ms(500); // 정방향svangle1(90); _delay_ms(500); // 정지}}//range[1]=Echo2(); //나가는거//if(range[1]<30){if(flag==1){ flag=0;LCD_wr_string(LINE1,str); USART_SendString("CCW \r\n");PORTB|=4; _delay_ms(1000); PORTB&=~4;svangle2(180); _delay_ms(500); // 역방향svangle2(90); _delay_ms(500); // 정지}}}}
댓글 0
조회수 8,025등록된 댓글이 없습니다.