목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기

Similar documents
목차 1. ATMega128의외부메모리인터페이스 2. TEXT LCD 3. TEXT LCD에글자쓰기 4. SRAM 5. 외부메모리인터페이스에 SRAM붙이기

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - 제3장 GPIO 입출력 제어 (HBE-MCU-Multi AVR)

슬라이드 1

K&R2 Reference Manual 번역본

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드]

목차 1. TWI(Two Wire Serial Interface) 2. SPI(Serial Peripheral Interface) 3. TWI(I 2 C) 로 EEPROM 붙이기 4. SPI로 Serial Flash Memory 붙이기 5. TWI로온습도센서제어하기

정보보안 개론과 실습:네트워크

ATmega128

lecture4(6.범용IO).hwp

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2

Microsoft PowerPoint - es-arduino-lecture-03

2009년2학기 임베디드시스템 응용

가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR

UI TASK & KEY EVENT

I/O (GPIO) 제어 I/0 제어 ATmega128의 I/O 구성및특징 I/O PORT 구성 8비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT A ~PORT F) 6개 5비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT G) 1개 I/O PORT 특징

Microsoft PowerPoint - Java7.pptx

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - lab14.pptx

UI TASK & KEY EVENT

슬라이드 1

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

// 변수선언 unsigned char i; unsigned char FONT[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x98}; //PORTA 를출력으로설정하고초기값은모두 0 PORTA = 0x00; DD

중간고사

C 언어 프로그래밊 과제 풀이

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

b027_2005_3462.hwp

Chapter #01 Subject

본 강의에 들어가기 전

¾Ë·¹¸£±âÁöħ¼�1-ÃÖÁ¾

00목차

01....b

2007백서-001-특집

(291)본문7

PowerPoint 프레젠테이션

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고


2 PX-8000과 RM-8000/LM-8000등의 관련 제품은 시스템의 간편한 설치와 쉬운 운영에 대한 고급 기술을 제공합니다. 또한 뛰어난 확장성으로 사용자가 요구하는 시스템을 손쉽게 구현할 수 있습니다. 메인컨트롤러인 PX-8000의 BGM입력소스를 8개의 로컬지

PowerPoint 프레젠테이션

C++-¿Ïº®Çؼ³10Àå

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터

PowerPoint 프레젠테이션

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

Microsoft PowerPoint - chap06-2pointer.ppt

YPS1-KOREAN indd

윤성우의 열혈 TCP/IP 소켓 프로그래밍

歯mp3사용설명서

untitled

<30352D30312D3120BFB5B9AEB0E8BEE0C0C720C0CCC7D82E687770>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

untitled

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

chap10.PDF

C++ Programming

윈도우즈프로그래밍(1)

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

KEY 디바이스 드라이버

목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기

Chapter_02-3_NativeApp

Microsoft PowerPoint - chap12-고급기능.pptx

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

2주차: 입출력 제어 복습

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Microsoft Word - PLC제어응용-2차시.doc

<BDC7C7E83120B0E1B0FABAB8B0EDBCAD202832C1D6C2F7292E687770>

C 프로그래밊 개요

1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIM

388

Microsoft PowerPoint - 부호기와 복호기.PPT

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

03장.스택.key

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint 프레젠테이션

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

PowerPoint Presentation

553호

슬라이드 1

설계란 무엇인가?

뉴티씨 (NEWTC) 2. FB-CY4E-DEV (FPGA 개발 키트) 구성도 Port Select SW 7 Segment Text LCD UART RS-232C JTAG PORTA (5V) Active Serial PORTB (5V) OSC. 50MHz Analog

Lab 3. 실습문제 (Single linked list)_해답.hwp

목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기

쉽게 풀어쓴 C 프로그래밍

untitled

Java ...

슬라이드 1

Transcription:

Chapter. 13 KeyPAD 를이용한비밀번호입력기 HBE-MCU-Multi AVR Jaeheung, Lee

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기

