인터넷 연결없이 음성인식이 가능한 음성인식 IC 개발 판매합니다.
  최대 32분까지 음성 안내 기능이 가능한 음성 재생 IC 개발 판매합니다.
  AVRISP, AVRISP-mkii, JTAGICE, Atmel-ICE, STLINK-V2, STLINK-V3 판매합니다.
  25년이상 축척된 개발경험과 기술력을 바탕으로 제품개발을 도와 드립니다.
 
    소프트웨어 제품
 
    하드웨어 제품
 
more... 
1. 2019년 3월8일부로 배송비가 2,600원으로 ? ...
2. Prof-UIS 3.4.0.7 버젼이 출시 되었습니다. ...
3.  Prof-UIS 3.20.2 버젼이 출시 되었습니다.
4. 이지플로우 스튜디오 2015 v.1.34 업데이트 ...
5. BootMega2014 버전이 업그레이드 되었습니? ...
1. Getting Started Arduino UNO Example Projects
2. Getting Started ATmega128A Example Projects
3. Getting Started Arduino project
4. How to update a library
5. How to Install the Easy Flow Studio 2015
6. How to Download the Easy Flow Studio 2015
7. ATMEGA128 atmega2561 32키이 메트릭스 소스
8. ATMEGA128 atmega2561 8CH LED 소스
9. ATMEGA128 atmega2561 4CH 릴레이 소스
10. AVRSTUDIO에서 AVRISP Frequency 설정하는 방법입니다.
11. AVRISP COM1..8 범위로 설정하는 방법입니다.
12. ATMEGA128 atmega2561 시계용 FND 소스
13. ATMEGA128 atmega2561 4키이 소스
14. ATMEGA128 atmega2561 16키이 메트릭스 소스
15. ATMEGA128 atmega2561 그래픽 LCD 소스
16. ATMEGA128 atmega2561 그래픽폰트 소스
17. ATMEGA128 atmega2561 문자형 LCD 소스
18. 부트메가를 사용하는 방법입니다.
19. 비주얼스튜디오 2005, 2008 에서 컴파일 에러시 조치방법.
20. 비주얼스튜디오(Visual studio) 2010 에서 Prof-UIS 빌드 에러시 조치방법.
21. Visual Studio 2003 을 설치시 윈도우비스타 및 윈도우 7 에서devenv.exe 호환성 메세지.
22. 윈도우XP에서 닷넷프레임워크 다시 설치시 에러에 대한 내용.
23. AVRSTUDIO4 를 설치하는 방법입니다.
24. WINAVR 을 설치하는 방법입니다.
25. 윈도우7에서 이지플로우스튜디오를 설치하는 방법에 대하여 설명합니다.
26. 웹사이트에서 이지플로우스튜디오를 다운로드하는 방법에 대하여 설명합니다.
27. 윈도우XP에서 닷넷프레임워크설치에러에 대한 내용입니다.
28. 구글크롬에서 WMV 동영상 파일이 재생되지 않을때 해결방법입니다.
29. 트랜스 평활콘덴서 용량선정법입니다.
30. 디오의 카운터변수 구조에 대한 설명입니다.
  AVR 소스코드  

/*
///////////////////////////////////////////////////////////////////////////////

    ATMEGA 128, 2561 KEY Library V.1.0

    1st v.1.0   :	2011년 9월 23일
	  제작자  	  :	(주)이지플로우

///////////////////////////////////////////////////////////////////////////////
*/


#ifdef  EF_KEY4BY4

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// 메트릭스 4BY4 포트를 정의합니다.
// Matrix KEY 4BY4 : 16 Keys
// Key data Input:Bit 0,1,2,3 
// Row     Output:Bit 4,5,6,7
#define KEY4BY4_DATAIN 	    (PINB)
#define KEY4BY4_DATA  	    (PORTB)
#define KEY4BY4_DATA_DIR    (DDRB)

#define KEY4BY4_ROW_BIT0	CLEARBIT  (KEY4BY4_DATA, 4)
#define KEY4BY4_ROW_BIT1	CLEARBIT  (KEY4BY4_DATA, 5)
#define KEY4BY4_ROW_BIT2	CLEARBIT  (KEY4BY4_DATA, 6)
#define KEY4BY4_ROW_BIT3	CLEARBIT  (KEY4BY4_DATA, 7)

#define KEY4BY4_DIR_BIT0	SETBIT  (KEY4BY4_DATA_DIR, 4)
#define KEY4BY4_DIR_BIT1	SETBIT  (KEY4BY4_DATA_DIR, 5)
#define KEY4BY4_DIR_BIT2	SETBIT  (KEY4BY4_DATA_DIR, 6)
#define KEY4BY4_DIR_BIT3	SETBIT  (KEY4BY4_DATA_DIR, 7)

#define KEY4BY4_ROW_INIT	( (1<<4)|(1<<5)|(1<<6)|(1<<7) )


#define KEY4BY4_KEY_DEBOUNCE  	   (  20/4) //  20ms
#define KEY4BY4_KEY_DEBOUNCE_LONG  (1000/4) //2000ms

// newkeyData16 에 내용이 있으면 처리합니다.
// newLongKeyData16 에 내용이 있으면 처리합니다.

///////////////////////////////////////////////////////////////////////////////
//Interrupt KeyScan key-matrix 4 by 4
//인터럽트에서 4*4 키이 메트릭스 스캔 입력을 받습니다.
//스캔 주기는 1초에 100번 (10ms)로 호출합니다.

unsigned char IntKeyData[4],         oldIntKeyData[4];
unsigned char newIntKeyData[4],      newLongIntKeyData[4];
unsigned char cntIntKeyDebounce[4];
unsigned int  cntIntKeyDebounceLong[4];
unsigned char cntIntKeyRow,flagIntKeyRun;

void IntCheckKey (void )
{
  //4비트 입력을 부논리로 받습니다.
  IntKeyData[cntIntKeyRow] = (KEY4BY4_DATAIN ^ 0x0F) & 0x0F;
  
  //새로 입력 받은 키이가 같은지 비교합니다.
  if ( IntKeyData[cntIntKeyRow] == 0 ) { oldIntKeyData[cntIntKeyRow]=0; return; }
    
  if ( IntKeyData[cntIntKeyRow] != oldIntKeyData[cntIntKeyRow] )
  { 
    oldIntKeyData[cntIntKeyRow]         = IntKeyData[cntIntKeyRow];
    cntIntKeyDebounceLong[cntIntKeyRow] = KEY4BY4_KEY_DEBOUNCE_LONG; 
    cntIntKeyDebounce[cntIntKeyRow]     = KEY4BY4_KEY_DEBOUNCE;  
  }
  else
  { 
    
    if (cntIntKeyDebounce[cntIntKeyRow] != 0)
    {
      cntIntKeyDebounce[cntIntKeyRow]--;
      if (cntIntKeyDebounce[cntIntKeyRow] == 0)
      { 
        newIntKeyData[cntIntKeyRow] = IntKeyData[cntIntKeyRow];
        flagIntKeyRun = 1;
      }
    }
    
    if (cntIntKeyDebounceLong[cntIntKeyRow] != 0)
    {
      cntIntKeyDebounceLong[cntIntKeyRow]--;
      if (cntIntKeyDebounceLong[cntIntKeyRow] == 0)
      { 
        newLongIntKeyData[cntIntKeyRow] = IntKeyData[cntIntKeyRow];
        flagIntKeyRun = 2;
      }
    }    
  }
}

void IntKeyScan4by4 (void )
{
  cntIntKeyRow &= 0x03;
  IntCheckKey();
  
  KEY4BY4_DATA = KEY4BY4_ROW_INIT;
  KEY4BY4_DATA_DIR = 0x0;  //all input
  
  cntIntKeyRow ++;
  cntIntKeyRow &= 0x03;
  
       if ( cntIntKeyRow == 0 ) { KEY4BY4_ROW_BIT0; KEY4BY4_DIR_BIT0; }
  else if ( cntIntKeyRow == 1 ) { KEY4BY4_ROW_BIT1; KEY4BY4_DIR_BIT1; }
  else if ( cntIntKeyRow == 2 ) { KEY4BY4_ROW_BIT2; KEY4BY4_DIR_BIT2; }
  else                          { KEY4BY4_ROW_BIT3; KEY4BY4_DIR_BIT3; }
  
}


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

//Key NO: k15 k14 k13 k12 k11 k10 k9 k8 k7 k6 k5 k4 k3 k2 k1 k0
//BIT   : 15  14  13  12  11  10  9  8  7  6  5  4  3  2  1  0
unsigned char KeyNumber;
unsigned char LongKeyNumber;

unsigned char CheckKEY4By4( unsigned char i, unsigned char j)
{
  i = newIntKeyData[i];
  
  if ( (i&0x01) != 0 ) { return j+1; }
  if ( (i&0x02) != 0 ) { return j+2; }
  if ( (i&0x04) != 0 ) { return j+3; }
  if ( (i&0x08) != 0 ) { return j+4; }
   
  return 0;
}
unsigned char CheckLongKEY4By4( unsigned char i, unsigned char j)
{
  i = newLongIntKeyData[i];
  
  if ( (i&0x01) != 0 ) { return j+1; }
  if ( (i&0x02) != 0 ) { return j+2; }
  if ( (i&0x04) != 0 ) { return j+3; }
  if ( (i&0x08) != 0 ) { return j+4; }
   
  return 0;
}


void RunKey4by4 (void )
{
  unsigned char j;
  
  KeyNumber = 0;
  LongKeyNumber = 0;
  
  if (flagIntKeyRun == 1)
  {
    j = CheckKEY4By4(0,0);  if(j!=0) { KeyNumber =  j;  goto RunKey4by4lp; }
    j = CheckKEY4By4(1,4);  if(j!=0) { KeyNumber =  j;  goto RunKey4by4lp; }
    j = CheckKEY4By4(2,8);  if(j!=0) { KeyNumber =  j;  goto RunKey4by4lp; }
    j = CheckKEY4By4(3,12); if(j!=0) { KeyNumber =  j;  goto RunKey4by4lp; }
    
    RunKey4by4lp:
    newIntKeyData[0] = 0;
    newIntKeyData[1] = 0;
    newIntKeyData[2] = 0;
    newIntKeyData[3] = 0;
  }
  

    
  if (flagIntKeyRun == 2)
  {
    j = CheckLongKEY4By4(0,0);  if(j!=0) { LongKeyNumber =  j;  goto RunKey4by4lp2; }
    j = CheckLongKEY4By4(1,4);  if(j!=0) { LongKeyNumber =  j;  goto RunKey4by4lp2; }
    j = CheckLongKEY4By4(2,8);  if(j!=0) { LongKeyNumber =  j;  goto RunKey4by4lp2; }
    j = CheckLongKEY4By4(3,12); if(j!=0) { LongKeyNumber =  j;  goto RunKey4by4lp2; }
  
    RunKey4by4lp2:

    newLongIntKeyData[0] = 0;
    newLongIntKeyData[1] = 0;
    newLongIntKeyData[2] = 0;
    newLongIntKeyData[3] = 0;
  }
        
  flagIntKeyRun = 0;
}
  
///////////////////////////////////////////////////////////////////////////////


#endif
㈜이지플로우 기술개발부  
AVR 소스코드   

      

    

에스크로 가입 여부를 확인합니다.