BASIC4MCU | 질문게시판 | 답변 : 블루투스 관련 질문드립니다
페이지 정보
작성자 master 작성일2018-12-10 11:04 조회7,621회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6658
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-10 오전 11:09:25// by Ok-Hyun Park//#include <avr/io.h>#include <avr/interrupt.h>#define F_CPU 16000000UL#include <util/delay.h>//#define TRIG1 PORTA|=0x40 // 트리거 출력 PA6#define TRIG0 PORTA&=~0x40#define ECHO (PINA&0x80)// Echo 입력 PA7//#define BIT4_LINE2_DOT58 0x28 // 4 Bit Mode,2 Lines,5x8 Dot#define DISPON_CUROFF_BLKOFF 0x0C // Display On,Cursor Off,Blink Off#define DISPOFF_CUROFF_BLKOFF 0x08 // Display Off,Cursor Off,Blink Off#define INC_NOSHIFT 0x06 // Entry Mode,Cursor Increment,Display No Shift#define DISPCLEAR 0x01 // Display Clear,Address 0#define CURHOME 0x02 // Cursor Home#define CUR1LINE 0x80#define CUR2LINE 0xC0//char CLCD_NUM[]="000.0";char state=0;int distance_1st,distance_2nd,height,number;//-------------------------------------------------void CLCD_cmd(char cmd){PORTC=cmd&0xf0; PORTD=0x10; _delay_us(1); PORTD=0;PORTC=cmd<<0x4; PORTD=0x10; _delay_us(1); PORTD=0; _delay_ms(5);}//void CLCD_data(char data){PORTC=data&0xf0; PORTD=0x14; _delay_us(1); PORTD=4;PORTC=data<<0x4; PORTD=0x14; _delay_us(1); PORTD=4; _delay_us(50);}//void CLCD_puts(char *s){ while(*s)CLCD_data(*s++); }//void CLCD_num_display(int n){CLCD_NUM[0]=(n/1000)%10+0x30;CLCD_NUM[1]=(n/100)%10+0x30;CLCD_NUM[2]=(n/10)%10+0x30;CLCD_NUM[3]='.';CLCD_NUM[4]=n%10+0x30;CLCD_NUM[5]=0; //nullCLCD_puts(CLCD_NUM);}//void init_CLCD(){_delay_ms(50);CLCD_cmd(BIT4_LINE2_DOT58); CLCD_cmd(DISPON_CUROFF_BLKOFF);CLCD_cmd(INC_NOSHIFT); CLCD_cmd(DISPCLEAR);}//-------------------------------------------------unsigned int read_distance(){unsigned int distance=0;TRIG1; _delay_us(10); TRIG0;while(!ECHO); TCNT1=0; TCCR1B=2; //0.5uswhile( ECHO); TCCR1B=0;distance=TCNT1;distance=(unsigned int)((float)distance/11.6);return(distance);}//-------------------------------------------------void menu0(){CLCD_cmd(DISPCLEAR);CLCD_cmd(CUR1LINE); CLCD_puts("If Ready");CLCD_cmd(CUR2LINE); CLCD_puts("Press Switch!");state=1;}//-------------------------------------------------void menu1(){distance_1st=read_distance(); //초음파센서CLCD_cmd(DISPCLEAR);CLCD_cmd(CUR1LINE); CLCD_puts("First: "); CLCD_num_display(distance_1st);state=2;}//-------------------------------------------------void menu2(){distance_2nd=read_distance(); //초음파센서CLCD_cmd(CUR2LINE); CLCD_puts("Second: "); CLCD_num_display(distance_2nd);state=3;}//-------------------------------------------------void menu3(){CLCD_cmd(DISPCLEAR);CLCD_cmd(CUR1LINE); CLCD_puts("Height: ");height=distance_2nd-distance_1st;if(height<0)CLCD_puts("Error!");else CLCD_num_display(height);state=0;}//-------------------------------------------------ISR(INT4_vect){_delay_ms(100); EIFR|=0x10; if(PINE&=0x10)return; // 채터링 return//-------------------------------------------------------------------switch(state){ // 스위치 누른 횟수case 0: menu0(); break;case 1: menu1(); break;case 2: menu2(); break;case 3: menu3(); break;}}//-------------------------------------------------void TX1_char(char c){ while(!(UCSR1A&0x20)); UDR1=c; }void TX1_STR(char *s){ while(*s)TX1_char(*s++); }//-------------------------------------------------ISR(USART1_RX_vect){ // 수신 인터럽트char r;r=UDR1;if(r=='0')menu0();if(r=='1')menu1();if(r=='2')menu2();if(r=='3')menu3();}//int main(void){DDRA=0x40; // 초음파거리센서 TRIG(PA6,출력),ECHO(PA7,입력)DDRC=0xFF; // CLCD PORT(data&command)DDRD=0x1C; // CLCD PORT(control 출력: RS=bit2,RW=bit3,E=bit4)PORTE=0x10; // SW1 내부플업저항init_CLCD();UCSR1B=0x98; UBRR1L=8; // 115200EICRB=0xAA; EIMSK=0x10; // INT4 하강 에지(Fallin Edge)SREG|=0x80;while(1);}
먼저번 답변글은 UART0 9600 이었고
지금 글은 UART1 115200 입니다.
댓글 1
조회수 7,621도리비님의 댓글
도리비 작성일답변 정말 감사드립니다!!