키패드 (KeyPAD) 키패드 (KeyPAD) 마이크로컨트롤러활용에서사용자의입력을받아들이기위한장치 전화기, 컴퓨터, 핸드폰, 냉장고등거의모든가전제품에서사용 키패드인터페이스방식 n 정적인터페이스 (Static Interface) 방식 : n 키를포트에일대일로연결하여입력을검사하는방식 n 하드웨어구성이간편하고, 소프트웨어구현이쉬운장점이있다. n 많은키입력이필요할때는키의개수만큼의포트를사용하기때문에포트사용이비효율적이다. n 동적인터페이스 (Dynamic Interface) 방식 : n 키스위치를매트릭스형태로구성하여출력상태에따른입력값을비교하여키입력을판별하는방법 n 적은포트로여러개의키를제어할수있다. n 눌린스위치의검출방법이좀복잡해진다.

키패드 (KeyPAD) 키패드 (KeyPAD) 정적인터페이스 (Static Interface) 방식

키패드 (KeyPAD) 키패드 (KeyPAD) 동적인터페이스 (Dynamic Interface) 방식

키패드 (KeyPAD) 키패드 (KeyPAD) 동적인터페이스방식에서의신호에따른스위치눌림검출표 KEY_C0~2=100 KEY_C0~2=010 KEY_C0~2=001 KEY_R0~3=1000 S1 S2 S3 KEY_R0~3=0100 S4 S5 S6 KEY_R0~3=0010 S7 S8 S9 KEY_R0~3=0001 S10 S11 S12

실습개요 12 키키패드를이용하여자동문개폐기등에사용되는비밀번호입력기를만들도록한다. 키패드모듈과 TEXT LCD 를사용하여, 프로그램을작성한다. 편이상비밀번호는미리정의해두기로하고, 4 자리수비밀번호를사용하기로한다. 실습목표 키패드의동작원리를이해 ATmega128의 GPIO를이용한키패드데이터입력방법습득 TEXT-LCD, FND, GPIO 제어의복합적인프로그램능력배양

사용모듈 : MCU 모듈, TEXT-LCD 모듈, 키패드모듈, FND 모듈 MCU 모듈 E 포트 FND 모듈연결 TEXT LCD 모듈 C,D 포트 TEXT LCD 모듈연결 F 포트키패드모듈연결 Data BUS (D0~D7) Control 신호 (Rs, RW, E) FND 모듈 Signal FND 모듈 KeyPAD 신호 키패드모듈

사용모듈 : 키패드모듈회로

모듈결선방법 MCU 모듈포트 C 의 PC0~PC7 은 TEXT LCD 모듈의 D0~D7 핀에연결 MCU 모듈포트 D 의 PD5~PD7 은각각 TEXT LCD 모듈의 RS, RW, E 에연결 MCU 모듈포트 A 의 PA0~ PA2 은키패드모듈의 C0~C2 에, PA3~PA6 은키패드모듈의 R 0~R3 에연결 MCU 모듈포트 E 의 PE0~PE7 은 FND 모듈의 SB_A~SA_H 까지연결

구동프로그램 : 사전지식 동작 n 키패드를이용하여비밀번호를입력하고, n 비밀번호가입력되면 4자리가입력될때까지기다렸다가미리지정된비밀번호와비교하여, 맞는지여부를판단하고결과를 TEXT LCD에알려주기로한다. 키패드입력루틴 n 키패드모듈의 KEYPAD_R0~KEYPAD_R3에차례대로 1000, 01 00, 0010, 0001 을인가해가면서, KEYPAD_C0~KEYPAD_ C2값을보면어떤키가눌러졌는지검출이가능 소스구성 n key.c : 메인프로그램파일 n key_pad.c : 키패드와비밀번호입력 / 비교함수등이예제의핵심기능을하는함수들포함 n lcd.c : TEXT LCD 관련함수들포함 n avr_lib.c : 부가적으로자주사용되는사용자함수들포함

구동프로그램 : 사전지식 키패드입력루틴 n 키패드모듈의 KEYPAD_R0~KEYPAD_R3 에차례대로 1000, 0100, 0010, 0001 을인가해가면서, KEYPAD_C0~K EYPAD_C2 값을보면어떤키가눌러졌는지검출이가능 n 함수 get_passwd() 동작 n n n 키패드로키패드체크신호 (R0~R3) 을차례대로출력 키패드로부터키입력신호 (C0~C1) 를받아어떤키가눌렸는지확인하여 FND 에출력 비밀번호체크함수에비밀번호비교를의뢰

