BASIC4MCU | 질문게시판 | 답변3 : 안녕하세요 4*3 키매트릭스와 Fnd array를 이용한 회로 질문드립니다.
페이지 정보
작성자 master 작성일2018-04-27 00:15 조회6,852회 댓글2건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=630
본문
// DateTime : 2018-04-27 오전 12:16:15// by Ok-Hyun Park//=====================================================================//#include <mega128.h>#include <delay.h>//=====================================================================//char fnd[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //애노드char buf[4]={0};//void disp(){PORTA=fnd[buf[0]]; PORTB=1; delay_ms(1); PORTB=0;PORTA=fnd[buf[1]]; PORTB=2; delay_ms(1); PORTB=0;PORTA=fnd[buf[2]]&0x7F; PORTB=4; delay_ms(1); PORTB=0;PORTA=fnd[buf[3]]; PORTB=8; delay_ms(1); PORTB=0;}//char KeyScan(void){char KeyBuf=0xFF;DDRC=0; PORTC=~0;DDRC=0x08; PORTC.3=0; delay_us(1); if(!PINC.0)KeyBuf= 1; if(!PINC.1)KeyBuf=2; if(!PINC.2)KeyBuf= 3; DDRC=0; PORTC=~0;DDRC=0x10; PORTC.4=0; delay_us(1); if(!PINC.0)KeyBuf= 4; if(!PINC.1)KeyBuf=5; if(!PINC.2)KeyBuf= 6; DDRC=0; PORTC=~0;DDRC=0x20; PORTC.5=0; delay_us(1); if(!PINC.0)KeyBuf= 7; if(!PINC.1)KeyBuf=8; if(!PINC.2)KeyBuf= 9; DDRC=0; PORTC=~0;DDRC=0x40; PORTC.6=0; delay_us(1); if(!PINC.0)KeyBuf=10; if(!PINC.1)KeyBuf=0; if(!PINC.2)KeyBuf=11; DDRC=0; PORTC=~0;return KeyBuf; // Key 없으면 0xFF 리턴}//=====================================================================//void main(void){char i,key,old;DDRA=0xFF; DDRB=0x0F;old=KeyScan(); // 무한루프 들어가기 전에 키값을 저장해 두고while(1){key=KeyScan(); // 키를 입력받아서if(old!=key){ // 저장된 값과 다르면 (새로운 키가 눌렸으면)if((key>=0)&&(key<=11)){ // 키값의 범위를 체크하고for(i=2;i>=0;i--)buf[i+1]=buf[i]; // 버퍼를 시프트 시킨 후buf[0]=key; // 버퍼0에 키값을 저장}old=key; // 현재 키값을 저장}disp();}}
FND 4x3 키 매트릭스 & FND(4자리) 프로테우스 ( 코드비전 & AVRstudio)
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo10&wr_id=191
이 소스를 수정해서 인터럽트 대신 폴링 방식으로 수정했습니다.
댓글 2
조회수 6,85227315co님의 댓글
27315co 작성일정말 감사드립니다. 어떻게 감사의 말씀을 표현드려야할지 모르겠습니다. 열심히 배우고 노력해서 저도 지식을 나눌수있는 단계까지 오르도록 노력하겠습니다.
27315co님의 댓글
27315co 작성일
제가 코드를 보면서 궁금한사항이 생겼는데요 disp 함수에서왜 fnd[buf[2]] 에만 &0x7f 를 해주고
Keyscan 함수에서는 DDRC 를 왜 PORT.C 에 맞춰서 선언해주신거죠??