질문게시판 > 도어락 소스코드 오류수정 부탁드려요..

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

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

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

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

BASIC4MCU > 질문게시판

도어락 소스코드 오류수정 부탁드려요..

페이지 정보

작성자 dedyw 작성일18-12-18 22:25 조회3,699회 댓글0건

본문

#include <mega128.h>

#include <lcd.h>

#include <delay.h>

#include <stdio.h>

 

#define BYTE  unsigned char

#define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT)) 

#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT)) 

#define TESTBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT)) 

#define     SCAN_OFF (PORTD |= 0x0f)

#define     SEG_DATA(val)    (PORTC = val)

 

unsigned char key;

int key_IN[4]; //입력되는 키값 저장배열

int sec_num[4]={0x33,0x31,0x32,0x31};  //비밀번호

int arr_cnt=1, right=1;  //비밀번호 검사를 위한 변수 선언

int g=0, s=0;  //비밀번호 검사를 위한 변수선언

int i=0;  //LCD출력을 위한 변수

 

flash BYTE seg_hexfont[2] = {0xc0,0xbf};   

BYTE FND_selector[3]={0xBF, 0xDF, 0xEF};

BYTE seg_data[3]= {0xbf,0xbf,0xbf};

 

////////////////////////////////////////////////////////////

////////////////LCD출력을 위한 함수들///////////////////////

///////////////////////////////////////////////////////////

void initialize_PORT(void)

{

    DDRA = 0xFF;    // PORTA 출력

    PORTA=0xFF;     

    DDRC = 0xFF;    // PORTC 출력

    PORTC=0xFF;

    DDRD = 0xFF;    // PORTD 출력

    PORTD=0xFF;

}

 

 

interrupt [EXT_INT4] void RETRY (void)

 

{

      lcd_clear();                // LCD를 지운다.

      lcd_puts("password");

}

interrupt [EXT_INT5] void sw5 (void)

 

{

      lcd_gotoxy(0,0);               

      lcd_puts("1");

}

interrupt [EXT_INT6] void sw6 (void)

 

{

      lcd_gotoxy(0,1);                // LCD를 지운다.

      lcd_puts("2");

}

interrupt [EXT_INT7] void sw7 (void)

 

{

      lcd_gotoxy(0,2);                // LCD를 지운다.

      lcd_puts("3");

}

 

 

void lcd_decimal(BYTE *ptr, BYTE hex)

{

    unsigned int h;

    

    *ptr = (hex / 1000);

    

    if(h != 0)

        char_out(h + '0');

      else

           char_out(0);

        

    (*ptr+1)= ((hex % 1000) / 100);

    

    if(h != 0)

        char_out(h + '0');

      else

        char_out(0);

        

     (*ptr+2)= (((hex % 1000) % 100) /10);

    

    if(h != 0)

        char_out(h + '0');

      else

        char_out(0);

        

    *ptr+3)= (((hex % 1000) % 100) % 10);

    

    if(h != 0)

        char_out(h + '0');

      else

        char_out(0);

}

 

void lcd2hex(unsigned char ch)

{

    unsigned char ddata=0x00, dch;

 

    dch = (ch>>4)&0x0f;

    if( dch <= 9 ) ddata = '0'+dch; 

    else ddata = 'A'+(dch-10); 

    char_out(ddata);

 

    dch = ch&0x0f;

    if( dch <= 9 ) ddata = '0'+dch; 

    else ddata = 'A'+(dch-10); 

    char_out(ddata);

}

 

unsigned char Key(void)                 

{

PORTE = 0x10;

delay_ms(5000);  //포트의 출력이 완전하게 바뀐후에 비교를 하기위한 딜레이

{

if((PINE & 0x10) == 0x10)                   

return 0x30;    // 0

 

else if((PINE & 0x20) == 0X20)

return 0x34;   // 4

 

else if((PINE & 0x40) == 0X40)

return 0x38; // 8

 

else if((PINE & 0x80) == 0X80)

return 0x41;  // A

}

 

                 

PORTE = 0x20;

delay_ms(5000);  //포트의 출력이 완전하게 바뀐후에 비교를 하기위한 딜레이

{

if((PINE & 0x10) == 0x10)

return 0x31;  // 1

 

else if((PINE & 0x20) == 0X20)

return 0x35;   // 5

 

else if((PINE & 0x40) == 0X40)

return 0x39; // 9

 

else if((PINE & 0x80) == 0X80)

return 0x42;  // B

}

 

 

PORTE = 0x40;

delay_ms(5000);  //포트의 출력이 완전하게 바뀐후에 비교를 하기위한 딜레이

{

if((PINE & 0x10) == 0x10)

return 0x32; // 2

 

else if((PINE & 0x20) == 0X20)

return 0x36;   // 6

 

else if((PINE & 0x40) == 0X40)

return 0x2a; // *

   

else if((PINE & 0x80) == 0X80)

return 0x43;  // C

}

 

 

PORTE = 0x80;

delay_ms(5000);  //포트의 출력이 완전하게 바뀐후에 비교를 하기위한 딜레이

{

if((PINE & 0x10) == 0x10)

return 0x33; // 3

 

else if((PINE & 0x20) == 0X20)

return 0x37;   // 7

 

else if((PINE & 0x40) == 0X40)

return 0x23; // #

 

else if((PINE & 0x80) == 0X80)

return 0x44;  // D

}

 

return 0xff; 

 

}

 

 

 

void sec_test(unsigned char b);

