#include <AT89x51.h>
unsigned char KEY;
unsigned char KEY2;
unsigned char FLAG;
code unsigned char SEGMENT[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //세그먼트 숫자지정
code unsigned char KCODE[16] = {0x00,0x04,0x08,0x0c,0x01,0x05,0x09,0x0d,0x02,0x06,0x0a,0x0e,0x03,0x07,0x0b,0x0f}; //0-F키 내부 코드
void delay(unsigned int i)
{
while(i--);
}
void SCAN1(void)
{
unsigned char i,temp,key1;
KEY=key1=0;
FLAG=1;
P0=0xf0;
temp=P0;
temp=(temp>>4)|0xf0;
for(i=0;i<4;i++){
if(!(temp&0x0f)){
key1=KEY;
FLAG=0;
}
temp>>=1;
KEY++;
}
KEY=key1&0x0f;
}
void SCAN(void)
{
unsigned char i;
for(i=0;i<4;i++){
do{
SCAN1();
}while(FLAG==0);
}
do{
SCAN1();
}while(!(FLAG==0));
KEY2=KCODE[KEY];
}
void main(void)
{
//변수선언
P2=P1=0xff;
do{
SCAN();
P1=SEGMENT[KEY2];
P2=0xef;
}while(1);
}
원문소스입니다만 이렇게 하니까 c 8 4 0 밖에 출력이 되지 않네요
0~f까지 있지만 다른키가 출력이 안됩니다
c d e f
8 9 a b
4 5 6 7
0 1 2 3 이런 현식의 키매트릭스입니다.
밑에 비슷한 글의 질문이 있었는데 답변이 없더라구요. 답변부탁드립니다.