본문 바로가기
코스웨어/12년 내장형하드웨어

[0823]back space 기능 추가입니다.

by 알 수 없는 사용자 2012. 8. 23.
728x90
반응형

int main()
{
  unsigned char ucchar;
  unsigned int iLCDcnt=0;
  Init();  
  
  while(1)
  {
    ucchar=DBGU_RCHAR();
    if(0x08==ucchar)//backspace check
    {
      if(iLCDcnt==0)//0 position check
      {
        LCD_POSITION(iLCDcnt);
      }
      else if(iLCDcnt==0x40)//position 40에서 16으로  iLCDcnt 도 40에서 16
      {
        iLCDcnt=0x10;
        --iLCDcnt;
        LCD_POSITION(iLCDcnt);
        LCD_DATA(' ');
      }  
      else
      {
        --iLCDcnt;//앞자리 LCD_cnt 값으로 변경 
        LCD_POSITION(iLCDcnt);//커서 앞자리 이동
        LCD_DATA(' ');//빈칸 출력 
        
      }
      
    }
    else//문자 입력 
    {
      LCD_POSITION(iLCDcnt);//iLCD_cnt값을 이용한 position정함 
      LCD_DATA(ucchar);//문자 출력
      ++iLCDcnt;//position 증가 
    }

    if(iLCDcnt>0x50)//LCD출력  over 되면 화면 리셋 
    {
      LCD_CLEAR();
      LCD_RETURN();
      iLCDcnt=0;//커서 1line 1번으로 이동하기 위해 iLCDcnt 조정
      LCD_POSITION(iLCDcnt);
      LCD_DATA(ucchar);//화면 리셋되면서 쓰여진 문자 출력
      ++iLCDcnt;
    }
    else if(iLCDcnt==0x10)// 1line 출력이 over 되면 2line으로 넘어감
    {
      iLCDcnt=0x40;//커서 2line 1번으로 이동하기 위해 iLCDcnt 조정 
    }
    
  }
  return 0;
}

-----------------------------------------------------------------------------------------------------------------------------------------크게 두가지 if문이 쓰이는데 일단 백스페이스가 입력되는지 아니면 다른 문자가 입력되는지 확인하는if문

또하나는 라인이 오버되어 줄을 바꿔야되는지 확인하는 if문으로 구성되어있습니다.

나머지 조건은 주석에 적어놓았습니다. 중요한점은 iLCDcnt값과 실제 LCD DDRAM주소의값이 일치해야된다는 점입니다.

-----------------------------------------------------------------------------------------------------------------------------------------


728x90