Нашел дисплей lph9135. Нашел пример с инициализацией дисплея для авр.
В дисплее стоит контроллер LDS183..
Вот что нашел
Код инициализации для АВР:Philips PCF8833 compatible (LDS 183 LCD controller) RGB LCD module with 65K colors and 4-wire serial interface. The module has RAM included, that makes interfacing and programming very easy.
Спойлер
Код: Выделить всё
void LCD_init(void)
{
LCD_CS=0;
LCD_DATA=0;
LCD_CLK=1;
LCD_RESET = 1;
LCD_RESET = 0;
LCD_RESET = 1;
LCD_CLK=1;
LCD_DATA=1;
LCD_CLK=1;
delay_ms(10);
Send_to_lcd(CMD, 0x01); //Программный сброс
Send_to_lcd(CMD, 0x25); //Wtite Contrast
Send_to_lcd(DAT, 0x40);
Send_to_lcd(CMD, 0x11); //Выход из спящего режима
//sendCMD(0x03); // Booster on
delay_ms(10);
Send_to_lcd(CMD, 0x20); //Display Inversion Off
Send_to_lcd(CMD, 0x38); //Idle Mod Off
Send_to_lcd(CMD, 0x29); //Включение дисплея
Send_to_lcd(CMD, 0x13); //Normal Mod On
Send_to_lcd(CMD, 0x36); //Memory Access Control
Send_to_lcd(DAT, 0x00);
Send_to_lcd(CMD, 0x3a); //Установка цветовой палитры
#ifdef _8_BIT_COLOR
Send_to_lcd(DAT, 0x02); //Байт на пиксель 256 цветов
#else
Send_to_lcd(DAT, 0x05); //Два байта на пиксель 65536 цветов
#endif
Send_to_lcd(CMD, 0x2A); //X_Adress Area
Send_to_lcd(DAT, 0x00);
Send_to_lcd(DAT, 0x7F);
Send_to_lcd(CMD, 0xB4); //Frame Frequency Select
Send_to_lcd(DAT, 0x03);
Send_to_lcd(DAT, 0x08);
Send_to_lcd(DAT, 0x0B);
Send_to_lcd(DAT, 0x0E);
Send_to_lcd(CMD, 0xBA); //Display Control
Send_to_lcd(DAT, 0x07);
Send_to_lcd(DAT, 0x0D);
Send_to_lcd(CMD, 0x2B); //Page Adress Set
Send_to_lcd(DAT, 0x00);
Send_to_lcd(DAT, 0x7F);
}Собрал такой код используя данные с вышеуказанной темы, только вбил свои команды инициализации.
Спойлер
Код: Выделить всё
#include <stm32f10x.h>
#include <stm32f10x_conf.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.h>
#include <stm32f10x_spi.h>
#define RS_Hi (GPIOA->ODR |= GPIO_ODR_ODR1); // RS = 1
#define RS_Low (GPIOA->ODR &= ~GPIO_ODR_ODR1); // RS = 0
#define RESET_Hi (GPIOA->ODR |= GPIO_ODR_ODR2); // RESET = 1
#define RESET_Low (GPIOA->ODR &= ~GPIO_ODR_ODR2); // RESET = 0
#define CS_Hi (GPIOA->ODR |= GPIO_ODR_ODR3); // CS = 1
#define CS_Low (GPIOA->ODR &= ~GPIO_ODR_ODR3); // CS = 0
void delay_ms(uint32_t ms) {
volatile uint32_t nCount;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq (&RCC_Clocks);
nCount = (RCC_Clocks.HCLK_Frequency/10000)*ms;
for (; nCount != 0; nCount--);
}
void SPI_Send (uint16_t SPI_Data) {
//while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,SPI_Data);
__NOP(); __NOP();
while (SPI1->SR & SPI_SR_BSY);
}
void LCD_DATA(uint16_t data) {
CS_Low;
RS_Hi;
SPI_Send(data);
CS_Hi;
}
void LCD_CMD(uint16_t data) {
CS_Low;
RS_Low;
SPI_Send(data);
CS_Hi;
}
void LCD_init(void)
{
CS_Low;
RESET_Hi;
RESET_Low;
RESET_Hi;
delay_ms(10);
LCD_CMD(0x01);
LCD_CMD(0x25);
LCD_DATA(0x40);
LCD_CMD(0x11);
delay_ms(10);
LCD_CMD(0x20);
LCD_CMD(0x38);
LCD_CMD(0x29);
LCD_CMD(0x13);
LCD_CMD(0x36);
LCD_DATA(0x00);
LCD_CMD(0x05);
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);
}
int main(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 , ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOA , &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOA , &GPIO_InitStructure);
SPI_I2S_DeInit(SPI1);
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(SPI1,&SPI_InitStructure);
SPI_I2S_ClearFlag(SPI1,SPI_I2S_FLAG_TXE);
SPI_Cmd(SPI1, ENABLE);
LCD_init();
while (1)
{
}
return 0;
}
Помогите пожалуйста разобраться..
