Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Как передать двумерный массив HiTech PICC

Чт апр 12, 2018 13:50:42

Доброго дня.
HT PICC18 9.83, MPLAB8.87, PIC18F25K22.
Для вывода изображений на экран LCD используется стандартная процедура перебора колонок и строк 64х64. В соответствии с этим созданы 2хмерные массивы изображений со своими названиями но одинакового размера - точно под экран LCD.
При изменении ситуации надо выдать ту или иную картинку на экран.
В идеале так:
Код:
Const char Ekran1 [64][64]
{ {0x00,........0x63} // 1 строка
.....
{0x00,........} // 64 cтрока
};
Const char Ekran2 [64][64]
{ {0x00,........0x63} // 1 строка битовых данных
.....
{0x00,........} // 64 cтрока
};
WriteLCD(Ekran1); // выдали первый экран
DelaySec(3); // пауза
WriteLCD(Ekran2); // выдали второй экран
DelaySec(3);
....
....
....

Процедура вывода:
Код:
for(p=0; p<8; p++) //Цикл по всем 8-ми страницам индикатора
{
WriteCode6464(p|0xB8);//Установка текущей страницы
WriteCode6464(0x40);//Установка текущего адреса для записи данных в 0
for(c=0; c<64; c++) //Цикл вывода данных
{
WriteData6464(Ekran1[p][c]);//Вывод очередного байта в индикатор
};
};

Как можно это сделать? Понимаю что через указатели - но не соображу... Грустный

Re: Как передать двумерный массив HiTech PICC

Чт апр 12, 2018 14:03:26

https://yandex.ru/yandsearch?clid=19230 ... D0%B8&lr=2
10 секунд и результат готов...

Re: Как передать двумерный массив HiTech PICC

Чт апр 12, 2018 15:45:51

В простом С да, но в контроллерном ( HiTech PICC) далеко не всё так просто. Многие приёмы не работают, так как это не такой уж "настоящий" С/С++

Re: Как передать двумерный массив HiTech PICC

Чт апр 12, 2018 19:23:15

Покажите, что конкретно "не работает" ?

Re: Как передать двумерный массив HiTech PICC

Чт апр 12, 2018 20:32:17

Попробуйте такой вариант:
Код:
#include <pic.h>

volatile const unsigned char ekran1[2][2] = {{1,2},{3,4}};
volatile const unsigned char ekran2[2][2] = {{5,6},{7,8}};

char Add(const unsigned char a[][2])
{
   return(a[1][1]);
}

void main(void)
{
   while(1)
   {
      TMR1L = 0x33;
      TMR1H = 0x22;
      TMR1L = Add(ekran1);
      TMR1H = Add(ekran2);
   }
}
Возможно проблема в отсутствии const в параметре функции.
Проверял на версии 9.50 (PIC16F628A)
Ответить