#include <util/delay.h>
#include <avr/io.h>
int KeyMatrix();
void VarInit(void);
int FND=0;
int fnd_H=0,fnd_L=0;
int cnt =0;
int main()
{
DDRA = 0XFF; PORTA = 0XFF;
DDRB = 0XFF; PORTB = 0XFE;
DDRC = 0X0F; PORTC = 0X00;
PORTA=0X00;
while(1)
{ PORTC = 0XF0;
if((PINC !=0XF0) && (cnt == 0))
{ fnd_L = KeyMatrix();
PORTC = 0XF0;
while(PINC != 0XF0);
_delay_ms(1);
cnt=1;
if(fnd_L == 15)VarInit();
}
PORTC = 0XF0;
if((PINC != 0XF0) && (cnt == 1))
{ PORTE = ~PINC;
fnd_H = KeyMatrix();
PORTC = 0XF0;
while(PINC != 0XF0);
_delay_ms(1);
fnd_L <<=4;
cnt = 2;
if(fnd_H == 15) VarInit();
}
PORTC = 0XF0;
if((PINC != 0XF0) && (cnt ==2))
{ fnd_L = KeyMatrix();
PORTC = 0XF0;
while(PINC != 0XF0);
_delay_ms(1);
if(fnd_L == 15) VarInit();
}
FND = fnd_H | fnd_L;
PORTA = FND;
}}
void VarInit(void)
{ fnd_L = 0;
fnd_H = 0;
FND = 0;
cnt = 0;
}
int KeyMatrix()
{ static unsigned char key=0;
int keyout = 0xfe;
int i;
PORTC = 0XF0;
for(i=0; i<=3; i++)
{ PORTC = keyout;
_delay_ms(10);
switch(PINC & 0XF0)
{ case 0x70: key=0+i;
break;
case 0xb0: key=4+i;
break;
case 0xd0: key=8+i;
break;
case 0xe0: key=12+i;
break;
}
keyout = (keyout<<1) + 0x01;
}
return key;
}
책에 쓰여진 코드 이고요,교수님이 이 코드로는 프로그래밍이 제대로 작동 하지 않을거라 했어요.
2개의 세븐세그먼트를 porta에 연결시키고 keymatrix 를 portc로 사용하여 십의 자리수까지 표현하는 프로그램인데,
뭐가 잘못된거죠...저는 cnt값이랑 porta랑 and연산자 시키는 부분이 잘못된거 같아서 고쳐 봤는데 안되더라고요.