дисплей от c75 жолтая подложка
- Войдите на сайт для отправки комментариев
Пнд, 03/08/2015 - 13:08
Пожалуста помогите переписать под ардуинку.
//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);
}
Линейкой по пальцам
так красивей