Я хочу напечатать многомерный массив символов на ЖК-дисплее в 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 не поддерживает или не знает.

Другие вопросы по тегам