BASIC4MCU | 질문게시판 | 답변 : 답변 : 답변 : avr studio, (atmega128) lcd랑 키패드 질문드립니다!!
페이지 정보
작성자 master 작성일2018-12-18 14:40 조회6,238회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=7004
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-18 오후 2:45:46// by Ok-Hyun Park//#include <avr/io.h>#include <avr/interrupt.h>#include <stdio.h>#define F_CPU 16000000UL // 16 MHz#include <util/delay.h>//#define Trigger_1 PORTF|=1 //초음파 트리거#define Trigger_0 PORTF&=~1 //초음파 트리거#define Echo(PINF&2)//초음파 에코//unsigned char pw[4];//int range=0,password=0;char check=0,run=0;//char keyin(){PORTC=~0x80; _delay_us(1);if(!(PINC&8))return(1);PORTC=~0x40; _delay_us(1);if(!(PINC&4))return(0);PORTC=~0x20; _delay_us(1);if(!(PINC&8))return(9);if(!(PINC&4))return(6);if(!(PINC&2))return(7);if(!(PINC&1))return(8);PORTC=~0x10; _delay_us(1);if(!(PINC&8))return(5);if(!(PINC&4))return(2);if(!(PINC&2))return(3);if(!(PINC&1))return(4);return(10);}//void HC_SR04(){_delay_ms(100);Trigger_1; _delay_us(10); Trigger_0; // 10uSwhile(!Echo); TCNT1=0; TCCR1B=2;while( Echo); TCCR1B=8;range=TCNT1/116; // Cm}//ISR(TIMER1_COMPA_vect){ // 1ms // 세그먼트unsigned char x[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0,1,2,3,4,5,6,7,8,9unsigned char open[]={0xbf,0xc0,0x8c,0x84,0xc8}; //{-,o,p,e,n}strtic char c=0;PORTA=0;if(run){if(check){ PORTE=x[pw[c]]; }else { PORTE=open[c]; }PORTA=8>>c;if(++c>3)c=0;}}//int main(){char key;DDRF=1; // PF0 ouput Trigger,PF1 input EchoPORTC=0x0F; DDRC=0xF0; // keypadDDRE=0xFF; DDRA=0x0F; // 세그먼트TCCR0=0x0C; OCR0=249; TIMSK=2; //16000000/64/(1+249),1msSREG=0x80;while(1){//--------------------------------------------------------HC_SR04();if(run<50){ run=1; } // 50cm 이내로 접근하면 동작else { run=0; check=0; } // 멀어지면 off//--------------------------------------------------------if(run){for(i=0;i<4;i++)pw[i]=0; // 버퍼 초기화key=10;while(key>9){ // 1번째 키 입력 대기key=keyin();HC_SR04();if(run>50)continue; // 멀어지면 종료}pw[0]=key;//key=10;while(key>9){ // 2번째 키 입력 대기key=keyin();HC_SR04();if(run>50)continue; // 멀어지면 종료}pw[1]=key;//key=10;while(key>9){ // 3번째 키 입력 대기key=keyin();HC_SR04();if(run>50)continue; // 멀어지면 종료}pw[2]=key;//key=10;while(key>9){ // 4번째 키 입력 대기key=keyin();HC_SR04();if(run>50)continue; // 멀어지면 종료}pw[3]=key;//---------------------if(pw[0]=1 && pw[1]=2 && pw[2]=3 && pw[3]=4)check=1; else check=0;for(i=0;i<4;i++)pw[i]=0; // 버퍼 초기화}}}
LCD 빼고 나머지로 만들어봤습니다.
댓글 0
조회수 6,238등록된 댓글이 없습니다.