Страница 1 из 1

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

Добавлено: Чт апр 12, 2018 13:50:42
PupaJr
Доброго дня.
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
Аlex
https://yandex.ru/yandsearch?clid=19230 ... D0%B8&lr=2
10 секунд и результат готов...

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

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

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

Добавлено: Чт апр 12, 2018 19:23:15
Аlex
Покажите, что конкретно "не работает" ?

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

Добавлено: Чт апр 12, 2018 20:32:17
technik-1017
Попробуйте такой вариант:

Код: Выделить всё

#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)