Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stmf100rb+дисплей lph9135 рисование примитивов
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
koteika
Всем привет. Подключил я дисплей lph9135 к стм32 по spi. Контроллер дисплея lds183..

Инициализация прошла успешно, появился мусор. Далее закрасил экран цветом, здесь все нормально.

Решил нарисовать линию, линия это же набор пикселей определенного цвета. Вот тут и проблема, не рисуются они...

Код
//инициализация
void LCD_init(void)
{
   CS_Low;
   RESET_Hi;
   RESET_Low;
   RESET_Hi;
   delay_ms(10);
   LCD_CMD(0x01);
   LCD_CMD(0x11);
   LCD_CMD(0x03);
   delay_ms(10);
   LCD_CMD(0x29);
   LCD_CMD(0x13);
   LCD_CMD(0x21);
   LCD_CMD(0x21);
   LCD_CMD(0xba);
   LCD_CMD(0x36);
   LCD_DATA(0x00);
   LCD_CMD(0x3a); //Установка цветовой палитры
   #ifdef _8_BIT_COLOR
   LCD_DATA(0x02); //Байт на пиксель 256 цветов
   #else
   LCD_DATA(0x05); //Два байта на пиксель 65536 цветов
   #endif
   LCD_CMD(0x2a);
   LCD_DATA(0x00);
   LCD_DATA(0x7f);
   LCD_CMD(0xb4);
   LCD_DATA(0x03);
   LCD_DATA(0x08);
   LCD_DATA(0x0b);
   LCD_DATA(0x0e);
   LCD_CMD(0xba);
   LCD_DATA(0x07);
   LCD_DATA(0x0d);
   LCD_CMD(0x2b);
   LCD_DATA(0x00);
   LCD_DATA(0x7f);
}

//выделяем область на экране
void SetArea(uint8_t x1, uint8_t x2, uint8_t y1, uint8_t y2)
{
    LCD_CMD(0x2a);
    LCD_DATA(x1);
    LCD_DATA(x2);
    LCD_CMD(0x2b);
    LCD_DATA(y1);
    LCD_DATA(y2);
    LCD_CMD(0x2c);
}

//заливаем ее цветом
void screen(uint16_t color, uint8_t x_1, uint8_t x_2, uint8_t y_1, uint8_t y_2)
{
    uint8_t x;
    SetArea(x_1,x_2,y_1,y_2);
    RS_Hi;
    for (x = 0; x < 16384; x++)
    {
        LCD_DATA(color);
    }
}

//рисуем пиксель
void pixel(uint32_t color, uint8_t x, uint8_t y)
{
    SetArea(x,x,y,y);
    RS_Hi;
    LCD_DATA(color);
}

//рисуем линию
void line(void)
{
    uint8_t i=0;
    while (i < 50)
    {
        pixel(0xffa6,i,1);
        i++;
        delay_ms(10);
    }
}
esaulenka
Код
    uint8_t x;
    for (x = 0; x < 16384; x++)


Мде. И что, просто "не работает", или вообще "виснет нафиг" ?

И вообще - ничерта непонятно (тут мало кто наизусть декламирует даташит на этот LPH9135), некрасиво и неоптимально.
WitFed
Если SetArea() хотя бы раз работала успешно, то дело может быть в её параметрах -- возможно, в pixel() можно заменить "SetArea(x,x,y,y);" на "SetArea(x,x+1,y,y+1);" или "SetArea(x,x+2,y,y+2);", и что-то появится. Вдруг там нулевые размеры области недопустимы ?
Долбёжка 16384 раза одним цветом осмысленна ? Мож надо произведением ширины на высоту ?
Я ж тоже шитов не читал, чисто навскидку...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.