Я хочу напечатать многомерный массив символов на ЖК-дисплее в C51 (Keil)
(Массив инициализируется кучей символов)
Я также получаю сообщение об ошибке "Сегмент данных слишком большой", когда я увеличиваю массив. Как скопировать массив из "КОДА" в "XDATA"? или это не проблема?
РЕДАКТИРОВАТЬ: Также, когда я вызываю функцию таким образом, lcd пропускает элемент [i] [] в массиве и печатает следующий элемент [i].
Любая помощь, я был бы очень признателен.
unsigned char piece [4] [8];
lcd_msg_write(piece[0]); //rank
lcd_write(SecondLine);
lcd_msg_write(piece[1]);
lcd_write(SecondLine);
lcd_msg_write(piece[2]);
lcd_write(SecondLine);
lcd_msg_write(piece[3]);
lcd_write(SecondLine);
void lcd_msg_write(char * ptr2)
{
int x;
RS = 1;
for (x=0; x<8;x++)
lcd_write(*ptr2++); //write till end of string reached
RS = 0;
}
void lcd_write(unsigned char display_data)//LCD 1 {
EN = 1;
P0 = display_data;
EN = 0;
delay_5msec(); //delay to allow write operation to complete
}
2 ответа
Я думаю, что проблема возникает из-за char * ptr2.try unsigned char * вместо char *
Вы можете поместить переменную в XDATA следующим образом:
unsigned char xdata variable;
РЕДАКТИРОВАТЬ: Также, когда я вызываю функцию таким образом, lcd пропускает элемент [i] [] в массиве и печатает следующий элемент [i].
Если я правильно понимаю, я полагаю, у вас есть какое-то значение, например, 0 в вашем массиве, поэтому он может пропустить это. Если вы покажете реальный результат (в текстовом виде), я мог бы рассказать вам больше информации. Но что касается правильности кода, все в порядке. Это также может быть таблица символов LCD, поэтому вы пишете неправильный символ, который LCD не поддерживает или не знает.