Get_passwd u08 get_passwd(){ ROW_PORT = ROW_1; ms_delay(1); 키패드입력루틴 if((column_pin & KEY_1)){ FND_PORT = FND_DATA_TBL[1]; passcheck('1'); else if((column_pin & KEY_2)){ FND_PORT = FND_DATA_TBL[2]; passcheck('2'); else if((column_pin & KEY_3)){ FND_PORT = FND_DATA_TBL[3]; passcheck('3'); ms_delay(10);

Get_passwd ROW_PORT = ROW_2; ms_delay(1); if(column_pin & KEY_1){ FND_PORT = FND_DATA_TBL[4]; passcheck('4'); else if(column_pin & KEY_2){ FND_PORT = FND_DATA_TBL[5]; passcheck('5'); else if(column_pin & KEY_3){ FND_PORT = FND_DATA_TBL[6]; passcheck('6'); 키패드입력루틴 ms_delay(10);

Get_passwd ROW_PORT = ROW_3; ms_delay(1); if(column_pin & KEY_1){ FND_PORT = FND_DATA_TBL[7]; passcheck('7'); else if(column_pin & KEY_2){ FND_PORT = FND_DATA_TBL[8]; passcheck('8'); else if(column_pin & KEY_3){ FND_PORT = FND_DATA_TBL[9]; passcheck('9'); ms_delay(10); 키패드입력루틴

Get_passwd ROW_PORT = ROW_4; ms_delay(1); if(column_pin & KEY_1){ FND_PORT = FND_DATA_TBL[15]; reset_check(); else if(column_pin & KEY_2){ FND_PORT = FND_DATA_TBL[0]; passcheck('0'); else if(column_pin & KEY_3){ FND_PORT = FND_DATA_TBL[11]; back_pass(); ms_delay(10); return _loop; 키패드입력루틴

구동프로그램 : 소스분석 Lcdconf.h #ifdef LCD_PORT_INTERFACE #ifndef LCD_CTRL_PORT #define LCD_CTRL_PORT PORTD #define LCD_CTRL_DDR DDRD #define LCD_CTRL_RS 5 #define LCD_CTRL_RW 6 #define LCD_CTRL_E 7 #endif #ifndef LCD_DATA_POUT #define LCD_DATA_POUT PORTC #define LCD_DATA_PIN PINC #define LCD_DATA_DDR DDRC #endif #endif

구동프로그램 : 소스분석 Key_pad.h 1-1) #ifndef KEY_PAD_H #define KEY_PAD_H #include<avr/io.h> #include"lcd.h" #include"avr_lib.h #define ROW_PORT PORTA #define ROW_DDR #define ROW_DDR_ADDR #define COLUMN_PORT #define COLUMN_DDR #define COLUMN_PIN DDRA 0x78 PORTA DDRA PINA

1-1) #define FND_PORT PORTE #define FND_DDR DDRE #define KEY_1 0x01 #define KEY_2 0x02 #define KEY_3 0x04 #define ROW_1 0x08 #define ROW_2 0x10 #define ROW_3 0x20 #define ROW_4 0x40 void init_keypad(); u08 get_passwd(); u08 passwd_check(u08 pass[]); #endif

구동프로그램 : 소스분석 Key_pad.c 2-1) #include"key_pad.h" u08 cnt=0; u08 pass[4]={0; u08 _loop=1; u08 FND_DATA_TBL[]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7C,0X07,0X7F,0X67,0X77,0X7C,0X39,0X5E,0X79,0X71,0X08,0X80; u08 PASSWD[]="1234";

2-2) void init_keypad(){ ROW_DDR = ROW_DDR_ADDR; ROW_PORT &= ~(ROW_DDR_ADDR); COLUMN_DDR &= ~(KEY_1 KEY_2 KEY_3); COLUMN_PORT &= ~(KEY_1 KEY_2 KEY_3); FND_DDR = 0xff; FND_PORT = 0x00; lcdinit(); lcdgotoxy(0,0); lcdprintdata("password?",sizeof("password?")-1); lcdgotoxy(0,1); lcddatawrite('>');

2-4) void reset_check(){ // 패스워드체크리셋 lcdclear(); ms_delay(10); lcdgotoxy(0,0); lcdprintdata("reset!!",sizeof("reset!!")-1); ms_delay(500); lcdgotoxy(0,0); lcdprintdata("password?",sizeof("password?")-1); lcdgotoxy(0,1); lcddatawrite('>'); while((column_pin & 0x07)!=0); cnt=0;

2-5) void passcheck(u08 data){ // 4 자리의패스워드가맞는지확인하는함수 if(cnt!=3){ //4자리입력이아닌경우 lcddatawrite('*'); pass[cnt++]=data; else if(cnt==3){ lcddatawrite('*'); pass[cnt]=data; if(passwd_check(pass)!=0){ // 비밀번호 1234 와다른경우 lcdgotoxy(0,0); lcdprintdata("wrongpassword!",sizeof("wrongpassword!")-1); lcdgotoxy(0,1); lcdprintdata("plz Check U Pass",sizeof("Plz Check U Pass")-1);

2-5) cnt=0; ms_delay(950); lcdclear(); ms_delay(50); lcdprintdata("password?",sizeof("password?")-1); lcdgotoxy(0,1); lcddatawrite('>'); else{ // 패스워드가맞는경우 lcdclear(); lcdgotoxy(0,0); lcdprintdata("hello MCU_WORLD",sizeof("Hello MCU_WORLD")-1); cnt=0; _loop=0; ms_delay(1000); while((column_pin & 0x07)!=0);

2-6) u08 get_passwd(){ ROW_PORT = ROW_1; ms_delay(1); if((column_pin & KEY_1)){ FND_PORT = FND_DATA_TBL[1]; passcheck('1'); else if((column_pin & KEY_2)){ FND_PORT = FND_DATA_TBL[2]; passcheck('2'); else if((column_pin & KEY_3)){ FND_PORT = FND_DATA_TBL[3]; passcheck('3'); ms_delay(10);

2-6) ROW_PORT = ROW_2; ms_delay(1); if(column_pin & KEY_1){ FND_PORT = FND_DATA_TBL[4]; passcheck('4'); else if(column_pin & KEY_2){ FND_PORT = FND_DATA_TBL[5]; passcheck('5'); else if(column_pin & KEY_3){ FND_PORT = FND_DATA_TBL[6]; passcheck('6'); ms_delay(10);

2-6) ROW_PORT = ROW_3; ms_delay(1); if(column_pin & KEY_1){ FND_PORT = FND_DATA_TBL[7]; passcheck('7'); else if(column_pin & KEY_2){ FND_PORT = FND_DATA_TBL[8]; passcheck('8'); else if(column_pin & KEY_3){ FND_PORT = FND_DATA_TBL[9]; passcheck('9'); ms_delay(10);

2-6) ROW_PORT = ROW_4; ms_delay(1); if(column_pin & KEY_1){ FND_PORT = FND_DATA_TBL[15]; reset_check(); else if(column_pin & KEY_2){ FND_PORT = FND_DATA_TBL[0]; passcheck('0'); else if(column_pin & KEY_3){ FND_PORT = FND_DATA_TBL[11]; back_pass(); ms_delay(10); return _loop;

2-7) u08 passwd_check(u08 pass[]){ u08 _error=0; u08 i; for(i=0;i<4;i++){ if(pass[i]!=passwd[i]) _error++; return _error;

구동프로그램 : 소스분석 Key.c 3-1) #include<avr/io.h> #include"key_pad.h" int main(){ char loop = 1; // 키패드제어헤더 init_keypad(); 3-2) while(loop){ loop=get_passwd(); return 0; // 키패드설정초기화, Textlcd 초기화 // 반복문을돌려서비밀번호가맞는지찾아냄

실행결과