Цитата(aaarrr @ Jul 31 2008, 09:47)

Похоже, что с инициализацией ЖКИ у Вас что-то не то.
Хотя, что значит "вытягиваю строки из флеша" - флеш внешний?
Вот инициализация ЖК:
Код
//Функция инициализации ЖКИ
void LCDinit(void){
PAUSE_US(15000); // ~15 ms
write_LCD(0x30, 0);
PAUSE_US(5500); // ~5,5 ms
write_LCD(0x30, 0);
PAUSE_US(250); // ~250 us
write_LCD(0x30, 0);
BFcontrol();
write_LCD(0x01, 0); //очистка экрана
BFcontrol();
write_LCD(0x28, 0); //выбираем 4-х разрядную шину, размер символа 5х8, развертка в 2 строки
BFcontrol();
write_LCD(0x0C, 0); //дисплей включен, курсор никак не отображаем /E
BFcontrol();
write_LCD(0x06, 0); //Перемещает курсор вправо, счетчик адреса инкрементируется
BFcontrol();
write_LCD(0x02, 0); //AC=0
BFcontrol();
write_LCD(0x01, 0); //очистка экрана
}
А вот как меню организовано:
Код
__flash const byte s0[]=" MASTER ";
__flash const byte s1[]=" v-0.1a ";
__flash const byte s2[]=" Журнал ";
__flash const byte s3[]=" работы ";
__flash const byte s4[]="Конфиг. ";
__flash const byte s5[]="системы ";
__flash const byte s6[]=" Ручной ";
__flash const byte s7[]=" режим ";
__flash const byte s8[]="Текущие ";
__flash const byte s9[]="настр-ки";
и т.д.
/*Структуры всех пунктов меню*/
struct MENU{
__flash const byte *st1;
__flash const byte *st2;
const byte next;
const byte func;
}__flash mas[]={
s0, //0
s1, // " MASTER "
1, // " v-0.1a "
0x00,
s2, //1
s3, // " Журнал "
0, // " работы "
0x00,
s4, //2
s5, // "Конфиг. "
4, // "системы "
0x08,
s6, //3
s7, // " Ручной "
0, // " режим "
0x09,
s8, //4
s9, // "Текущие "
2, // "настр-ки"
0x0A,
и т.д.
//Вывод текущей информации на ЖКИ
void DISPLAY(void){
static byte buf=0xFF;
if(buf!=Current_Punkt){
buf=Current_Punkt;
ChType(1,1, (mas[Current_Punkt].st1));
ChType(2,1, (mas[Current_Punkt].st2));
}
else if(permit>0){
buf=Current_Punkt;
ChType(1,1, (mas[Current_Punkt].st1));
ChType(2,1, (mas[Current_Punkt].st2));
permit--;
}
NextPunkt=mas[Current_Punkt].next;
Function=mas[Current_Punkt].func;
}
void ChType(byte x, byte y, byte const __flash *str){
byte i=0;
byte buf[8];
while (str[i]!='\0'){
buf[i]=str[i];
i++;
}
Out_LCD(x,y, buf);
}
По меню я передвигаюсь с помощью двумерного массива, в котором записаны номера пунктов меню из __flash mas[].