예제 #1
0
void datetime(char *buffer, time_s time){
	int days = day(time);
	int years = year(days);
	int leap = isLeapYear(years);
	int dayofyear = dayOfyear(days,years);
	int months = month(dayofyear,leap);
	int dayofmonth = dayOfmonth(dayofyear,months,leap);
	int dayofweek = dayOfweek(2000+years,months,dayofmonth);
	time_s dayseconds = time%86400;
	*buffer = daysoftheweek[dayofweek][0];
	buffer++;
	*buffer = daysoftheweek[dayofweek][1];
	buffer++;
	*buffer = daysoftheweek[dayofweek][2];
	buffer++;
	*buffer = ' ';
	buffer++;
	*buffer = '2';
	buffer++;
	*buffer = '0';
	buffer++;
	*buffer = tostring[years][0];
	buffer++;
	*buffer = tostring[years][1];	
	buffer++;
	*buffer = '/';
	buffer++;
	*buffer = tostring[months][0];
	buffer++;
	*buffer = tostring[months][1];
	buffer++;
	*buffer = '/';
	buffer++;
	*buffer = tostring[dayofmonth][0];
	buffer++;
	*buffer = tostring[dayofmonth][1];
	buffer++;
	*buffer = ' ';
	buffer++;
	int hours = dayseconds/3600;
	*buffer = tostring[hours][0];
	buffer++;
	*buffer = tostring[hours][1];
	buffer++;
	*buffer = ':';
	buffer++;
	int minutes = (dayseconds%3600)/60;
	*buffer = tostring[minutes][0];
	buffer++;
	*buffer = tostring[minutes][1];
	buffer++;
	*buffer = ':';
	buffer++;	
	int secs = dayseconds%60;
	*buffer = tostring[secs][0];
	buffer++;	
	*buffer = tostring[secs][1];
	buffer++;	
	*buffer ='\0';
}
예제 #2
0
BOOL	EditClockDate( uint16_t yx, uClock * pClock )
{
    CHAR  	sbuffer[20];
    struct tm t_tm;
    uint16_t	year;
    uint8_t 	month;
    uint8_t 	day_m;
    uint8_t 	option = 1u;
    uint16_t gray  = Configure.DisplayGray;
    BOOL graychanged = FALSE;

    _localtime_r( pClock, &t_tm );
    year  = t_tm.tm_year + 1900;
    month = t_tm.tm_mon  + 1;
    day_m = t_tm.tm_mday;

    for(;;)
    {
        sprintf( sbuffer, "%04u-%02u-%02u", year, month, day_m );
        Lputs( yx, sbuffer );

        switch( option )
        {
        case 1:
            LcmMask( yx  , 4 );
            break;	// year
        case 2:
            LcmMask( yx+5, 2 );
            break;	// month
        case 3:
            LcmMask( yx+8, 2 );
            break;	// day_m
        default:
            break;
        }
        switch( getKey() )
        {
        case K_INC:
            switch( option )
            {
            case 1:
                if ( ++year > 2099u )
                {
                    year = 2000u;
                }
                break;
            case 2:
                if ( ++month > 12u )
                {
                    month = 1u;
                }
                break;
            case 3:
                if ( ++day_m > dayOfmonth( year, month ))
                {
                    day_m = 1u;
                }
                break;
            default:
                break;
            }
            break;

        case K_DEC:
            switch(  option )
            {
            case 1:
                if ( --year < 2000u )
                {
                    year = 2099u;
                }
                break;
            case 2:
                if ( --month < 1u )
                {
                    month = 12u;
                }
                break;
            case 3:
                if ( --day_m < 1u )
                {
                    day_m = dayOfmonth( year, month );
                }
                break;
            default:
                break;
            }
            break;

        case K_RIGHT:
            if ( ++option > 3u )
            {
                option = 1u;
            }
            break;

        case K_LEFT:
            if ( --option < 1u )
            {
                option = 3u;
            }
            break;

        case K_OK:
            t_tm.tm_year = year  - 1900;
            t_tm.tm_mon  = month - 1;
            t_tm.tm_mday = day_m;
            * pClock = mktime( &t_tm );
            return	TRUE;

        case K_ESC:
            return	FALSE;

        case K_OK_RIGHT:
            if ( gray < ( 2000u - 50u ))
            {
                gray += 100u;
            }
            graychanged = true;
            break;
        case K_OK_LEFT:
            if ( gray > ( 200 + 20u ))
            {
                gray -= 20u;
            }
            graychanged = true;
            break;
        default:
            break;
        }
        if( graychanged == true )
        {
            DisplaySetGrayVolt( gray * 0.01f );
            Configure.DisplayGray = gray;
            ConfigureSave();
            graychanged = FALSE;
        }
    }
}