Сделайте так, и всё у вас будет работать:
void read_mem(){
int iter;
unsigned char now;
char char1[4];
for (iter=0; iter<=7;iter++){
now = RX();
memory[iter] = now;
sprintf (char1, "%02X", now);
lcd_display(char1);
ms_delay(300);
}
А именно:
- замените char на unsigned char, чтобы избежать знакового расширения при преобразовании в int при передаче в sprintf;
- добавьте 0 в форматную строку, чтобы значения 0...9 отображались как 00 ... 09.
К тому же ваш char2 не закрыт нулём в конце, так что lcd_display вам может всякого навыводить.