📄 time.c
字号:
/*****************************************************************************/
#include "time.h"
#include "GUI.h"
/*****************************************************************************/
INT8U Hour=12;
INT8U Minute=0;
INT8U Second=0;
INT8U Count2=0;
// Target : M64
// Crystal: 16.000Mhz
//TIMER2 initialize - prescale:1024
// WGM: Normal
// desired value: 10mSec
// actual value: 9.984mSec (0.2%)
void timer2_init(void)
{
#if DATE_TIME_EN==1
INT8U *time=__TIME__;
INT8U buffer[6];
#endif
TCCR2 = 0x00; //stop
TCNT2 = 0x64; //setup
OCR2 = 0x9C;
TCCR2 = 0x05; //start
#if DATE_TIME_EN==1
buffer[0]=time[0]-'0';
buffer[1]=time[1]-'0';
buffer[2]=time[3]-'0';
buffer[3]=time[4]-'0';
buffer[4]=time[6]-'0';
buffer[5]=time[7]-'0';
Hour =buffer[0]*10+buffer[1];
Minute=buffer[2]*10+buffer[3];
Second=buffer[4]*10+buffer[5];
#endif
TIMSK |= 0x40; //timer interrupt sources
}
#pragma interrupt_handler timer2_ovf_isr:11
void timer2_ovf_isr(void)
{
TCNT2 = 0x64; //reload counter value
Count2++;
if(Count2>99)
{
Count2=0;
Second++;
}
if(Second>59)
{
Second=0;
Minute++;
}
if(Minute>59)
{
Minute=0;
Hour++;
}
if(Hour>23)
Hour=0;
}
INT16U fs_getDate(void)
{
#if DATE_TIME_EN==0
return(0);
#else
INT8U month,date ;
INT16U year ;
INT16U res,res1,res2;
year=time_getYear()-1980 ;
month=time_getMonth();
date=time_getDay();
res=( (year>127)?127:(year&0x3F) );
res=res<<9;
res1=( (month==0||month>12)?1:(month&0xF) );
res1=res1<<5;
res2=( (date==0||date>31)?1:(date&0x1F) );
res=res+res1+res2;
return res;
#endif
}
/*****************************************************************************/
INT16U fs_getTime(void)
{
#if DATE_TIME_EN==0
return(0);
#else
INT8U second,minute,hour ;
INT16U res,res1,res2;
second=time_getSecond();
minute=time_getMinute();
hour=time_getHour();
res=( (hour>23)?0:(hour&0x1F) );
res=res<<11;
res1=( (minute>59)?0:(minute&0x3F) );
res1=res1<<5;
res2=( (second>59)?0:(second-second%2)/2 );
res=res+res1+res2;
return res;
#endif
}
#if DATE_TIME_EN==1
INT16U fs_getYear(void)
{
return 2008;
}
INT8U fs_getMonth(void)
{
return 5;
}
INT8U fs_getDay(void)
{
return 20;
}
INT8U fs_getHour(void)
{
return Hour;
}
INT8U fs_getMinute(void)
{
return Minute;
}
INT8U fs_getSecond(void)
{
return Second;
}
extern INT8U LCD_PenColor;
//液晶显示日期、时间
void GUI_Display_Time(INT8U x0,INT8U y0)
{
INT8U time[9];
time[0]=fs_getHour()/10+'0';
time[1]=fs_getHour()%10+'0';
time[2]=':';
time[3]=fs_getMinute()/10+'0';
time[4]=fs_getMinute()%10+'0';
time[5]=':';
time[6]=fs_getSecond()/10+'0';
time[7]=fs_getSecond()%10+'0';
time[8]='\0';
LCD_PenColor = 0b11111100; //blue
//GUI_DispStringAt(__DATE__,20,16);
GUI_DispStringAt(&time[0],x0,y0);
//LCD_PenColor = 0b00011111; //red
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -