BASIC4MCU | 질문게시판 | 도어락코드 입니다.
페이지 정보
작성자 rkdeh 작성일2018-12-19 20:55 조회8,463회 댓글2건본문
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#include <lcd.h>
//
#define BYTE unsigned char
//
int key_IN[4]; //입력되는 키값 저장배열
int sec_num[4]={0x32,0x32,0x32,0x32}; //비밀번호
int arr_cnt=1,right=1; //비밀번호 검사를 위한 변수 선언
int g=0,s=0; //비밀번호 검사를 위한 변수선언
char i=0; //LCD출력을 위한 변수
//flash BYTE seg_hexfont[2]={0xc0,0xbf};
BYTE FND_selector[3]={0xBF,0xDF,0xEF};
BYTE seg_data[2]={0xC0,0xbf};
#asm
.equ __lcd_port=0x1b
#endasm
//---------------------------------------
//
//
unsigned char KeyCheck(void){
PORTD=0x10; delay_ms(1);
//
if (PIND.0)return 0x30; // 0
else if(PIND.1)return 0x34; // 4
else if(PIND.2)return 0x38; // 8
else if(PIND.3)return 0x41; // A
//
PORTD=0x20; delay_ms(1);
//
if (PIND.0)return 0x31; // 1
else if(PIND.1)return 0x35; // 5
else if(PIND.2)return 0x39; // 9
else if(PIND.3)return 0x42; // B
//
PORTD=0x40; delay_ms(1);
//
if (PIND.0)return 0x32; // 2
else if(PIND.1)return 0x36; // 6
else if(PIND.2)return 0x2a; // *
else if(PIND.3)return 0x43; // C
//
PORTD=0x80; delay_ms(1);
//
if (PIND.4)return 0x33; // 3
else if(PIND.5)return 0x37; // 7
else if(PIND.6)return 0x23; // #
else if(PIND.7)return 0x44; // D
//
return 0xff;
}
void sec_test(){
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,1); lcd_puts("open"); delay_ms(500);
lcd_clear(); lcd_gotoxy(0,0); lcd_puts("password");
PORTE=seg_data[0]; PORTB=FND_selector[2];
arr_cnt=1; right=1; g=0; s=0; i=0;
}
else{
lcd_clear(); lcd_gotoxy(0,1); lcd_puts("RETRY"); delay_ms(500);
lcd_clear(); lcd_gotoxy(0,0); lcd_puts("password"); // LCD의 첫번째 라인
PORTE=seg_data[1]; PORTB=FND_selector[2];
arr_cnt=1; right=1; g=0; s=0; i=0;
}
}
}
void main(void){
PORTA=0xFF; DDRA=0xFF; // PORTA 출력
PORTB=0xFF; DDRB=0xFF; // PORTC 출력
PORTD=0x0F; DDRD=0x00; // PORTD 출력
lcd_init(16);
lcd_gotoxy(0,0); lcd_puts("password"); delay_ms(100);
DDRE=0xff;
//
EICRA=0xff; EIFR|=0xf0; EIMSK=0x0F; // 상승 에지
SREG=0x80;
while(1){
sec_test();
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------
저희가 키패드가 없이 외부인터럽트로 선언을 해서 도어락을 구성하려고 하는데 LCD판에 인터럽트를 누르면 입력이 되지 않네요
그리고 번호가 맞으면 SEGMENT에 불이 들어오게 하고 싶은데 그것도 잘 되지 않는데 도와주세요ㅜㅜ
컴파일러는 코드비젼 입니다
댓글 2
조회수 8,463master님의 댓글
master 작성일
회로도는 없나요?
회로도를 첨부하지 않으면 스위치를 어떻게 연결했는지 제가 체크할 방법이 없습니다.
저는 "신"도 아니고, "점쟁이"도 아니며 님을 CCTV로 감시하고 있지도 않습니다.
rkdeh님의 댓글
rkdeh 작성일회로도는 없는거 같아요ㅜ 어디서 확인할줄도 모르겟고요