База дисплеев мобильных устройств
Re: База дисплеев мобильных устройств
Дело в том, что я писал текст на русском и вижу я его везде, кроме экрана, на чистом русском. А у Вас, судя по всему на кракозябрском показывает? Странно, это значит, что мой компьютер кодировке воду мутит. Даже и не знаю где спросить по этому поводу. Есть надежный способ снести винду- но это не выход.
Re: База дисплеев мобильных устройств
Открыл сишный файл CVAVR-ом. Там и правда кракозябры. Но ведь пишу- то я по русски, кракозябринского знать не знаю. И отображается в студии нормально. Что за трабл со студией и как его решить?
Re: База дисплеев мобильных устройств
titoFF писал(а):Открыл сишный файл CVAVR-ом. Там и правда кракозябры. Но ведь пишу- то я по русски, кракозябринского знать не знаю. И отображается в студии нормально. Что за трабл со студией и как его решить?
1. разюеритесь в какой кодировке ваша библиотека умеет писать русскими
наиболлее распространенные Cyrillic windows cp1251 и KOI8R
2. сохраните код программы с русскими буквами в нужно кодировке
atmel studio по умолчанию работает в cp1251
но можно сохранить в любой другой - File/Advanced save options
только после повторного открытия файла студия все равно будет думать что это cp1251 и если ошиблась то отображать будеть кроказяюры, но при этом компилить будет все как надо
Re: База дисплеев мобильных устройств
Сейчас начал последовательно сносить все программы от атмела с компа. Даже установщики в какой- то кривой кодировке. Сейчас всё удалится- переустановлю и попробую ещё.
Re: База дисплеев мобильных устройств
Переустановка не помогла. Сменил кодировку на 1251 и всё пошло!


