Код пишу в: Kell uVision Тестирую в: PROTEUS Исходники все ниже
Ни как не могу понять почему код не работает на МК хотя спокойно компилируется. На сколько я понял код просто зависает на одном из циклов и не движется дальше.
// cmd(0x40); // Установка адреса // cmd(0x80); // превод на 0 позицию. // cmd(0xC0); // Перевод на другую строку while(1); }
void video() // Вывод масива на экран { int line[8] = {0}; // Делим весь массив на строчки int i,a,p = 0, y = 0;
for (i = 0; i < 8; i++) // Переписываем весь двумерный массив в массив line { for(a = 0; a < 5; a++) // Пробегаемся по каждым 5 битам { cmd(0x80+a);symbol(0x30); // По идее должны написаться 5 подряд нулей. line[i] = line[i] + mass[y][a]; // строка | столбец if (a < 4) line[i] = line[i] << 1; // записываем все в 1 ячейку
} while(1); y++; // С каждым циклом переходим на строку ниже } for (i = 0; i < 8;i++) // Добавляем бит (10 000) каждому значению в массив line { line[i] = line[i] + 512; } // Тест. cmd(0x40); // Команда Установка адреса CGRAM for (i = 0; i < 8; i++) { symbol(line[i]); // Запись в CGRAM }
cmd(0x80); // Установка курсора на 1 строку symbol(0x00); // Вывод первого символа while(1); } Насколько я понял, ошибка появляется именно в этом цикле:
Код:
for (i = 0; i < 8; i++) // Переписываем весь двумерный массив в массив line { for(a = 0; a < 5; a++) // Пробегаемся по каждым 5 битам { cmd(0x80+a);symbol(0x30); // По идее должны написаться 5 подряд нулей. line[i] = line[i] + mass[0][a]; // строка | столбец if (a < 4) line[i] = line[i] << 1; // записываем все в 1 ячейку
} while(1); y++; // С каждым циклом переходим на строку ниже }
после цикла FOR ниже специально поставил бесконечный цикл Что бы проверить остановится ли весь процесс НО получается так что он почему то бесконечно бегает внутри цикла FOR и даже не доходит до цикла while(1); что бы убедиться в этом внутри цикла FOR поставил 2 команды
Цитата:
cmd(0x80+a); symbol(0x30);
на вывод символа "0" и переход на следующую ячейку. Соответственно никакого перехода нету. Спойлер А если убрать две строки:
Код:
line[i] = line[i] + mass[0][a]; // строка | столбец if (a < 4) line[i] = line[i] << 1;
То все работает как нужно! Хотя они даже никак не влияют на вывод символа ноль Спойлер ... Вообщем я не понимаю почему с ними ничего не работает
Вообще программа заключается не ввыводе ноликов на экран Это небольшой пример проблемы.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Код пишу в: Kell uVision Тестирую в: PROTEUS МК "AT89C51" LCD "LM016L".
Столкнулся с одной интересной проблемой которая мне мешает дальше что то делать. Собственно сам код:
Код:
void main(void) { int AA[5] = {1,0,0,0,1}; // Массив пикселей. int S = 0;
intilization(); // Инцилизация дисплея cmd(0x01); // отчистка дисплея S = S + AA[0]; // 0 + 1 = 1 cmd(0x40); // Установка адреса CGRAM symbol(512+S); // Прибавляем биты 10 000 symbol(512); cmd(0x80); // Установка адреса на 1 ячейку symbol(0x00); // Вывод символа while(1); }
и результат: Спойлер По идее должен загореться 1 пиксель на экране. НО если в строчке S = S + AA[0]; заменить АА прпосто на значение 1 то все работает. Спойлер
Я не понимаю просто почему так происходит. Ведь значение элемента массива AA[0] и так равно 1.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения