hard SPI
soft SPI
Ну и стоит обратить внимание на то как выглядит батарейка.
мало того это дело все еще мигает в Протусе, появитяс пропадет, появится пропадет.Разобрался, все коректно выводится и все одного оттенка, осталось только мерцание изображеняи, в чем причина понять не могу.Aheir писал(а):Если отличается "яркость" надписей на экране, значит, часть экрана Вы обновляете через стирание, а часть - нет... Пока только такая мысль в голову приходит. Если отображение по сути корректное, то china здесь не при чем, оно не для того.
на доли секунду пропадает избражение, прям на очень маленькие доли. и с определенной частотой, поэтому получается мерцание.Aheir писал(а):Шо за мерцание?
Код: Выделить всё
while (1)
{
delay_ms(50); // задержка для устранения дребезга контактов кнопок и она же - шаг изменения значений яркости
// чтобы режим не менялся каждые 50mS, при нажатии на кнопку разрешаем только одно изменение режима
if (Mode_Change_Enabled)
{
if (MODE_Button) // если нажата кнопка смены режима
{
if ((++Mode) == 3) Mode = 0; // меняем режим по кольцу
Mode_Change_Enabled = 0; // запрещаем при нажатой кнопке повторную смену режима
};
}
// когда кнопка отжата, опять разрешаем смену режима
else if (!MODE_Button) {Mode_Change_Enabled = 1;};
LcdClear();
switch (Mode) // если ручной режим
{
case Manual:
{
sprintf (lcd_buf, "ЯРКОСТЬ");LcdString (5,1);
if (UP_Button) // если нажата кнопка увеличение яркости
{
if (OCR1A < 255) OCR1A++;
};
if (DOWN_Button) // если нажата кнопка уменьшения яркости
{
if (OCR1A) OCR1A--;
};
/****Заполняем шкалу по процентам****/
x1=((OCR1A*100)/254); //Расчет % яркости
x2=x1; //Переменная двывода % яркости
x1=(x1*83)/100; //Расчет заполенния по % яркости относительно Х
LcdLine (1,34,x1,34,2); //
LcdLine (1,35,x1,35,2); //Рисуем заполение шкалы
LcdLine (1,36,x1,36,2); //
LcdLine (0,32,0,37,2); //
LcdLine (83,32,83,37,2); // Пустая шкала
LcdLine (0,32,83,32,2); //
LcdLine (0,37,83,37,2); //
/****************************************/
sprintf (lcd_buf, " < >");LcdString (1,6); //Знаки больше и меньше по краям экрана
sprintf (lcd_buf, "%i",x2);LcdStringBold (6,3); //Вывод процента яркости
LcdUpdate();
delay_ms(10);
break;
};
LcdMode (2);
case Auto: // авто тремрметр и вольтметр
{
ind=((100.0*(adc_data[0]<<2))/204)*4; //Расчте напряжения
sprintf (lcd_buf, " ( Термометр");LcdString (1,1); //Символ ( это часть значки термометра
temperature(); //Вызов функции температурной
/*ПЕРВЫЙ ДАТЧИК*/
sprintf (lcd_buf, " ) IN %i'C", temper[0]); LcdString(1,2); //вывод температуры 1ого датчика, символ ) это часть значки термометра
/*ВТОРОЙ ДАТЧИК*/
sprintf (lcd_buf, " * OUT %i'C", temper[1]); LcdString(1,3); //вывод температуры 2ого датчика, символ * это часть значки термометра
#asm("sei")
sprintf (lcd_buf, "Вольтметр");LcdString (1,5);
sprintf (lcd_buf, " %u.%uV",ind/100,ind%100);LcdString (1,6); //Вывод напряжения
LcdBar(65, 27, 75, 45, 10*(3+1)); //Вывод значка батареи
LcdUpdate();
delay_ms(10);
break;
};
LcdMode (2);
case Max:
{
sprintf (lcd_buf, "Режим 3",); LcdString(1,2); //пока не придумал третий режим
LcdUpdate();
delay_ms(10);
break;
};
LcdMode (2);
};
}Разобрался с библиотекой! Все мерцаний нет, работает!)))Aheir писал(а):Зачем LcdClear(); в основном цикле каждые 50 мс? Отсюда и мерцание.... Да и LcdMode (2); не нужно постоянно дергать...
LcdClear(); физически очищает экран, для очистки только буфера напишите свою функцию или дождитесь новой версии от меня)
neid писал(а): Разобрался с библиотекой! Все мерцаний нет, работает!)))
Сненерировал картинку не знаю как её вывести?
почему файл рисунка не выкладываете, или объясните как картину выводить?
перевернуть шрифтCanceR писал(а):Здравствуйте. Помогите перевернуть экран. Через функцию LcdUpdate или может есть команда аппаратного переворачивания, в даташите я не нашел. Экран влезает в мою коробочку тока контактами вниз. Строчки символов перевернуты. Заранее спасибо.