дисплей от 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);
}
Линейкой по пальцам
//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); }так красивей