BASIC4MCU | 디스플레이 | LCD | 4x3 키 매트릭스 & CLCD(8비트) 프로테우스 (코드비젼 & AVRstudio) - 패스워드 체크
페이지 정보
작성자 키트 작성일2017-08-31 17:40 조회2,446회 댓글0건첨부파일
본문
![]()
//=====================================================================//#include <mega128.h>#include <delay.h>#include <stdio.h>//=====================================================================//#define lcd_RS_ON PORTB|=0x01#define lcd_RS_OFF PORTB&=~0x01#define lcd_E_ON PORTB|=0x04#define lcd_E_OFF PORTB&=~0x04#define lcd_Out PORTA//char str1[]= " basic4mcu.com ";char str2[]= " Key Matrix ";char str3[]= " door lock test ";//void lcdData(char d){ lcd_RS_ON; lcd_Out=d; lcd_E_ON; delay_us(1); lcd_E_OFF; delay_us(50); }void lcdCmd(char c){ lcd_RS_OFF; lcd_Out=c; lcd_E_ON; delay_us(1); lcd_E_OFF; delay_ms(2); }//void lcd_gotoxy(char x, char y){if (y==0)lcdCmd(0x80+x);else if(y==1)lcdCmd(0xC0+x);else if(y==2)lcdCmd(0x94+x);else if(y==3)lcdCmd(0xD4+x);}//void lcd_puts(char *str){ while(*str)lcdData(*str++); }//void lcd_init(void){DDRA=0xFF; DDRB=7; delay_ms(30);lcdCmd(0x38); lcdCmd(0x38); lcdCmd(0x38);lcdCmd(0x0E); lcdCmd(0x06); lcdCmd(0x01); delay_ms(1);}//char KeyScan(void){char KeyBuf=0xFF; // 키 값이 들어갈 버퍼, 초기값 0xFFDDRC=0; PORTC=0xFF; // 포트 초기값, 입력핀 내부풀업저항 사용//DDRC=0x08; PORTC&=~0x08; delay_us(1); // 1번째 줄 선택if(!(PINC&1))KeyBuf='1';if(!(PINC&2))KeyBuf='2';if(!(PINC&4))KeyBuf='3';DDRC=0; PORTC=0xFF; // 1번째 줄 해제//DDRC=0x10; PORTC&=~0x10; delay_us(5); // 2번째 줄 선택if(!(PINC&1))KeyBuf='4';if(!(PINC&2))KeyBuf='5';if(!(PINC&4))KeyBuf='6';DDRC=0; PORTC=0xFF; // 2번째 줄 해제//DDRC=0x20; PORTC&=~0x20; delay_us(5); // 3번째 줄 선택if(!(PINC&1))KeyBuf='7';if(!(PINC&2))KeyBuf='8';if(!(PINC&4))KeyBuf='9';DDRC=0; PORTC=0xFF; // 3번째 줄 해제//DDRC=0x40; PORTC&=~0x40; delay_us(5); // 4번째 줄 선택if(!(PINC&1))KeyBuf='*';if(!(PINC&2))KeyBuf='0';if(!(PINC&4))KeyBuf='#';DDRC=0; PORTC=0xFF; // 4번째 줄 해제//return KeyBuf; // Key 없으면 0xFF 리턴}//=====================================================================//#define Normal_mode 0#define RePass_mode 1unsigned char mode=Normal_mode;//char passWD[]="1234";char keyBuf[]=" ";char dispBuf[]=" ";char buf[30],key,old_key=0xFF;//void main(void){char buf[30],key;lcd_init();lcd_gotoxy(0,0); lcd_puts(str1);lcd_gotoxy(0,1); lcd_puts(str2);delay_ms(2000);lcdCmd(1); //clearlcd_gotoxy(0,0); lcd_puts(str3);while(1){key=KeyScan();if(old_key!=key){ old_key=key;if((key>='0')&&(key<='9')){for(i=1;i<=3;i++)keyBuf[i-1]=keyBuf[i]; // 버퍼를 시프트 시킨 후keyBuf[3]=key; // 버퍼0에 키값을 저장//for(i=1;i<=3;i++)dispBuf[i-1]=dispBuf[i]; // 버퍼를 시프트 시킨 후dispBuf[3]='*';}if(key=='*'){ // enterif(mode==Normal_mode){ // 비밀번호 입력if(!memcmp(passWD,keyBuf,4)){ // 비밀번호가 맞으면lcd_gotoxy(0,1); lcd_puts("ok!!");}else{ // 비밀번호 틀리면lcd_gotoxy(0,1); lcd_puts("err!");}delay_ms(2000);}else{ // pass word 변경for(i=0;i<4;i++){ passWD[i]=keyBuf[i]; } // 버퍼 clearmode=Normal_mode;}for(i=0;i<4;i++){ keyBuf[i]=dispBuf[i]=' '; } // 버퍼 clear}if(key=='#'){ // mode 변경if(mode==Normal_mode)mode=RePass_mode; else mode=Normal_mode; // mode 변경for(i=0;i<4;i++){ keyBuf[i]=dispBuf[i]=' '; } // 버퍼 clear}//if(mode==Normal_mode)sprintf(buf,"%s",dispBuf);else sprintf(buf,"%s",keyBuf);lcd_gotoxy(0,1); lcd_puts(buf);}//delay_ms(100);}}//=================================================================//=====================================================================//#define F_CPU 16000000UL // 16 MHz#include <avr/io.h>#include <util/delay.h>#include <stdio.h>#include <string.h>//=====================================================================//#define lcd_RS_ON PORTB|=0x01#define lcd_RS_OFF PORTB&=~0x01#define lcd_E_ON PORTB|=0x04#define lcd_E_OFF PORTB&=~0x04#define lcd_Out PORTA//char str1[]= " basic4mcu.com ";char str2[]= " Key Matrix ";char str3[]= " door lock test ";//void lcdData(char d){ lcd_RS_ON; lcd_Out=d; lcd_E_ON; _delay_us(1); lcd_E_OFF; _delay_us(50); }void lcdCmd(char c){ lcd_RS_OFF; lcd_Out=c; lcd_E_ON; _delay_us(1); lcd_E_OFF; _delay_ms(2); }//
댓글 0
조회수 2,446등록된 댓글이 없습니다.