Re: База дисплеев мобильных устройств
-
lucifer161
- Родился
- Сообщения: 10
- Зарегистрирован: Пн фев 18, 2013 18:34:23
Re: База дисплеев мобильных устройств
может кому интересно будет Nokia2760
http://we.easyelectronics.ru/lcd_gfx/vn ... a2760.html
http://we.easyelectronics.ru/lcd_gfx/vn ... a2760.html
Re: База дисплеев мобильных устройств
Доброго дня всем, позанимался тут как модно говорить реверсным
инженерингом древних дисплеев ))). Попросту говоря демонтировал
со стекол и изучал кристаллы контроллеров под микроскопом.
Siemens C25 - KS0090(S6A0090, SEG60)
Siemens A35 - NJR6578
Siemens C35 - SSD1812
Siemens S35 - KS0718
Может кому пригодится
инженерингом древних дисплеев ))). Попросту говоря демонтировал
со стекол и изучал кристаллы контроллеров под микроскопом.
Siemens C25 - KS0090(S6A0090, SEG60)
Siemens A35 - NJR6578
Siemens C35 - SSD1812
Siemens S35 - KS0718
Может кому пригодится
-
srg320
- Встал на лапы
- Сообщения: 85
- Зарегистрирован: Пт фев 01, 2013 17:47:26
- Откуда: Украина, Луганская область
Re: База дисплеев мобильных устройств
Схема подключения и инициализация дисплея и тачскрина Samsung S5830I (не путать с S5830) 320х480 16бит шина 3,5".
- Вложения
-
- S5830I.PDF
- (289.4 КБ) 640 скачиваний
-
- LCD S5830i Test.rar
- (28.06 КБ) 538 скачиваний
- maxlab
- Мучитель микросхем
- Сообщения: 479
- Зарегистрирован: Вт апр 23, 2013 22:21:18
- Откуда: KUBAN, Krasnodar
Re: База дисплеев мобильных устройств
Здравствуйте коллеги. Дисплей NOKIA N91 на операционном столе... Уже инициализируется и заливка разными цветами работает 
Перспективный дисплейчик. Совместим по системе команд со всеми где на борту написано LS021XXXXXXX Подходящий даташит lds274. Кому надо, вышлю... обращайтесь в ЛС
Код для STM32F100C4
Перспективный дисплейчик. Совместим по системе команд со всеми где на борту написано LS021XXXXXXX Подходящий даташит lds274. Кому надо, вышлю... обращайтесь в ЛС
Код для STM32F100C4
Спойлер
Код: Выделить всё
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
GPIO_InitTypeDef GPIO_InitStructure;
ErrorStatus HSEStartUpStatus;
#define F_CPU 24000000//Тактовая частоа процессора.
#define PIN_CS GPIO_Pin_0
#define PIN_DC GPIO_Pin_1
#define PIN_RD GPIO_Pin_2
#define PIN_RST GPIO_Pin_5
#define PIN_WR GPIO_Pin_6
#define NOP 0x00
#define SOFT_RESET 0x01
#define EXIT_SLEEP_MODE 0x11
#define SET_DISPLAY_ON 0x29
#define SET_CASET 0x2A
#define SET_RASET 0x2B
#define SET_RAMWR 0x2C
#define SET_ADDRESS_MODE 0x36
#define SET_COL_MODE 0x3A
// Определениецветов
#define black 0,0,0 // черный
#define red 255,0,0 // красный
#define green 0,255,0 // зеленый
#define blue 0,0,255 // синий
#define yellow 255,255,0 // жёлтый
#define cyan 0,255,255 // голубой
#define lilac 255,0,255 // сиреневый
#define white 255,255,255 // белый
void delay_ms(uint32_t ms)
{
volatile uint32_t nCount;
nCount=(F_CPU/10000)*ms; // возвращает тактовоую частоту HCLK в Гц, делим на 10000 и всё множим на ms
for (; nCount!=0; nCount--)
{
//6 тактов функция повтора + 4 пустые такта
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");// = 10 тактов
}
}
void delay_us(uint32_t us)
{
volatile uint32_t nCount;
nCount=(F_CPU/10000000)*us;
for (; nCount!=0; nCount--)
{
//6 тактов функция повтора + 4 пустые такта
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");// = 10 тактов
}
}
void lcd_reset(void)
{
GPIO_WriteBit(GPIOB, PIN_RST,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_RST,Bit_SET);
}
void lcd_write_com(uint8_t Data)
{
GPIO_WriteBit(GPIOB, PIN_CS,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_DC,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_RD,Bit_SET);
GPIO_Write(GPIOA,Data);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_RESET);
}
void lcd_write_dat(uint8_t Data)
{
GPIO_WriteBit(GPIOB, PIN_CS,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_DC,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_RD,Bit_SET);
GPIO_Write(GPIOA,Data);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_RESET);
}
void lcd_clear(char color_r, char color_g, char color_b)// Заливка дисплея
{
unsigned long int i;
lcd_write_com(SET_CASET); // КомандаориетациипоХкоординате
lcd_write_dat(0);
lcd_write_dat(0); // ДанныеначалаХкоординат (0)
lcd_write_dat(0);
lcd_write_dat(176); // Данные конца Х координат (176)
lcd_write_com(SET_RASET); //Команда ориентации по Y координате
lcd_write_dat(0);
lcd_write_dat(0); // Данные начала Y координат (0)
lcd_write_dat(0);
lcd_write_dat(208); // Данные конца Y координат (208)
lcd_write_com(SET_RAMWR); //Команда записи в память дисплея
for (i=0;i<(208*176);i++)
{lcd_write_dat(color_r);
lcd_write_dat(color_g);
lcd_write_dat(color_b);
} // RGB Данные для записи в память дисплея
}
int main(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig( RCC_SYSCLK_Div1);
RCC_PCLK2Config( RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div1);
RCC_PLLConfig(0x00010000, 0x00040000);
RCC_PLLCmd( ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK);
while (RCC_GetSYSCLKSource() != 0x08)
{
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_5|GPIO_Pin_6;
GPIO_Init(GPIOB, &GPIO_InitStructure);
lcd_reset();
delay_ms(20);
lcd_write_com(SOFT_RESET);
delay_ms(2);
lcd_write_com(EXIT_SLEEP_MODE);
delay_ms(2);
lcd_write_com(SET_DISPLAY_ON);
delay_ms(2);
lcd_write_com(SET_ADDRESS_MODE);
delay_ms(2);
lcd_write_dat(0xC0);// Книжная ориентация дисплея
delay_ms(2);
lcd_write_com(SET_COL_MODE);
delay_ms(2);
lcd_write_dat(0b00000111); // 24 битныйрежим
delay_ms(2);
lcd_clear(blue);
while(1)
{
}
}
- Вложения
-
- P1012164.JPG
- Фото макетки
- (83.97 КБ) 1043 скачивания
Девице - Device
- maxlab
- Мучитель микросхем
- Сообщения: 479
- Зарегистрирован: Вт апр 23, 2013 22:21:18
- Откуда: KUBAN, Krasnodar
Re: База дисплеев мобильных устройств
Довел код для N91 до юзабельности в любительских поделках. Coocox CoIDE.
#include "stm32f10x_rcc.h"
GPIO_InitTypeDef GPIO_InitStructure;
#define F_CPU 24000000 //Тактовая частота процессора.
// Управляющие пины
#define PIN_CS GPIO_Pin_0
#define PIN_DC GPIO_Pin_1
#define PIN_RD GPIO_Pin_2
#define PIN_RST GPIO_Pin_5
#define PIN_WR GPIO_Pin_6
// Команды контроллера LDS274 (NOKIA N91 8G 176X208 262k)
#define NOP 0x00
#define SOFT_RESET 0x01
#define EXIT_SLEEP_MODE 0x11
#define SET_DISPLAY_ON 0x29
#define SET_CASET 0x2A
#define SET_RASET 0x2B
#define SET_RAMWR 0x2C
#define SET_ADDRESS_MODE 0x36
#define SET_COL_MODE 0x3A
// Определение цветов (от 4 до 252 :RGB 6-6-6)
#define black 0,0,0 // черный
#define red 252,0,0 // красный
#define green 0,252,0 // зеленый
#define blue 0,0,252 // синий
#define yellow 252,252,0 // жёлтый
#define cyan 0,252,252 // голубой
#define lilac 252,0,252 // сиреневый
#define white 252,252,252 // белый
const char FONT8x15[97][15] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00, // !
0x00,0x63,0x63,0x63,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // "
0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00, // #
0x0C,0x0C,0x3E,0x63,0x61,0x60,0x3E,0x03,0x03,0x43,0x63,0x3E,0x0C,0x0C,0x00, // $
0x00,0x00,0x00,0x00,0x00,0x61,0x63,0x06,0x0C,0x18,0x33,0x63,0x00,0x00,0x00, // %
0x00,0x00,0x00,0x1C,0x36,0x36,0x1C,0x3B,0x6E,0x66,0x66,0x3B,0x00,0x00,0x00, // &
0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00,0x00, // (
0x00,0x00,0x18,0x0C,0x0C,0x06,0x06,0x06,0x06,0x0C,0x0C,0x18,0x00,0x00,0x00, // )
0x00,0x00,0x00,0x00,0x42,0x66,0x3C,0xFF,0x3C,0x66,0x42,0x00,0x00,0x00,0x00, // *
0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00, // +
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00, // ,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00, // .
0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00, // / (forward slash)
0x00,0x00,0x3E,0x63,0x63,0x63,0x67,0x6B,0x73,0x63,0x63,0x3E,0x00,0x00,0x00, // 0 0x30
0x00,0x00,0x0C,0x1C,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3F,0x00,0x00,0x00, // 1
0x00,0x00,0x3E,0x63,0x03,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00, // 2
0x00,0x00,0x3E,0x63,0x03,0x03,0x1E,0x03,0x03,0x03,0x63,0x3E,0x00,0x00,0x00, // 3
0x00,0x00,0x06,0x0E,0x1E,0x36,0x66,0x66,0x7F,0x06,0x06,0x0F,0x00,0x00,0x00, // 4
0x00,0x00,0x7F,0x60,0x60,0x60,0x7E,0x03,0x03,0x63,0x73,0x3E,0x00,0x00,0x00, // 5
0x00,0x00,0x1C,0x30,0x60,0x60,0x7E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00, // 6
0x00,0x00,0x7F,0x63,0x03,0x06,0x06,0x0C,0x0C,0x18,0x18,0x18,0x00,0x00,0x00, // 7
0x00,0x00,0x3E,0x63,0x63,0x63,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00, // 8
0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x3F,0x03,0x03,0x06,0x3C,0x00,0x00,0x00, // 9
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00, // :
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00, // ;
0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00, // <
0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00, // =
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00, // >
0x00,0x00,0x3E,0x63,0x63,0x06,0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x00,0x00, // ?
0x00,0x00,0x3E,0x63,0x63,0x6F,0x6B,0x6B,0x6E,0x60,0x60,0x3E,0x00,0x00,0x00, // @ 0x40
0x00,0x00,0x08,0x1C,0x36,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x00,0x00,0x00, // A
0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x33,0x33,0x33,0x33,0x7E,0x00,0x00,0x00, // B
0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x60,0x60,0x61,0x33,0x1E,0x00,0x00,0x00, // C
0x00,0x00,0x7C,0x36,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x7C,0x00,0x00,0x00, // D
0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x31,0x33,0x7F,0x00,0x00,0x00, // E
0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x30,0x30,0x78,0x00,0x00,0x00, // F
0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x6F,0x63,0x63,0x37,0x1D,0x00,0x00,0x00, // G
0x00,0x00,0x63,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00, // H
0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00, // I
0x00,0x00,0x0F,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00, // J
0x00,0x00,0x73,0x33,0x36,0x36,0x3C,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00, // K
0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x33,0x7F,0x00,0x00,0x00, // L
0x00,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00, // M
0x00,0x00,0x63,0x63,0x73,0x7B,0x7F,0x6F,0x67,0x63,0x63,0x63,0x00,0x00,0x00, // N
0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00, // O
0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, // P 0x50
0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x6B,0x6F,0x3E,0x06,0x07,0x00, // Q
0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00, // R
0x00,0x00,0x3E,0x63,0x63,0x30,0x1C,0x06,0x03,0x63,0x63,0x3E,0x00,0x00,0x00, // S
0x00,0x00,0xFF,0xDB,0x99,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00, // T
0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00, // U
0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x08,0x00,0x00,0x00, // V
0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x36,0x00,0x00,0x00, // W
0x00,0x00,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x3C,0x66,0xC3,0xC3,0x00,0x00,0x00, // X
0x00,0x00,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00, // Y
0x00,0x00,0x7F,0x63,0x43,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00, // Z
0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00, // [
0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00, // \ (back slash)
0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00, // ]
0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00, // _
0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ` 0x60
0x00,0x00,0x00,0x00,0x00,0x3C,0x46,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00, // a
0x00,0x00,0x70,0x30,0x30,0x3C,0x36,0x33,0x33,0x33,0x33,0x6E,0x00,0x00,0x00, // b
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x60,0x60,0x60,0x63,0x3E,0x00,0x00,0x00, // c
0x00,0x00,0x0E,0x06,0x06,0x1E,0x36,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00, // d
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x7E,0x60,0x63,0x3E,0x00,0x00,0x00, // e
0x00,0x00,0x1C,0x36,0x32,0x30,0x7C,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, // f
0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00, // g
0x00,0x00,0x70,0x30,0x30,0x36,0x3B,0x33,0x33,0x33,0x33,0x73,0x00,0x00,0x00, // h
0x00,0x00,0x0C,0x0C,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00, // i
0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // j
0x00,0x00,0x70,0x30,0x30,0x33,0x33,0x36,0x3C,0x36,0x33,0x73,0x00,0x00,0x00, // k
0x00,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00, // l
0x00,0x00,0x00,0x00,0x00,0x6E,0x7F,0x6B,0x6B,0x6B,0x6B,0x6B,0x00,0x00,0x00, // m
0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00, // n
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00, // o
0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // p 0x70
0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x0F,0x00, // q
0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x33,0x30,0x30,0x30,0x78,0x00,0x00,0x00, // r
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x38,0x0E,0x03,0x63,0x3E,0x00,0x00,0x00, // s
0x00,0x00,0x08,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0x1B,0x0E,0x00,0x00,0x00, // t
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00, // u
0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x36,0x36,0x1C,0x1C,0x08,0x00,0x00,0x00, // v
0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x00,0x00,0x00, // w
0x00,0x00,0x00,0x00,0x00,0x63,0x36,0x1C,0x1C,0x1C,0x36,0x63,0x00,0x00,0x00, // x
0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x3F,0x03,0x06,0x3C,0x00, // y
0x00,0x00,0x00,0x00,0x00,0x7F,0x66,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,0x00, // z
0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E,0x00,0x00,0x00, // {
0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00, // |
0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00, // }
0x00,0x00,0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~
0x00,0x70,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void delay_ms(uint32_t ms)
{
volatile uint32_t nCount;
nCount=(F_CPU/10000)*ms; // возвращает тактовоую частоту HCLK в Гц, делим на 10000 и всё множим на ms
for (; nCount!=0; nCount--)
{
//6 тактов функция повтора + 4 пустые такта
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");// = 10 тактов
}
}
void delay_us(uint32_t us)
{
volatile uint32_t nCount;
nCount=(F_CPU/10000000)*us;
for (; nCount!=0; nCount--)
{
//6 тактов функция повтора + 4 пустые такта
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");// = 10 тактов
}
}
void lcd_hwReset(void)
{
GPIO_WriteBit(GPIOB, PIN_RST,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_RST,Bit_SET);
}
void lcd_write_com(uint8_t Data)
{
GPIO_WriteBit(GPIOB, PIN_CS,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_DC,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_RD,Bit_SET);
GPIO_Write(GPIOA,Data);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_RESET);
}
void lcd_write_dat(uint8_t Data)
{
GPIO_WriteBit(GPIOB, PIN_CS,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_DC,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_RD,Bit_SET);
GPIO_Write(GPIOA,Data);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_RESET);
}
void lcd_setWindow(uint8_t column_start, uint16_t row_start, uint8_t column_end, uint16_t row_end)
{
lcd_write_com(SET_CASET);
lcd_write_dat(0); lcd_write_dat(column_start); lcd_write_dat(0); lcd_write_dat(column_end);
lcd_write_com(SET_RASET);
lcd_write_dat(0); lcd_write_dat(row_start); lcd_write_dat(0); lcd_write_dat(row_end);
}
void lcd_clear(char color_r, char color_g, char color_b)// Заливка дисплея
{
uint16_t i;
lcd_write_com(SET_CASET);
lcd_write_dat(0);lcd_write_dat(0);lcd_write_dat(0);lcd_write_dat(207);
lcd_write_com(SET_RASET);
lcd_write_dat(0);lcd_write_dat(0);lcd_write_dat(0);lcd_write_dat(175);
lcd_write_com(SET_RAMWR);
for (i=0;i<36608;i++)
{lcd_write_dat(color_r);lcd_write_dat(color_g);lcd_write_dat(color_b);}
}
void lcd_setPixel(uint8_t x, uint8_t y, uint8_t color_r, uint8_t color_g, uint8_t color_b)
{
lcd_setWindow(x,y,x+1,y+1);
lcd_write_com(SET_RAMWR);
lcd_write_dat(color_r);lcd_write_dat(color_g);lcd_write_dat(color_b);
}
void lcd_fillBox(uint8_t x, uint8_t y, uint8_t x1, uint8_t y1, uint8_t color_r, uint8_t color_g, uint8_t color_b)
{
uint16_t n,h,w,i;
lcd_setWindow(x,y,x1,y1);
h = (y1+1)-y;
w = (x1+1)-x;
n = h * w;
lcd_write_com(SET_RAMWR);
for(i=0;i<n;i++)
{
lcd_write_dat(color_r);lcd_write_dat(color_g);lcd_write_dat(color_b);
}
}
#define CHAR_W 8
#define CHAR_H 15
void put_char(uint8_t x, uint8_t y, uint8_t c, uint8_t color_r, uint8_t color_g, uint8_t color_b, uint8_t color_gr, uint8_t color_gg, uint8_t color_gb)
{
uint8_t h,ch,p,mask;
lcd_setWindow(x,y,x+CHAR_W-1,y+CHAR_H-1);
lcd_write_com(SET_RAMWR);
for (h=0; h<CHAR_H; h++)
{
ch=FONT8x15[ c-32 ][h];
mask = 0x80;
for (p=0; p<CHAR_W; p++)
{
if (ch & mask)
{
lcd_write_dat(color_r);lcd_write_dat(color_g);lcd_write_dat(color_b);
}
else
{
lcd_write_dat(color_gr);lcd_write_dat(color_gg);lcd_write_dat(color_gb);
}
mask=mask/2;
}
}
}
void put_string(unsigned long x, unsigned long y, char *str, uint8_t color_r, uint8_t color_g, uint8_t color_b, uint8_t color_gr, uint8_t color_gg, uint8_t color_gb)
{
unsigned char j;
j=0;
while (j<strlen(str))
{
put_char(x+j*CHAR_W,y,str[j], color_r, color_g, color_b, color_gr, color_gg, color_gb);
j++;
}
}
const char string[]= "NOKIA N91 LCD DEMO";
const char string1[]=" STM32F100C4 ";
int main(void)
{
// Настройка портов
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_5|GPIO_Pin_6;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// Инициализация дисплея
lcd_hwReset();
delay_ms(120);
lcd_write_com(SOFT_RESET);
delay_ms(120);
lcd_write_com(EXIT_SLEEP_MODE);
delay_ms(150);
lcd_write_com(SET_ADDRESS_MODE);
lcd_write_dat(0b010100000); // Альбомная ориентация дисплея
lcd_write_com(SET_COL_MODE);
lcd_write_dat(0b00000110); // 18 битный режим
lcd_write_com(SET_DISPLAY_ON);
lcd_clear(blue);
lcd_fillBox(40,40,100,100,green);
put_string(4,120,string,green,blue);
put_string(4,145,string1,yellow,blue);
while(1)
{
}
}
Спойлер
#include "stm32f10x_gpio.h"#include "stm32f10x_rcc.h"
GPIO_InitTypeDef GPIO_InitStructure;
#define F_CPU 24000000 //Тактовая частота процессора.
// Управляющие пины
#define PIN_CS GPIO_Pin_0
#define PIN_DC GPIO_Pin_1
#define PIN_RD GPIO_Pin_2
#define PIN_RST GPIO_Pin_5
#define PIN_WR GPIO_Pin_6
// Команды контроллера LDS274 (NOKIA N91 8G 176X208 262k)
#define NOP 0x00
#define SOFT_RESET 0x01
#define EXIT_SLEEP_MODE 0x11
#define SET_DISPLAY_ON 0x29
#define SET_CASET 0x2A
#define SET_RASET 0x2B
#define SET_RAMWR 0x2C
#define SET_ADDRESS_MODE 0x36
#define SET_COL_MODE 0x3A
// Определение цветов (от 4 до 252 :RGB 6-6-6)
#define black 0,0,0 // черный
#define red 252,0,0 // красный
#define green 0,252,0 // зеленый
#define blue 0,0,252 // синий
#define yellow 252,252,0 // жёлтый
#define cyan 0,252,252 // голубой
#define lilac 252,0,252 // сиреневый
#define white 252,252,252 // белый
const char FONT8x15[97][15] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00, // !
0x00,0x63,0x63,0x63,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // "
0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00, // #
0x0C,0x0C,0x3E,0x63,0x61,0x60,0x3E,0x03,0x03,0x43,0x63,0x3E,0x0C,0x0C,0x00, // $
0x00,0x00,0x00,0x00,0x00,0x61,0x63,0x06,0x0C,0x18,0x33,0x63,0x00,0x00,0x00, // %
0x00,0x00,0x00,0x1C,0x36,0x36,0x1C,0x3B,0x6E,0x66,0x66,0x3B,0x00,0x00,0x00, // &
0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00,0x00, // (
0x00,0x00,0x18,0x0C,0x0C,0x06,0x06,0x06,0x06,0x0C,0x0C,0x18,0x00,0x00,0x00, // )
0x00,0x00,0x00,0x00,0x42,0x66,0x3C,0xFF,0x3C,0x66,0x42,0x00,0x00,0x00,0x00, // *
0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00, // +
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00, // ,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00, // .
0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00, // / (forward slash)
0x00,0x00,0x3E,0x63,0x63,0x63,0x67,0x6B,0x73,0x63,0x63,0x3E,0x00,0x00,0x00, // 0 0x30
0x00,0x00,0x0C,0x1C,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3F,0x00,0x00,0x00, // 1
0x00,0x00,0x3E,0x63,0x03,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00, // 2
0x00,0x00,0x3E,0x63,0x03,0x03,0x1E,0x03,0x03,0x03,0x63,0x3E,0x00,0x00,0x00, // 3
0x00,0x00,0x06,0x0E,0x1E,0x36,0x66,0x66,0x7F,0x06,0x06,0x0F,0x00,0x00,0x00, // 4
0x00,0x00,0x7F,0x60,0x60,0x60,0x7E,0x03,0x03,0x63,0x73,0x3E,0x00,0x00,0x00, // 5
0x00,0x00,0x1C,0x30,0x60,0x60,0x7E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00, // 6
0x00,0x00,0x7F,0x63,0x03,0x06,0x06,0x0C,0x0C,0x18,0x18,0x18,0x00,0x00,0x00, // 7
0x00,0x00,0x3E,0x63,0x63,0x63,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00, // 8
0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x3F,0x03,0x03,0x06,0x3C,0x00,0x00,0x00, // 9
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00, // :
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00, // ;
0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00, // <
0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00, // =
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00, // >
0x00,0x00,0x3E,0x63,0x63,0x06,0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x00,0x00, // ?
0x00,0x00,0x3E,0x63,0x63,0x6F,0x6B,0x6B,0x6E,0x60,0x60,0x3E,0x00,0x00,0x00, // @ 0x40
0x00,0x00,0x08,0x1C,0x36,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x00,0x00,0x00, // A
0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x33,0x33,0x33,0x33,0x7E,0x00,0x00,0x00, // B
0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x60,0x60,0x61,0x33,0x1E,0x00,0x00,0x00, // C
0x00,0x00,0x7C,0x36,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x7C,0x00,0x00,0x00, // D
0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x31,0x33,0x7F,0x00,0x00,0x00, // E
0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x30,0x30,0x78,0x00,0x00,0x00, // F
0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x6F,0x63,0x63,0x37,0x1D,0x00,0x00,0x00, // G
0x00,0x00,0x63,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00, // H
0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00, // I
0x00,0x00,0x0F,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00, // J
0x00,0x00,0x73,0x33,0x36,0x36,0x3C,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00, // K
0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x33,0x7F,0x00,0x00,0x00, // L
0x00,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00, // M
0x00,0x00,0x63,0x63,0x73,0x7B,0x7F,0x6F,0x67,0x63,0x63,0x63,0x00,0x00,0x00, // N
0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00, // O
0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, // P 0x50
0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x6B,0x6F,0x3E,0x06,0x07,0x00, // Q
0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00, // R
0x00,0x00,0x3E,0x63,0x63,0x30,0x1C,0x06,0x03,0x63,0x63,0x3E,0x00,0x00,0x00, // S
0x00,0x00,0xFF,0xDB,0x99,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00, // T
0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00, // U
0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x08,0x00,0x00,0x00, // V
0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x36,0x00,0x00,0x00, // W
0x00,0x00,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x3C,0x66,0xC3,0xC3,0x00,0x00,0x00, // X
0x00,0x00,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00, // Y
0x00,0x00,0x7F,0x63,0x43,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00, // Z
0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00, // [
0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00, // \ (back slash)
0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00, // ]
0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00, // _
0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ` 0x60
0x00,0x00,0x00,0x00,0x00,0x3C,0x46,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00, // a
0x00,0x00,0x70,0x30,0x30,0x3C,0x36,0x33,0x33,0x33,0x33,0x6E,0x00,0x00,0x00, // b
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x60,0x60,0x60,0x63,0x3E,0x00,0x00,0x00, // c
0x00,0x00,0x0E,0x06,0x06,0x1E,0x36,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00, // d
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x7E,0x60,0x63,0x3E,0x00,0x00,0x00, // e
0x00,0x00,0x1C,0x36,0x32,0x30,0x7C,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, // f
0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00, // g
0x00,0x00,0x70,0x30,0x30,0x36,0x3B,0x33,0x33,0x33,0x33,0x73,0x00,0x00,0x00, // h
0x00,0x00,0x0C,0x0C,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00, // i
0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // j
0x00,0x00,0x70,0x30,0x30,0x33,0x33,0x36,0x3C,0x36,0x33,0x73,0x00,0x00,0x00, // k
0x00,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00, // l
0x00,0x00,0x00,0x00,0x00,0x6E,0x7F,0x6B,0x6B,0x6B,0x6B,0x6B,0x00,0x00,0x00, // m
0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00, // n
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00, // o
0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // p 0x70
0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x0F,0x00, // q
0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x33,0x30,0x30,0x30,0x78,0x00,0x00,0x00, // r
0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x38,0x0E,0x03,0x63,0x3E,0x00,0x00,0x00, // s
0x00,0x00,0x08,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0x1B,0x0E,0x00,0x00,0x00, // t
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00, // u
0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x36,0x36,0x1C,0x1C,0x08,0x00,0x00,0x00, // v
0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x00,0x00,0x00, // w
0x00,0x00,0x00,0x00,0x00,0x63,0x36,0x1C,0x1C,0x1C,0x36,0x63,0x00,0x00,0x00, // x
0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x3F,0x03,0x06,0x3C,0x00, // y
0x00,0x00,0x00,0x00,0x00,0x7F,0x66,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,0x00, // z
0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E,0x00,0x00,0x00, // {
0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00, // |
0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00, // }
0x00,0x00,0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~
0x00,0x70,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void delay_ms(uint32_t ms)
{
volatile uint32_t nCount;
nCount=(F_CPU/10000)*ms; // возвращает тактовоую частоту HCLK в Гц, делим на 10000 и всё множим на ms
for (; nCount!=0; nCount--)
{
//6 тактов функция повтора + 4 пустые такта
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");// = 10 тактов
}
}
void delay_us(uint32_t us)
{
volatile uint32_t nCount;
nCount=(F_CPU/10000000)*us;
for (; nCount!=0; nCount--)
{
//6 тактов функция повтора + 4 пустые такта
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");
__asm volatile ("nop");// = 10 тактов
}
}
void lcd_hwReset(void)
{
GPIO_WriteBit(GPIOB, PIN_RST,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_RST,Bit_SET);
}
void lcd_write_com(uint8_t Data)
{
GPIO_WriteBit(GPIOB, PIN_CS,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_DC,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_RD,Bit_SET);
GPIO_Write(GPIOA,Data);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_RESET);
}
void lcd_write_dat(uint8_t Data)
{
GPIO_WriteBit(GPIOB, PIN_CS,Bit_RESET);
GPIO_WriteBit(GPIOB, PIN_DC,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_RD,Bit_SET);
GPIO_Write(GPIOA,Data);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_SET);
GPIO_WriteBit(GPIOB, PIN_WR,Bit_RESET);
}
void lcd_setWindow(uint8_t column_start, uint16_t row_start, uint8_t column_end, uint16_t row_end)
{
lcd_write_com(SET_CASET);
lcd_write_dat(0); lcd_write_dat(column_start); lcd_write_dat(0); lcd_write_dat(column_end);
lcd_write_com(SET_RASET);
lcd_write_dat(0); lcd_write_dat(row_start); lcd_write_dat(0); lcd_write_dat(row_end);
}
void lcd_clear(char color_r, char color_g, char color_b)// Заливка дисплея
{
uint16_t i;
lcd_write_com(SET_CASET);
lcd_write_dat(0);lcd_write_dat(0);lcd_write_dat(0);lcd_write_dat(207);
lcd_write_com(SET_RASET);
lcd_write_dat(0);lcd_write_dat(0);lcd_write_dat(0);lcd_write_dat(175);
lcd_write_com(SET_RAMWR);
for (i=0;i<36608;i++)
{lcd_write_dat(color_r);lcd_write_dat(color_g);lcd_write_dat(color_b);}
}
void lcd_setPixel(uint8_t x, uint8_t y, uint8_t color_r, uint8_t color_g, uint8_t color_b)
{
lcd_setWindow(x,y,x+1,y+1);
lcd_write_com(SET_RAMWR);
lcd_write_dat(color_r);lcd_write_dat(color_g);lcd_write_dat(color_b);
}
void lcd_fillBox(uint8_t x, uint8_t y, uint8_t x1, uint8_t y1, uint8_t color_r, uint8_t color_g, uint8_t color_b)
{
uint16_t n,h,w,i;
lcd_setWindow(x,y,x1,y1);
h = (y1+1)-y;
w = (x1+1)-x;
n = h * w;
lcd_write_com(SET_RAMWR);
for(i=0;i<n;i++)
{
lcd_write_dat(color_r);lcd_write_dat(color_g);lcd_write_dat(color_b);
}
}
#define CHAR_W 8
#define CHAR_H 15
void put_char(uint8_t x, uint8_t y, uint8_t c, uint8_t color_r, uint8_t color_g, uint8_t color_b, uint8_t color_gr, uint8_t color_gg, uint8_t color_gb)
{
uint8_t h,ch,p,mask;
lcd_setWindow(x,y,x+CHAR_W-1,y+CHAR_H-1);
lcd_write_com(SET_RAMWR);
for (h=0; h<CHAR_H; h++)
{
ch=FONT8x15[ c-32 ][h];
mask = 0x80;
for (p=0; p<CHAR_W; p++)
{
if (ch & mask)
{
lcd_write_dat(color_r);lcd_write_dat(color_g);lcd_write_dat(color_b);
}
else
{
lcd_write_dat(color_gr);lcd_write_dat(color_gg);lcd_write_dat(color_gb);
}
mask=mask/2;
}
}
}
void put_string(unsigned long x, unsigned long y, char *str, uint8_t color_r, uint8_t color_g, uint8_t color_b, uint8_t color_gr, uint8_t color_gg, uint8_t color_gb)
{
unsigned char j;
j=0;
while (j<strlen(str))
{
put_char(x+j*CHAR_W,y,str[j], color_r, color_g, color_b, color_gr, color_gg, color_gb);
j++;
}
}
const char string[]= "NOKIA N91 LCD DEMO";
const char string1[]=" STM32F100C4 ";
int main(void)
{
// Настройка портов
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_5|GPIO_Pin_6;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// Инициализация дисплея
lcd_hwReset();
delay_ms(120);
lcd_write_com(SOFT_RESET);
delay_ms(120);
lcd_write_com(EXIT_SLEEP_MODE);
delay_ms(150);
lcd_write_com(SET_ADDRESS_MODE);
lcd_write_dat(0b010100000); // Альбомная ориентация дисплея
lcd_write_com(SET_COL_MODE);
lcd_write_dat(0b00000110); // 18 битный режим
lcd_write_com(SET_DISPLAY_ON);
lcd_clear(blue);
lcd_fillBox(40,40,100,100,green);
put_string(4,120,string,green,blue);
put_string(4,145,string1,yellow,blue);
while(1)
{
}
}
- Вложения
-
- n91.lay
- Макетка для дисплея
- (41.28 КБ) 586 скачиваний
-
- Nokia_N91_STM32.jpg
- Фотоотчет
- (129.36 КБ) 1194 скачивания
Девице - Device
-
Chettuser
Re: База дисплеев мобильных устройств
Вот наткнулся, использование цветных небольших дисплеев:
http://bc-avrora.ucoz.ua/disp/Stat_119.pdf
http://bc-avrora.ucoz.ua/disp/Stat_119.pdf
- WishMasterMax
- Потрогал лапой паяльник
- Сообщения: 389
- Зарегистрирован: Пн июл 09, 2012 11:07:59
- Откуда: Ukraine
- Контактная информация:
Re: База дисплеев мобильных устройств
Хм, темы не нашел для дисплеев фотиков поэтому спрошу тут, а реально ли подключить экран от Nikon CollPix L2 к меге8 например?
Re: База дисплеев мобильных устройств
Скажите а есть ли у драйверов ILI932x или SSD1289 без VSYNC пина возможность апдейтить изображение после полной записи кадра?
(или как управлять 0x0C регом 9325?)
(или как управлять 0x0C регом 9325?)
Прочитал Мануалы! известных производителей на кривозЕркальные темы - точно, время кого нить ужасТно растроЛить.
- alex38779
- Потрогал лапой паяльник
- Сообщения: 386
- Зарегистрирован: Чт окт 31, 2013 10:54:32
- Контактная информация:
Re: База дисплеев мобильных устройств
Что то не могу найти даташит на контроллер lds183 дисплея lph9135... Может у кого есть? Поделитесь) 
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: База дисплеев мобильных устройств
А зачем Вам даташит, если не секрет? Если для использования совместно с микроконтроллером, то есть же куча примеров кода...
С наскоку в поисковике я к сожалению тоже не нашел на контроллер даташит, но при этом накачал кучу примеров кода. Не ясно одно - откуда эти примеры растут, если даташит не находится
С наскоку в поисковике я к сожалению тоже не нашел на контроллер даташит, но при этом накачал кучу примеров кода. Не ясно одно - откуда эти примеры растут, если даташит не находится
Ставим плюсы: )
- alex38779
- Потрогал лапой паяльник
- Сообщения: 386
- Зарегистрирован: Чт окт 31, 2013 10:54:32
- Контактная информация:
Re: База дисплеев мобильных устройств
Да нашел уже. К стм32 подключаю. Из примеров команды инициализации взял..
А контроллер это совместим с PCF8833 по командам..
А контроллер это совместим с PCF8833 по командам..
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: База дисплеев мобильных устройств
Nokia 1600
Подскажите пожалуйста, что за контроллер в нём или пример управления. Кроме распиновки почему-то ничего не нагуглилось.
Upd.
Нашёл на каком-то форуме упоминание, что там может стоять контроллер CSTN матрицы LDS184.
Даташит не гуглится, сайт производителя в полурабочем состоянии.
Попался только обзор чипа.
Upd2.
Разыскал в инете кусок кода для LDS184, немного причесал под CVAVR. Дисплей ожил, выводит 3 тестовых экрана: красный, зелёный, синий. Но пока назначение большинства констант остаётся неизвестным.
Есть такой вопрос. Те дисплеи, с которыми имел дело, требуют "идиотские" напряжения питания 1.8+2.8 вольт. Имеются ли ширпотребные и недорогие цветные дисплеи от мобилок с напряжением 3.3 вольт, чтоб напрямую привязать к STM32 без всяких резистивных делителей и преобразователей уровня?
Подскажите пожалуйста, что за контроллер в нём или пример управления. Кроме распиновки почему-то ничего не нагуглилось.
Upd.
Нашёл на каком-то форуме упоминание, что там может стоять контроллер CSTN матрицы LDS184.
Даташит не гуглится, сайт производителя в полурабочем состоянии.
Попался только обзор чипа.
Upd2.
Разыскал в инете кусок кода для LDS184, немного причесал под CVAVR. Дисплей ожил, выводит 3 тестовых экрана: красный, зелёный, синий. Но пока назначение большинства констант остаётся неизвестным.
Есть такой вопрос. Те дисплеи, с которыми имел дело, требуют "идиотские" напряжения питания 1.8+2.8 вольт. Имеются ли ширпотребные и недорогие цветные дисплеи от мобилок с напряжением 3.3 вольт, чтоб напрямую привязать к STM32 без всяких резистивных делителей и преобразователей уровня?
- Вложения
-
- Nokia1600_LDS184.zip
- Исходник CVAVR
- (6.1 КБ) 537 скачиваний
-
- LDS184_overview.pdf
- (66.19 КБ) 798 скачиваний
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: База дисплеев мобильных устройств
Экранчик от Nokia1600 оказался совместим по командам с контроллером Sitronix ST7628.
По крайней мере команды инициализации и записи окна в ОЗУ работают.
По крайней мере команды инициализации и записи окна в ОЗУ работают.
Re: База дисплеев мобильных устройств
uk8amk писал(а):Есть такой вопрос. Те дисплеи, с которыми имел дело, требуют "идиотские" напряжения питания 1.8+2.8 вольт. Имеются ли ширпотребные и недорогие цветные дисплеи от мобилок с напряжением 3.3 вольт, чтоб напрямую привязать к STM32 без всяких резистивных делителей и преобразователей уровня?
дисплей от nokia1616 отлично работает по обоим цепям питания от 3.3В и без делителей согласовывается с МК
единственно встречаются версии с подсветкой как на 3.3В так и на 7В
в последнем случае придется иметь второе напряжение или от другого источника или применять stepup

