Busan IT/AVR 컨트롤러2015. 5. 14. 11:50

6비트 타이머/카운터 시계

================================ Outline ====================================

16비트 타이머/카운터 시계

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

 

지난 시간에 이어 시간 부분까지 코딩을 하여 디지털 시계를 만들어보자.


 

TCNT레지스터와 분주비를 활용하여 인터럽트를 동작 시간을 설정하고 나면 시계 동작에 대한 코딩은 이미 학습한 내용임으로 간단하다.

 

/*** 코딩 ***/

#include "SMART.h"
#include "LCD.h"

#define init 48 //48 = '0', 50 = '2', 52 = '4', 54 = '6',  57 = '9'
#define hour2 49
#define hour1 49
#define min2 56
#define min1 51



// 시간 define하여 입력 //

unsigned char ucHour2 = hour2;
unsigned char ucHour1= hour1;
unsigned char ucMin2 = min2;
unsigned char ucMin1 = min1;
unsigned char ucSec2 = init;
unsigned char ucSec1 = init;




int main(void)
{
  /* 변수 설정 */

  
  /* PORT 설정 */
  DDRC = 0xFF;
  DDRG = 0xFF;


  /*  레지스터 설정 */

  // 16 BIT Timer/Counter //

  TCCR1A   = 0X00;//0B 0000 0000 -> NORMAL MODE, NO PWM MODE
  TCCR1B   = 0X84;//0B 1000 0001 -> FALLING EDGE, NORMAL MODE, 1 분주
  TCCR1C  = 0X00;//0B 0000 0000 -> BLOCK COMPARE MODE
  TCNT1H  = 0X00;//0B 0000 0000 -> START FROM 0
  TCNT1L  = 0X00;//0B 0000 0000 -> START FROM 0
  TIMSK1   = 0X01;// 0B 0000 0001 -> OVERFLOW REGISTER ENABLE
  TIFR1  = 0X00;// 0B 0000 0000 ->BIT CLEAR, FLACK BIT CLEAR
  SREG   |=0X80;// 0B 1000 0000 -> GLOBAL INTERRUPT ENABLE

  TCNT1H = TCNT1L >> 8;

    
  
  while(1)
  {  

    ;
    
  }

  return 0;
}

void __vector_20(void)
{
  LCD_Init();
  LCD_PRINT("   DIGITAL WATCH");
  LCD_INST(0xC3);
 
  LCD_Data('[');
  LCD_Data(ucHour1);
  LCD_Data(ucHour2);
  
  LCD_Data(':');
  LCD_Data(ucMin1);
  LCD_Data(ucMin2);
  
  LCD_Data(':');
  LCD_Data(ucSec1);
  LCD_Data(ucSec2);
  LCD_Data(']');  

  ++ucSec2;
  
  if(ucSec2==58)
    ++ucSec1;
  
  if((ucSec1==54& (ucSec2 ==58))
    ++ucMin2;

  if(ucMin2==58)
    ucMin1++;
  
  if((ucMin1 == 54& (ucMin2 == 58))
    ++ucHour2;
  
  if(ucHour2 == 58)
    ++ucHour1;
  

  if((ucHour1==50)  & (ucHour2==52))
  {
    ucHour1=48;
    ucHour2=48;
  }

  if(ucHour2==58)
    ucHour2=48;
  
  if(ucMin1 == 54)
    ucMin1=48;

  if(ucMin2==58)
    ucMin2=48;
  
  if(ucHour2==58)
    ucHour2=48;
  
  if(ucSec1 == 54)
    ucSec1=48;

  if(ucSec2==58)
    ucSec2=48;

}


** 기타 파일들은 지난 시간에 올린 것과 동일 




 

 

반응형
Posted by newind2000