Цитата(sensor_ua @ Sep 27 2007, 00:43)

А unsigned char k не пробовал?
Попробовал. Не помогло. Согласен что скорее всего все дело в переменной k, но как она нарушила довольно жесткий цикл пересчета:
void math_screen(unsigned char eds,unsigned char new_znach)
{
unsigned char i=0;
unsigned char mas_eds[4]={10,10,10,10};
if(eds>=100) mas_eds[0]=0; //Если число больше или равно сотни, то там явно будет число и надо убрать пробел
if(eds>=10) mas_eds[1]=0; //Если число больше или равно десяти, то там явно будет число и надо убрать пробел
if(eds!=0) mas_eds[2]=0; //Если число больше не равно нулю, то там явно будет число и надо убрать пробел
if(eds==0) mas_eds[2]=0;
for(i=0; i<eds; i++) //Разбиение числа на единицы, десятки и сотни
{
mas_eds[2]++;
if(mas_eds[2]==10){mas_eds[2]=0; mas_eds[1]++;}
if(mas_eds[1]==10){mas_eds[1]=0; mas_eds[0]++;}
}
for(i=0; i<4; i++) put_char (new_znach+i*8,60, mas_eds[i]);
}
Вызывается мат_скрин циклом:
unsigned char g=0;
for(g=0; g<5; g++)
{
math_screen(bt_word[g], 10+g*32);
}
Сам массив bt_word:
unsigned char bt_word[176]={0};
Дальше идет, сравнение с кодировкой символов, причем только цифр и пробела - но это уже не важно. Башню ему сносит где-то на пересчете. Что он пишет в mas_eds[0] что выводит казилябры, число должно быть больше десяти, но как в char можно запихнуть значение больше тысячи, лишнее должно было бы срезаться. Надеюсь вам понятно, а то без пива явно не разобраться.

Может все дело в скорости и надо согласовать все циклы и функции или цикл с мат_скрином убрать в отдельную функцию с ожиданием пересчета байта. Допустим она пересчитывает один, а цикл ему уже отправил другой и все накладывается... ну что-нить вроде этого