реклама на сайте
подробности

 
 
> ARM и OLED display
glebka
сообщение Jun 20 2007, 15:42
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217



Надо заставить работать связку SAM7 и OLED дисплей с внутренностями Solomon SSD0323.Если кто встречался, порекамендуйте направление, а то даташит на дисплей не дает полной инфомации что и как.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
a3r3
сообщение Jun 21 2007, 08:28
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947



Вот мой код:

Код
u_char frame0[0xc00];


void disp_refresh(void)
{
    u_int a;
    u_char *fptr = frame0;

    disp_write(0x00, 0x15);        // Set Column Address
    disp_write(0x00, 0x00);        // 0
    disp_write(0x00, 0x2f);        // +1 = 96/2

    disp_write(0x00, 0x75);        // Set Row Address
    disp_write(0x00, 0x00);        // 0
    disp_write(0x00, 0x3f);        // +1 = 64
    
    IOCLR = DISP_RW + DISP_E;
    IOSET = DISP_RS;
    IODIR |= DISP_DBUS;
    a = 0x00;
    do
    {
        IOCLR = DISP_DBUS + DISP_CS;
        IOSET = ((*fptr++ & 0xff) << 0x10) + DISP_E;
        IOCLR = DISP_E;
        IOSET = DISP_CS;
    } while(++a != 0xc00);
}

void disp_clear(void)
{
    u_int a;

    a = 0x00;
    do
    {
        frame0[a] = 0x00;
    } while(++a != 0xc00);
}

void disp_ini(void)
{
    u_int a;

    IOCLR = DISP_RS + DISP_RW + DISP_E + DISP_RST;
    IOSET = DISP_CS + DISP_PEN;
    IODIR |= DISP_CTL + DISP_DBUS;

// Delay
    a = 0x00;
    while(++a != 0x10000);

    IOSET = DISP_RST;

// Delay
    a = 0x00;
    while(++a != 0x10000);

    disp_write(0x00, 0xa8);        // Set Multiplex Ratio
    disp_write(0x00, 0x3f);        // 64 Lines

    disp_write(0x00, 0x15);        // Set Column Address
    disp_write(0x00, 0x00);        // 0
    disp_write(0x00, 0x2f);        // +1 = 96/2

    disp_write(0x00, 0x75);        // Set Row Address
    disp_write(0x00, 0x00);        // 0
    disp_write(0x00, 0x3f);        // +1 = 64

    disp_write(0x00, 0xa0);        // Set Re-map
    disp_write(0x00, 0x40);        // Enable COM Split Odd Even

#ifdef    HIGH_BRIGHTNESS
    disp_write(0x00, 0x86);        // Set Full Current
    disp_write(0x00, 0x81);        // Set contrast
    disp_write(0x00, 0x7f);        // 127
#endif

/*
    disp_write(0x00, 0xb3);        // Set freq.
    disp_write(0x00, 0x02);        //
*/

    disp_clear();            // Clear Display Data
    disp_refresh();

    disp_write(0x00, 0xaf);        // Display ON
}

void disp_write(u_int addr, u_int data)
{
    IOCLR = DISP_DBUS + DISP_RS + DISP_RW + DISP_E;
    if(addr) IOSET = DISP_RS;
    IODIR |= DISP_DBUS;
    IOCLR = DISP_CS;
    IOSET = ((data & 0xff) << 0x10) + DISP_E;
    IOCLR = DISP_E;
    IOSET = DISP_CS;
}


Экран полностью хранился в ОЗУ, так что процедуры "нарисовать точку" нет, можно только обновить все.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 06:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016