본문 바로가기
코스웨어/16년 스마트컨트롤러

20160317_김가연_업무일지_LCD 시간 출력

by 알 수 없는 사용자 2016. 3. 18.
728x90
반응형

오늘은 LCD시간출력을 해보았습니다.

일단 소스코드를 고칩니다.

프로젝트에

tc0.c와 tc0.h를 추가합니다.

tc0.c에 함수하나를 추가합니다.

 

 

데이터 시트 115~133p를 참고하여 한땀한땀 적습니다.

 

『    

void TC0_Init(void)
{
  TCCR0B=(0<<FOC0A)|(0<<FOC0B)|(0<<WGM02)|(0<<CS02)|(1<<CS01)|(1<<CS00);
  OCR0A=250;
  TIMSK0=(0<<OCIE0B)|(1<<OCIE0A)|(0<<TOIE0);

}

전역변수를 추가합니다.

volatile unsigned int uiMsec;

새로운 함수하나를 추가합니다.

void __vector_21(void)
{
  ++uiMsec;//0.001초가 지나고 있다.

                                                                                』

 

 

++uiMsec이 0.001초니까 1000개를 ++하면 1초 입니다.

 

새로운 함수하나를 추가합니다.

void TC0_MSDelay(unsigned int uiDTime)
{
  if(uiDTime>1000)
  {
    uiDTime=1000;
  }//인자를 검사하는 코드
  
  
  uiMsec=0;
  
  while(uiMsec<uiDTime);//참인지 아닌지

}



 

0.001초를 1초로 만들어주는 코드입니다.

인자를 검사하는 코드는 꼭 추가하도록 합니다.

 

tc0.h 헤더파일에

void TC0_Init(void);

void TC0_MSDelay(unsigned int uiDTime);

를 추가합니다.

 

메인함수로 가서

변수 하나를 추가합니다.

char caTime[]="00:00:00";//글자출력

글자출력 변수입니다.

그리고 하나더 추가합니다.

volatile unsigned int uiSec;

기초값 설정을 할 변수입니다.

 

  LCD_Init();
  TC0_Init();
  sei();

  uiSec=0;

 

lcd.c , tc0.c , main.h 에있는 함수들을 불러오고 기초값을 설정합니다.

 

그리고 while문 하나를 추가합니다

 

  while(1)//무한 while문
  {
    caTime[7]='0'+((uiSec%60)%10);
    caTime[6]='0'+((uiSec%60)/10);
    caTime[4]='0'+(((uiSec/60)%60)%10);
    caTime[3]='0'+(((uiSec/60)%60)/10);
    caTime[1]='0'+(((uiSec/60)/60)%10);
    caTime[0]='0'+(((uiSec/60)/60)/10);

    LCD_Inst(LCD_HOME);//제자리에 글자를 출력
    LCD_Str(caTime);
    TC0_MSDelay(1000);

    ++uiSec;
    
  }

이런식으로 초 , 분 , 시를 표시하게끔 하고 함수를 불러옵니다.

그리고 ++uiSec(uiSec=uiSec+1)를 합니다.

 

int main(void)
{  
  char caTime[]="00:00:00";//글자출력
  volatile unsigned int uiSec;

  LCD_Init();
  TC0_Init();
  sei();

  uiSec=32700;
  
  
  while(1)//무한 while문
  {
    caTime[7]='0'+((uiSec%60)%10);
    caTime[6]='0'+((uiSec%60)/10);
    caTime[4]='0'+(((uiSec/60)%60)%10);
    caTime[3]='0'+(((uiSec/60)%60)/10);
    caTime[1]='0'+(((uiSec/60)/60)%10);
    caTime[0]='0'+(((uiSec/60)/60)/10);

    LCD_Inst(LCD_HOME);//제자리에 글자를 출력
    LCD_Str(caTime);
    TC0_MSDelay(1000);

    ++uiSec;
    
  }
  return 0;
}

컴파일을 하고 실행시켜 봅니다.

 

 

 

이런식으로 동작이 됩니다.

 

 

 

728x90