{

  if(arr_cnt==8)

  {

    for(g=0;g<8;g++)

    {

      if(key_IN[g]==sec_num[g])

        right++;

    }

    if(right==8)

    {

      lcd_clear();

      lcd_gotoxy(0,0);

      lcd_puts("open");

      delay_ms(500);

      PORTC = seg_data[1];      

      PORTD = FND_selector[3];         

      lcd_clear();               // LCD를 지운다.

      lcd_gotoxy(0,0);

      lcd_puts("password");        // LCD의 첫번째 라인

      

      arr_cnt=1;

      right=1;

      g=0; 

      s=0;

      i=0;

    }

    

    else 

    {

      lcd_clear();

      lcd_gotoxy(0,0);

      lcd_puts("RETRY");        // LCD의 첫번째 라인

      delay_ms(500);

      PORTC = seg_data[2];      

      PORTD = FND_selector[3];

      lcd_clear();

      lcd_gotoxy(0,0);

      lcd_puts("password");        // LCD의 첫번째 라인

      

      arr_cnt=1;

      right=1;

      g=0; 

      s=0;

      i=0;

     }

  }

 

}

 

 

void main(void)

    

    initialize_PORT();

 

    lcd_clear();                // LCD를 지운다.

    lcd_gotoxy(0,0);

    lcd_putsf("password");        // LCD의 첫번째 라인

    delay_ms(100);  // 1초 대기

   

   

    DDRE=0xff;   // PE4 입력 DDRE4 비트는 초기값이 0으로 설정되어 있기 때문에

                   // "DDRE_Bit4=0;"는 생략 가능하다. INT4(PE4)핀

                   // DDRE&=0xEF;

 

    EIMSK|=0x0f;   // INT4 개별 인터럽트 인에이블

    EICRB|=0xff;   // INT4 상승 에지 

    EIFR|=0xf0;     // INTF4 클리어 

    SREG=0x80;

     

     

    while(1) 

    {     

      

      key=Key();                         // 키 함수의 리턴값을 키에 받음

      if(key!=0xff)                      // 그런데 그 키의 값이 0xff가 아니라면?

      {

      lcd_gotoxy(1,i);           // LCD에 출력 위치

      delay_ms(1000); 

      char_out(key);                      // 리턴 키 값을 출력하는 함수.

      delay_ms(500);

      i++;

      

      sec_test();                       //비밀번호 확인 함수

      }

    }  

    }

}   

 

 

아래는 오류 내용입니다...****************************************************************************************

Error: D:\new\doorlock1.c(68): undefined symbol 'instruction_out'

Error: D:\new\doorlock1.c(73): undefined symbol 'char_out'

Error: D:\new\doorlock1.c(80): undefined symbol 'char_out'

Error: D:\new\doorlock1.c(87): undefined symbol 'char_out'

Error: D:\new\doorlock1.c(94): undefined symbol 'char_out'

Error: D:\new\doorlock1.c(106): undefined symbol 'char_out'

Error: D:\new\doorlock1.c(111): undefined symbol 'char_out'

Error: D:\new\doorlock1.c(190): '{' not expected

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

댓글 : 0

조회수 : 3,699

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 라즈베리파이4 신형 선택문제 댓글[1] maximum 새글 22-06-26
질문 음전압 ADC 댓글[1] 412904 새글 22-06-26
질문 아두이노 센서값 출력 질문입니다! 댓글[1] 아궁2  22-06-24
질문 ATmega128, ATmega28 RS232통신 첨부파일Moon4201  22-06-24
답변 답변 : ATmega128, ATmega28 RS232… 댓글[1] master  22-06-25
질문 서보모터, 온습도센서 코드 질문 댓글[2] 첨부파일kshdlfaldfh  22-06-22
답변 답변 : 서보모터, 온습도센서 코드 질문 댓글[15] master  22-06-22
질문 steppermulti5 질문 응애  22-06-21
답변 답변 : steppermulti5 질문 댓글[1] master  22-06-22
질문 atmega128 avr usart 질문 snoflak  22-06-21
답변 답변 : atmega128 avr usart 질문 댓글[5] master  22-06-21
질문 사용자 정의 함수 변환 하는 방법 댓글[2] 첨부파일da0800  22-06-21
질문 atmega128 댓글[1] 양의노래  22-06-20
질문 아두이노 동시동작 재질문 댓글[9] 첨부파일죠르디  22-06-20
질문 초음파센서로 dc모터 제어하기 댓글[1] 첨부파일난쟁2  22-06-20
질문 아두이노 동시동작 댓글[7] 죠르디  22-06-19
질문 ATMEGA128 UART,FND 연동 질문 JMOD  22-06-19
답변 답변 : ATMEGA128 UART,FND 연동 질문 댓글[1] master  22-06-20
질문 atmeg128 질문이요 댓글[1] 첨부파일공대생er  22-06-18
질문 atmega128 초음파 센서로 신호등 시간초 늘리기 서동씨  22-06-18
답변 답변 : atmega128 초음파 센서로 신호등 시간초… 댓글[1] master  22-06-18
질문 atmega128 댓글[2] 망경이  22-06-18
질문 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다… 댓글[1] 따랑해영  22-06-18
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 ..… 댓글[1] 첨부파일따랑해영  22-06-19
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 .… 첨부파일따랑해영  22-06-19
질문 서보모터와 초음파센서 댓글[1] 브링미히어  22-06-17
질문 LCD 도와주세요 ㅜㅠㅠㅠ 댓글[2] 첨부파일dentist22  22-06-17
질문 안녕하세요 atmega128 질문드리고 싶습니다. (자… 댓글[3] dlcldl  22-06-17
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전