Показаны сообщения с ярлыком mikropascal lcd_out. Показать все сообщения
Показаны сообщения с ярлыком mikropascal lcd_out. Показать все сообщения

суббота, 30 января 2016 г.

И о замене Lcd_Out (MikroPascal)

Обещанный код для замены:

// Lcd_Out_N – замена штатной процедуры Lcd_Out библиотеки Lcd
// row - номер строки
// column - номер позиции в строке
// msg - строка как символьный массив [0..255]
// max_len - максимальная длина строки (для формата 0..x, т.е. для string[4] будет не 5, а 4
procedure Lcd_Out_N(row,column:byte; msg:^byte; max_len:byte);
var
 i : byte;
begin
 i := 0;
 while (msg^ <> 0) and (i < max_len) do
 begin
  if i = 0 then Lcd_Chr(row,column+i,msg^) else Lcd_Chr_CP(msg^);
  inc(msg);
  inc(i);
 end;
end;

// Lcd_Out_NC – замена штатной процедуры Lcd_Out библиотеки Lcd для констант
// row - номер строки
// column - номер позиции в строке
// msg - строка как символьный массив [0..255]
// max_len - максимальная длина строки (для формата 0..x, т.е. для string[4] будет не 5, а 4
procedure Lcd_Out_NC(row,column:byte; const msg:^byte; max_len:byte);
var
 i : byte;
begin
 i := 0;
 while (msg^ <> 0) and (i < max_len) do
 begin
  if i = 0 then Lcd_Chr(row,column+i,msg^) else Lcd_Chr_CP(msg^);
  inc(msg);
  inc(i);
 end;
end;

вторник, 26 января 2016 г.

mikroPascal: снова о выводе строк через Lcd_Out

Надо признать: я был тогда излишне самонадеян и горд. Опять поймал странные иррегулярные глюки, на сей раз с PWM и PID (тип (а) отсутствие нагрева; тип (б) неконтролируемый нагрев). Отключил вывод баннеров через Lcd_Out – похоже, нормализовалось. Так что ранее предложенные мной меры эту болезнь, увы, не лечат, а всего лишь загоняют ее еще дальше вглубь. М-да.

Поэтому советую использовать посимвольный вывод: либо напрямую (используя Lcd_Chr и Lcd_Chr_Cp), либо через массив-буфер (используя Lcd_Cmd и Lcd_Chr_Cp).