ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
440611 Топик полностью
Белый Жрец (11.09.2013 09:56 - 09:59, просмотров: 97) ответил Mazur на Все. На данный момент застрял.
как вариант на обработчике прерывания таймера:   {/// Обработка LCD -------------------------------------------------------------------- if(LcdStep==0){ // проверяем тут не в case - чтобы не делать лишнего вызова по прерыванию - обработка смвола занимает 3 вызова (3мс) if(labs(Gol-Hv)>0){ // если что есть выводить - выводим Stt=STT_Wrk; // работаем LcdMode=Buf[Hv++]; // изымаем перемещаем голову Hv%=BufMax; // если что - заворачиваем хвост if (LcdMode<=0x1E) { LcdStep=1; } // исполняем команду else if (LcdMode==0x1F) { LcdStep=0; Set1ms(); } // задержка 1мс else LcdStep=2; // вывод символа } else Stt=STT_Rdy; // всё вывели } switch(LcdStep){ case 1: RS0(); LcdStep=3; break; case 2: RS1(); LcdStep=3; break; case 3: EN1(); DB(kod[LcdMode]); LcdStep=4; break; // вывод через таблицу case 4: EN0(); LcdStep=0; break; } } u8 Lcd_Out(u8 *buf){ // вывод на дисплей текстовой строки if(labs(Gol-Hv)<BufMax-40){ // если длина позволяет (подразумеваем что вывод не более 40ка символов) while(*buf){ // mod Buf[Gol++]=*buf++; // присваиваем перемещая голову Gol%=BufMax; // если что - заворачиваем голову } } return (BufMax-labs(Gol-Hv)); // возвращаем остаток в буфере } LcdOut("\x01Ошибка передачи \x02Смените позицию.");