⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.c

📁 Atmega64单片机程序(完整工程)
💻 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 + -