дисплей от c75 жолтая подложка

nic123
Offline
Зарегистрирован: 03.08.2015

Пожалуста помогите переписать под ардуинку.

//LCD-экран (жёлтый текстолит) от Siemens C75 подключён по SPI
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//настройки контактов LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//линия ChipSelect
#define LCD_PORT_CS    PORTC
#define LCD_DDR_CS     DDRC
#define LCD_CS         0
//линия Reset
#define LCD_PORT_RESET PORTC
#define LCD_DDR_RESET  DDRC
#define LCD_RESET      1
//линия команда/данные
#define LCD_PORT_RS    PORTC
#define LCD_DDR_RS     DDRC
#define LCD_RS         2
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//базовые цвета LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define LCD_RED     0xF800
#define LCD_GREEN   0x07E0
#define LCD_BLUE    0x001F
#define LCD_BLACK   0x0000
#define LCD_WHITE   0xFFFF
#define LCD_YELLOW  0xFFE0
#define LCD_CYAN    0x07FF
#define LCD_MAGENTA 0xF81F
#define LCD_BLACK   0x0000
//----------------------------------------------------------------------------------------------------
//глобальные переменные
//----------------------------------------------------------------------------------------------------
 
//----------------------------------------------------------------------------------------------------
//прототипы функций
//----------------------------------------------------------------------------------------------------
void LCD_Init(void);//инициализация LCD-экрана
inline unsigned char SPI_SendData(unsigned char value);//послать по SPI-данные
unsigned char LCD_SendData8(unsigned char value);//послать 8-бит данных LCD-экрану
unsigned short LCD_SendData16(unsigned short value);//послать 16-бит данных LCD-экрану
unsigned char LCD_SendCommand(unsigned char command);//послать 8-бит команды LCD-экрану
void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2);//указать LCD-экрану прямоугольник вывода и начать процесс вывода
void LCD_SetPixel(unsigned short color);//установить пиксель в текущую позицию вывода LCD-экрана
void LCD_Enable(void);//включение управления LCD-экраном
void LCD_Disable(void);//выключение управления LCD-экраном
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//общие функции
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//----------------------------------------------------------------------------------------------------
//инициализация LCD-экрана
//----------------------------------------------------------------------------------------------------
void LCD_Init(void)
{
 //настраиваем порты
 LCD_DDR_CS|=(1<<LCD_CS);
 LCD_DDR_RS|=(1<<LCD_RS);
 LCD_DDR_RESET|=(1<<LCD_RESET);
 //инициализируем экран 
 LCD_PORT_CS|=(1<<LCD_CS);
 LCD_PORT_RS&=(0xff^(1<<LCD_RS));
 LCD_PORT_RESET&=(0xff^(1<<LCD_RESET));
 LCD_Enable();
 _delay_ms(500);
 LCD_PORT_RESET|=(1<<LCD_RESET);
 _delay_ms(500);
 LCD_SendCommand(0x00);//неизвестная команда
 LCD_SendData16(0x0001);//неизвестный параметр
 LCD_SendCommand(0x10);//неизвестная команда
 LCD_SendData16(0x1F92);//неизвестный параметр
 LCD_SendCommand(0x11);//неизвестная команда
 LCD_SendData16(0x0014);//неизвестный параметр
 LCD_SendCommand(0x00);//неизвестная команда
 LCD_SendData16(0x0001);//неизвестный параметр
 LCD_SendCommand(0x10);//неизвестная команда
 LCD_SendData16(0x1F92);//неизвестный параметр
 LCD_SendCommand(0x11);//неизвестная команда
 LCD_SendData16(0x001C);//неизвестный параметр
 LCD_SendCommand(0x28);//неизвестная команда
 LCD_SendData16(0x0006);//неизвестный параметр
 LCD_SendCommand(0x02);//неизвестная команда
 LCD_SendData16(0x0000);//неизвестный параметр
 
 LCD_SendCommand(0x12);//неизвестная команда
 LCD_SendData16(0x040F);//неизвестный параметр
  
 LCD_SendCommand(0x01);
 LCD_SendData16(0x31AF);
  
 LCD_SendCommand(0x07);
 LCD_SendData16(0x0033);
 LCD_Disable(); 
}
//----------------------------------------------------------------------------------------------------
//послать по SPI-данные
//----------------------------------------------------------------------------------------------------
inline unsigned char SPI_SendData(unsigned char value)
{
 SPDR=value;
 while(!(SPSR&(1<<SPIF)));
 return(SPDR);
}
//----------------------------------------------------------------------------------------------------
//послать 8-бит данных LCD-экрану
//----------------------------------------------------------------------------------------------------
inline unsigned char LCD_SendData8(unsigned char value)
{
 LCD_PORT_RS|=(1<<LCD_RS);
 return(SPI_SendData(value));
}
//----------------------------------------------------------------------------------------------------
//послать 16-бит данных LCD-экрану
//----------------------------------------------------------------------------------------------------
inline unsigned short LCD_SendData16(unsigned short value)
{
 LCD_PORT_RS|=(1<<LCD_RS);
 unsigned short r=SPI_SendData((value>>8)&0xff);
 r=r<<8;
 r|=SPI_SendData(value&0xff);
 return(r);
}
//----------------------------------------------------------------------------------------------------
//послать 8-бит команды LCD-экрану
//----------------------------------------------------------------------------------------------------
inline unsigned char LCD_SendCommand(unsigned char command)
{
 LCD_PORT_RS&=(0xff^(1<<LCD_RS));
 return(SPI_SendData(command));
}
//----------------------------------------------------------------------------------------------------
//указать LCD-экрану прямоугольник вывода и начать процесс вывода
//----------------------------------------------------------------------------------------------------
inline void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
{
 //устанавливаем первый и последний столбцы записи в память
 LCD_SendCommand(0x47);
 LCD_SendData8(y2);
 LCD_SendData8(y1); 
 LCD_SendCommand(0x44);
 LCD_SendData8(x2);
 LCD_SendData8(x1);
 //и текущие координаты вывода
 LCD_SendCommand(0x21);
 LCD_SendData8(x1);
 LCD_SendData8(y1);
 //устанавливаем направление вывода
 LCD_SendCommand(0x03);//установить режим вывода
 LCD_SendData16(0x7820);//понятия не имею, что это за биты, но 20 - вывод сверху-вниз
 //запускаем процесс вывода пикселей
 LCD_SendCommand(0x22);
}
//----------------------------------------------------------------------------------------------------
//установить пиксель в текущую позицию вывода LCD-экрана
//----------------------------------------------------------------------------------------------------
inline void LCD_SetPixel(unsigned short color)
{
 LCD_SendData16(color);
}
//----------------------------------------------------------------------------------------------------
//включение управления LCD-экраном
//----------------------------------------------------------------------------------------------------
inline void LCD_Enable(void)
{
 LCD_PORT_CS&=0xff^(1<<LCD_CS);
}
//----------------------------------------------------------------------------------------------------
//выключение управления LCD-экраном
//----------------------------------------------------------------------------------------------------
inline void LCD_Disable(void)
{
 LCD_PORT_CS|=(1<<LCD_CS);
}
 
Radjah
Offline
Зарегистрирован: 06.08.2014
nic123
Offline
Зарегистрирован: 03.08.2015
//LCD-экран (жёлтый текстолит) от Siemens C75 подключён по SPI

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//настройки контактов LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//линия ChipSelect
#define LCD_PORT_CS    PORTC
#define LCD_DDR_CS     DDRC
#define LCD_CS         0
//линия Reset
#define LCD_PORT_RESET PORTC
#define LCD_DDR_RESET  DDRC
#define LCD_RESET      1
//линия команда/данные
#define LCD_PORT_RS    PORTC
#define LCD_DDR_RS     DDRC
#define LCD_RS         2
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//базовые цвета LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define LCD_RED     0xF800
#define LCD_GREEN   0x07E0
#define LCD_BLUE    0x001F
#define LCD_BLACK   0x0000
#define LCD_WHITE   0xFFFF
#define LCD_YELLOW  0xFFE0
#define LCD_CYAN    0x07FF
#define LCD_MAGENTA 0xF81F
#define LCD_BLACK   0x0000
//----------------------------------------------------------------------------------------------------
//глобальные переменные
//----------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------
//прототипы функций
//----------------------------------------------------------------------------------------------------
void LCD_Init(void);//инициализация LCD-экрана
inline unsigned char SPI_SendData(unsigned char value);//послать по SPI-данные
unsigned char LCD_SendData8(unsigned char value);//послать 8-бит данных LCD-экрану
unsigned short LCD_SendData16(unsigned short value);//послать 16-бит данных LCD-экрану
unsigned char LCD_SendCommand(unsigned char command);//послать 8-бит команды LCD-экрану
void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2);//указать LCD-экрану прямоугольник вывода и начать процесс вывода
void LCD_SetPixel(unsigned short color);//установить пиксель в текущую позицию вывода LCD-экрана
void LCD_Enable(void);//включение управления LCD-экраном
void LCD_Disable(void);//выключение управления LCD-экраном
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//общие функции
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//----------------------------------------------------------------------------------------------------
//инициализация LCD-экрана
//----------------------------------------------------------------------------------------------------
void LCD_Init(void)
{
 //настраиваем порты
 LCD_DDR_CS|=(1<<LCD_CS);
 LCD_DDR_RS|=(1<<LCD_RS);
 LCD_DDR_RESET|=(1<<LCD_RESET);
 //инициализируем экран 
 LCD_PORT_CS|=(1<<LCD_CS);
 LCD_PORT_RS&=(0xff^(1<<LCD_RS));
 LCD_PORT_RESET&=(0xff^(1<<LCD_RESET));
 LCD_Enable();
 _delay_ms(500);
 LCD_PORT_RESET|=(1<<LCD_RESET);
 _delay_ms(500);
 LCD_SendCommand(0x00);//неизвестная команда
 LCD_SendData16(0x0001);//неизвестный параметр
 LCD_SendCommand(0x10);//неизвестная команда
 LCD_SendData16(0x1F92);//неизвестный параметр
 LCD_SendCommand(0x11);//неизвестная команда
 LCD_SendData16(0x0014);//неизвестный параметр
 LCD_SendCommand(0x00);//неизвестная команда
 LCD_SendData16(0x0001);//неизвестный параметр
 LCD_SendCommand(0x10);//неизвестная команда
 LCD_SendData16(0x1F92);//неизвестный параметр
 LCD_SendCommand(0x11);//неизвестная команда
 LCD_SendData16(0x001C);//неизвестный параметр
 LCD_SendCommand(0x28);//неизвестная команда
 LCD_SendData16(0x0006);//неизвестный параметр
 LCD_SendCommand(0x02);//неизвестная команда
 LCD_SendData16(0x0000);//неизвестный параметр
 
 LCD_SendCommand(0x12);//неизвестная команда
 LCD_SendData16(0x040F);//неизвестный параметр
  
 LCD_SendCommand(0x01);
 LCD_SendData16(0x31AF);
  
 LCD_SendCommand(0x07);
 LCD_SendData16(0x0033);
 LCD_Disable(); 
}
//----------------------------------------------------------------------------------------------------
//послать по SPI-данные
//----------------------------------------------------------------------------------------------------
inline unsigned char SPI_SendData(unsigned char value)
{
 SPDR=value;
 while(!(SPSR&(1<<SPIF)));
 return(SPDR);
}
//----------------------------------------------------------------------------------------------------
//послать 8-бит данных LCD-экрану
//----------------------------------------------------------------------------------------------------
inline unsigned char LCD_SendData8(unsigned char value)
{
 LCD_PORT_RS|=(1<<LCD_RS);
 return(SPI_SendData(value));
}
//----------------------------------------------------------------------------------------------------
//послать 16-бит данных LCD-экрану
//----------------------------------------------------------------------------------------------------
inline unsigned short LCD_SendData16(unsigned short value)
{
 LCD_PORT_RS|=(1<<LCD_RS);
 unsigned short r=SPI_SendData((value>>8)&0xff);
 r=r<<8;
 r|=SPI_SendData(value&0xff);
 return(r);
}
//----------------------------------------------------------------------------------------------------
//послать 8-бит команды LCD-экрану
//----------------------------------------------------------------------------------------------------
inline unsigned char LCD_SendCommand(unsigned char command)
{
 LCD_PORT_RS&=(0xff^(1<<LCD_RS));
 return(SPI_SendData(command));
}
//----------------------------------------------------------------------------------------------------
//указать LCD-экрану прямоугольник вывода и начать процесс вывода
//----------------------------------------------------------------------------------------------------
inline void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
{
 //устанавливаем первый и последний столбцы записи в память
 LCD_SendCommand(0x47);
 LCD_SendData8(y2);
 LCD_SendData8(y1); 
 LCD_SendCommand(0x44);
 LCD_SendData8(x2);
 LCD_SendData8(x1);
 //и текущие координаты вывода
 LCD_SendCommand(0x21);
 LCD_SendData8(x1);
 LCD_SendData8(y1);
 //устанавливаем направление вывода
 LCD_SendCommand(0x03);//установить режим вывода
 LCD_SendData16(0x7820);//понятия не имею, что это за биты, но 20 - вывод сверху-вниз
 //запускаем процесс вывода пикселей
 LCD_SendCommand(0x22);
}
//----------------------------------------------------------------------------------------------------
//установить пиксель в текущую позицию вывода LCD-экрана
//----------------------------------------------------------------------------------------------------
inline void LCD_SetPixel(unsigned short color)
{
 LCD_SendData16(color);
}
//----------------------------------------------------------------------------------------------------
//включение управления LCD-экраном
//----------------------------------------------------------------------------------------------------
inline void LCD_Enable(void)
{
 LCD_PORT_CS&=0xff^(1<<LCD_CS);
}
//----------------------------------------------------------------------------------------------------
//выключение управления LCD-экраном
//----------------------------------------------------------------------------------------------------
inline void LCD_Disable(void)
{
 LCD_PORT_CS|=(1<<LCD_CS);
}

 

nic123
Offline
Зарегистрирован: 03.08.2015

так красивей