질문게시판 > A tmega128 도어락구현

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

A tmega128 도어락구현

페이지 정보

작성자 힝헹홍 작성일20-12-17 13:12 조회3,731회 댓글1건

본문

외부인터렙터 스위치 4개와 내장 스위치1개를 이용해서 도어락을 만드는데요 

sw4를 누르면 세븐세그먼트 1digit에 숫자 1이 올라가고 나머지는 1 - - - 이렇게 뜨게 하고 

sw5를 누르면 세븐세그먼트 2 digit에 숫자 1이 올라가고 나머지는 - 1 - -이렇게 만들어서 4자리 숫자를 완성시키고 내장스위치를 누르면 이게 비밀번호인 5229가 맞으면 경쾌한 소리가 나오고 틀리면 틀린 경고음이 나오게 만들고 싶은데 제가 짠 코드가 어디가 잘못됬는지 모르겠어요ㅜㅜ

외부 인터렙터를 누르면 0 - - -, - 0 - -, - - 0 - , - - - 0 이 나오기는 하는데 숫자증가가 안됩니다ㅜ 

 

 

#define F_CPU 16000000

#define sw0 0

#define sw1 1

#define sw2 2

#define sw3 3

 

#define E1 329 //미

#define A1 440 //라

#define C_ 1108 //도샵

#define E2 659 //미

#define A2 880 //라

 

#define DLY_0 32 // 온음표*2

#define DLY_1 16 // 온음표

 

 

#include <avr/io.h>

#include <util/delay.h>

#include <avr/interrupt.h>

 

 

void ShowDigit(int i, int digit);

 

const unsigned char Segment_Data[] =

{0x40,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};//0x3F,

int sw;

unsigned char COLUMN[4] = {0,0,0,0};

volatile int Correct[] = {E1, A1, C_, E2, A2};

volatile int Correct_length[]={DLY_1,DLY_1,DLY_1,DLY_1,DLY_1};

volatile int Wrong[] = {A2,A2,A2,A2};

volatile int Wrong_length[] = {DLY_0,DLY_0,DLY_0,DLY_0};

volatile int freq = 1000;

volatile unsigned char TIMERvalue = 0xFF;

void Shimpyo(int time);

void Cutoff_Play(void);

int s1=0;

int s2=0;

int s3=0;

int s4=0;

 

ISR(INT4_vect)

{

sw = sw0;

 

}

ISR(INT5_vect)

{

sw = sw1;

}

ISR(INT6_vect)

{

sw = sw2;

}

ISR(INT7_vect)

{

sw =sw3;

}

ISR(TIMER0_OVF_vect)

{

TCNT0 = TIMERvalue;

PORTB ^=0x80;

}

void Cutoff_Play(void)

 {

_delay_ms(300);

TIMERvalue=255;

_delay_ms(20);

}

 

int main(void)

{

DDRG = 0x00; //내장 스위치 입력

DDRE = 0x00; // 외부 인터럽트 입력

DDRA = 0xff; // 세븐세그먼트 입력

DDRC = 0xff; // 세븐세그먼트 입력

DDRB = 0x80; //스피커 7번 output 설정

EICRB = 0xFF;  //스위치 외부 인터렙터 레지스터

EIMSK = 0xFF; //스위치 외부 인터렙터 레지스터

TCCR0 = 0x04; // 타이머 인터렙터 normal mode

TCNT0 = 0x05; // 타이머 레지스터

TIMSK = 0x80; // 타이머 레지스터

PORTC = 0x00; //세븐세그먼트 on

sei();

 

int i;

int digit;

int n=0;

unsigned char keyin =0;

PORTA = Segment_Data[0];

PORTB = keyin = (PING&0x0C)>>2;

sw =6;

while (1)

{

Run();

if(keyin)

{

COLUMN[0] =0;

COLUMN[1] = 0;

COLUMN[2] = 0;

COLUMN[3] = 0;

for(int i=0;i<4;i++)

{

ShowDigit(COLUMN[i],i); //

_delay_ms(0.001);//wait for a second

}

if (s1==5&&s2==2&&s3==2&&s4==9)

{

Correct_song();

_delay_ms(1000);

break;

}

else

{

Wrong_song();

_delay_ms(1000);

break;

}

}

}

}

void Run(void)

