BASIC4MCU | 질문게시판 | 선배님 도움 요청합니다. Atmega128 키 매트릭스 입력시 FND 시프트 구동
페이지 정보
작성자 꾸우욱 작성일2021-12-23 15:22 조회1,343회 댓글2건본문
선배님들 도움 요청합니다.
키 매트릭스 0번 키를 누르면 FND에 0이 나오고 다른 스위치를 누르면
그 숫자가 뜨면서 0은 시프트 되는 코드를 짜고 싶은데
제 머리로는 잘안되네요...ㅠㅠ 코딩을 한지 얼마안된 코린이 입니다. ㅠ
선배님들 도와주시면 감사하겠습니다.
코드는 이 사이트에 있는 코드로 해봤는데 잘안되네요...ㅠ
포트만 바꾸고 코드는 그대로 입니다... ㅠ
// 코드비젼
// 코드 최적화 금지
#pragma opt-
#include <mega128.h>
#include <delay.h>
/*0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f*/
unsigned char fnd[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x98,0xa7,0xb3,0x9d,0x96,0x87,0xff
};
char KeyScan(void){
char KeyBuf; // 키 값이 들어갈 버퍼
KeyBuf=0xFF; // 변수 초기화, 여백문자값
PORTD0=0; delay_us(5); // 1번째 줄 선택
if(!PIND.4)KeyBuf=0;
if(!PIND.5)KeyBuf=1;
if(!PIND.6)KeyBuf=2;
if(!PIND.7)KeyBuf=3;
PORTD.0=1; // 1번째 줄 해제
PORTD.1=0; delay_us(5); // 2번째 줄 선택
if(!PIND.4)KeyBuf=4;
if(!PIND.5)KeyBuf=5;
if(!PIND.6)KeyBuf=6;
if(!PIND.7)KeyBuf=7;
PORTD.1=1; // 2번째 줄 해제
PORTD.2=0; delay_us(5); // 3번째 줄 선택
if(!PIND.4)KeyBuf=8;
if(!PIND.5)KeyBuf=9;
if(!PIND.6)KeyBuf=0x0A;
if(!PIND.7)KeyBuf=0x0B;
PORTD.1=1; // 3번째 줄 해제
return KeyBuf;
}
void main(void){
unsigned char in;
PORTA=0xFF;
DDRA=0x0F;
PORTC=0xC0; // 초기값 0
DDRC=0x0F; // FND 출력포트
while(1){
in=KeyScan();
if(in<0x10)PORTC=fnd[in];
};
}
댓글 2
조회수 1,343master님의 댓글
master 작성일
https://cafe.naver.com/circuitsmanual/116122
이런 예제를 공부해보세요
꾸우욱님의 댓글
꾸우욱
감사합니다. 공부 해보겠습니다!