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;
}
|
** 기타 파일들은 지난 시간에 올린 것과 동일