게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
프로그래밍 언어 중 마이크로 컨트롤러 atmega128
게시물ID : computer_269351짧은주소 복사하기
작성자 : bangwool3791
추천 : 0
조회수 : 525회
댓글수 : 2개
등록시간 : 2015/10/27 13:09:39
#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연산자 시키는 부분이 잘못된거 같아서 고쳐 봤는데 안되더라고요.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호