Простая, казалось бы на первый взгляд задача... Но вот уже вторые сутки ломаю голову. Не могу придумать как это лучше сделать. Хочу, как в мобильном телефоне настраивать время. Вот мой кусок кода:
Код
void EditTime_Func(void)
{
unsigned char temp;
rtc_get_time(0x99); //значение времени в yr, mn, dt, dy, hr, min, sec
ClearScreen(); // display clear
GotoXY(0,0);
sprintf_P(lcd_buf,"%d/%d/%d %d %02d:%02d:%02d", yr, mn, dt, dy, hr, min, sec);
PutStr(lcd_buf);
w=CharWidth(*plcd_buf)-2;
start_Timer(TIMER_0, 500, blink, TIMER_CYCLE);
for(;;)
{
temp=key_get();
switch(temp) //key_code.scan
{
case LEFT: //k_esc
{......}
break;
case RIGHT: //k_enter
{......}
break;
case DOWN: //k_left
{......}
break;
case UP: //k_right
{......}
break;
default: // 0...9
{......}
break;
}
if(key_code.scan == LEFT) //выход из функции
{
stop_Timer(TIMER_0);
break;
}
}
}
//------------------------------------------------------------------------------
void blink(void)
{
InvertRect(x, y, w, 9);
}
Идея такая. Вывожу на экран значение времени в виде строки:
"2007/12/24 1 12:32:00"
Ф-ция start_Timer() запускает каждые 0,5 сек ф-цию blink(), которая в свою очередь инвертирует заданный прямоугольник. Т.е. должно мигать текущее знакоместо. Кнопками UP, DOWN выбираю следующее, предыдущее знакоместо. Ввод числа осуществляется с клавиатуры 4х4. Это все у меня работает. Проблема еще в том, что символы имеют переменную ширину. Поэтому после каждого ввода символа необходимо ,наверное, перерисовывать всю строку. После нажатия ENTER новые значения переменных необходимо записать в RTC. Как сделать ввод чисел только в заданные места, т.е. пропускать '/' , ' ' , ':' ? Меня не покидает чувство, что изобретаю велосипед.