BASIC4MCU | 질문게시판 | 도어락 코드입니다.
페이지 정보
작성자 rkdeh 작성일2018-12-19 18:43 조회6,266회 댓글1건본문
#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에 불이 들어오게 하고 싶은데 그것도 잘 되지 않는데 도와주세요ㅜㅜ
컴파일러는 코드비젼 입니다
댓글 1
조회수 6,266master님의 댓글
master 작성일회로도를 첨부해보세요