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


- Реклама
- Сообщения: 1040
- Зарегистрирован: Вс сен 25, 2011 19:09:33
- Сообщения: 10
- Зарегистрирован: Пн фев 18, 2013 18:34:23
может кому интересно будет Nokia2760
http://we.easyelectronics.ru/lcd_gfx/vn ... a2760.html
http://we.easyelectronics.ru/lcd_gfx/vn ... a2760.html
Доброго дня всем, позанимался тут как модно говорить реверсным
инженерингом древних дисплеев ))). Попросту говоря демонтировал
со стекол и изучал кристаллы контроллеров под микроскопом.
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
Может кому пригодится
Схема подключения и инициализация дисплея и тачскрина Samsung S5830I (не путать с S5830) 320х480 16бит шина 3,5".
- Вложения
-
- S5830I.PDF
- (289.4 КБ) 643 скачивания
-
- LCD S5830i Test.rar
- (28.06 КБ) 541 скачивание
Здравствуйте коллеги. Дисплей 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 КБ) 1045 скачиваний
Девице - Device
Довел код для 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 КБ) 588 скачиваний
-
- Nokia_N91_STM32.jpg
- Фотоотчет
- (129.36 КБ) 1197 скачиваний
Девице - Device
Вот наткнулся, использование цветных небольших дисплеев:
http://bc-avrora.ucoz.ua/disp/Stat_119.pdf
http://bc-avrora.ucoz.ua/disp/Stat_119.pdf
Хм, темы не нашел для дисплеев фотиков поэтому спрошу тут, а реально ли подключить экран от Nikon CollPix L2 к меге8 например?
- Сообщения: 48
- Зарегистрирован: Вс фев 09, 2014 15:20:43
Скажите а есть ли у драйверов ILI932x или SSD1289 без VSYNC пина возможность апдейтить изображение после полной записи кадра?
(или как управлять 0x0C регом 9325?)
(или как управлять 0x0C регом 9325?)
Прочитал Мануалы! известных производителей на кривозЕркальные темы - точно, время кого нить ужасТно растроЛить.
- Сообщения: 386
- Зарегистрирован: Чт окт 31, 2013 10:54:32
Что то не могу найти даташит на контроллер lds183 дисплея lph9135... Может у кого есть? Поделитесь) 
А зачем Вам даташит, если не секрет? Если для использования совместно с микроконтроллером, то есть же куча примеров кода...
С наскоку в поисковике я к сожалению тоже не нашел на контроллер даташит, но при этом накачал кучу примеров кода. Не ясно одно - откуда эти примеры растут, если даташит не находится
С наскоку в поисковике я к сожалению тоже не нашел на контроллер даташит, но при этом накачал кучу примеров кода. Не ясно одно - откуда эти примеры растут, если даташит не находится
Ставим плюсы: )
- Сообщения: 386
- Зарегистрирован: Чт окт 31, 2013 10:54:32
Да нашел уже. К стм32 подключаю. Из примеров команды инициализации взял..
А контроллер это совместим с PCF8833 по командам..
А контроллер это совместим с PCF8833 по командам..
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 КБ) 541 скачивание
-
- LDS184_overview.pdf
- (66.19 КБ) 803 скачивания
Экранчик от Nokia1600 оказался совместим по командам с контроллером Sitronix ST7628.
По крайней мере команды инициализации и записи окна в ОЗУ работают.
По крайней мере команды инициализации и записи окна в ОЗУ работают.
- Сообщения: 1040
- Зарегистрирован: Вс сен 25, 2011 19:09:33
дисплей от nokia1616 отлично работает по обоим цепям питания от 3.3В и без делителей согласовывается с МКuk8amk писал(а): Есть такой вопрос. Те дисплеи, с которыми имел дело, требуют "идиотские" напряжения питания 1.8+2.8 вольт. Имеются ли ширпотребные и недорогие цветные дисплеи от мобилок с напряжением 3.3 вольт, чтоб напрямую привязать к STM32 без всяких резистивных делителей и преобразователей уровня?
единственно встречаются версии с подсветкой как на 3.3В так и на 7В
в последнем случае придется иметь второе напряжение или от другого источника или применять stepup