{

if (sw == sw0)

{

s1= s1+1;

COLUMN[0] = s1;

COLUMN[1] = 0;

COLUMN[2] = 0;

COLUMN[3] = 0;

 

for(int i=0;i<4;i++)

{

ShowDigit(COLUMN[i],i);

_delay_ms(0.001);//

}

}

else if (sw == sw1)

{

s2= s2+1;

COLUMN[0] =0;

COLUMN[1] = s2;

COLUMN[2] = 0;

COLUMN[3] = 0;

for(int i=0;i<4;i++)

{

ShowDigit(COLUMN[i],i); //

_delay_ms(0.001);//wait for a second

}

}

else if (sw == sw2)

{

s3= s3+1;

COLUMN[0] =0;

COLUMN[1] =0;

COLUMN[2] = s3;

COLUMN[3] = 0;

for(int i=0;i<4;i++)

{

ShowDigit(COLUMN[i],i); //

_delay_ms(0.001);//wait for a second

}

}

else if (sw == sw3)

{

s4= s4+1;

COLUMN[0] =0;

COLUMN[1] = 0;

COLUMN[2] = 0;

COLUMN[3] = s4;

for(int i=0;i<4;i++)

{

ShowDigit(COLUMN[i],i); //

_delay_ms(0.001);//wait for a second

}

}

}

 

void ShowDigit(int i, int digit) 

{

PORTC= ~(0x01<<digit);

PORTA = Segment_Data[i];

}

 

void Correct_song(void)

{

for(int i=0;i<4;i++)

{

freq = Correct[i];

TIMERvalue = 255-(1000000/(8*freq));

Shimpyo(Correct_length[i]);

Cutoff_Play();

}

}

 

void Wrong_song(void)

{

for(int i=0;i<4;i++)

{

freq = Wrong[i];

TIMERvalue = 255-(1000000/(8*freq));

Shimpyo(Wrong_length[i]);

Cutoff_Play();

}

}

 

void Shimpyo(int time) {

for(int i=0;i<time;i++) {

_delay_ms(50);

}

}

 

 

 

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 1

조회수 : 3,731

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 PIC18F452 블루투스 연결 댓글[4] 마이컴 새글 22-08-08
질문 아두이노 코드 해석을 못하겠습니다... 댓글[2] 김가헌 새글 22-08-08
질문 아두이노 코드를 avr로 변환해 주세요 ...ㅠ 댓글[3] 옹냥냥 새글 22-08-08
질문 아두이노 녹음-스피커모듈 관련 질문있습니다 ㅠㅠ 댓글[2] 방귀뿡뿡 새글 22-08-08
질문 Serial EEPROM 실수값 저장.. 댓글[2] 첨부파일광이 새글 22-08-07
질문 STM32 Live Expression 값들이 깜빡이는… 댓글[3] 둠둠  22-08-05
질문 아두이노 ESP32 wifi module 댓글[1] Yoon  22-08-03
질문 atmega128과 dht11, lcd를 연결했는데 0… 댓글[1] 고양이33  22-08-02
질문 ATMEGA 128 코드를 합치려고 하는데 어렵네요 댓글[2] 고양이33  22-08-02
질문 서보모터 제어에 대해 질문있습니다. 댓글[2] 첨부파일뉴비에오  22-07-30
질문 적외선 통신 알려주실분있나요 ㅠㅠ 댓글[1] hkjsj10  22-07-30
질문 아두이노 관련 궁금합니다. 댓글[1] 뱝뱝  22-07-28
질문 아두이노 우노 MCP4725 댓글[3] opqr  22-07-27
질문 레오나르도 인체감지센서 알림 안옴 면지지  22-07-24
답변 답변 : 레오나르도 인체감지센서 알림 안옴 master  22-07-25
질문 Uno에서 엔코더값 놓치는 이유가 뭘까요... 댓글[3] MAKTUB  22-07-24
질문 아두이노 압력센서 연동 질문 댓글[4] dbice  22-07-23
질문 아두이노 버튼 누르기 문의 댓글[1] 김형근  22-07-23
질문 HM10 다중페어링 댓글[1] ㅎㅋㅎㅋㅎ  22-07-22
질문 모터드라이브 선정 댓글[6] 조숩인  22-07-22
질문 ad9850 sin파 2 댓글[6] 첨부파일opqr  22-07-21
질문 ad9850 sin파 합성 댓글[7] 첨부파일opqr  22-07-20
질문 특정값이 n초이상,n번 이상 연속될경우를 감지하는 함수… 댓글[4] 우수  22-07-17
질문 delay를 millis함수로 바꾸는데 질문있습니다. 댓글[12] 첨부파일뉴비에오  22-07-16
질문 피에조 부저로 맬로디 만들기인대 코딩 까지 했는데 아두… 댓글[2] 첨부파일mingu123  22-07-15
질문 블루투스와 안드로이드 연동관련 질문입니다! ㅎㅇㅎㅇ  22-07-14
질문 아두이노간 블루투스 통신에 대해서 질문있습니다 첨부파일뉴비에오  22-07-13
답변 답변 : 아두이노간 블루투스 통신에 대해서 질문있습니다 댓글[3] master  22-07-14
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전