Пн апр 16, 2018 16:54:06
Пт апр 27, 2018 17:39:42
Вс мар 03, 2019 20:03:21
Пт мар 06, 2020 01:29:14
В отличие от вывода полноцветного изображения, кодировка которого требует уйму места в памяти, для вывода одноцветных изображений любого цвета объём кода не намного превысит требующегося для работы с монохромным дисплеем, т.к. в этом случае есть возможность управлять каждым пикселем побитно, т.е. одним байтом сразу 8-ю точками экрана.
Для реализации такого незадокументированного способа мы воспользуемся редактором, который позволяет кодировать байт информации не сверху вниз, а горизонтально. Отличный вариант такого редактора – TheDotFactory (можно скачать в приложении). После поместим полученный код в память, а при выводе информации на экран будем применять следующую уловку: закрашивать пиксель, который должен быть видимым (бит=1), цветом, отличным от цвета фона, а пиксель, который видимым быть не должен (бит=0), цветом, совпадающим с цветом фона.
Сб мар 14, 2020 22:13:36
void PutChar (u8 ch, u8 x, u8 y)
{
u8 i, j;
SetCursorPos (x, y, x+FontHeight-1, y+FontWidth-1); // Задать область вывода
TFT_SET_CMD;
TFT_CS_LO;
SPI_Send_8(RAMWR);
TFT_SET_DAT;
for (i=0; i<5; i++) // вывод одноцветного изображения символа - 1 байт = 8 пикселей на экране
{
u8 Temp = font5x7 [5*ch + i];
for (j=0; j<8; j++)
{
if (Temp & 0x80) { SendData16(ColorPixel); } // Color Pixel
else { SendData16(ColorFon); } // Color Fon
Temp <<= 1;
}
}
TFT_CS_HI;
}
Вс мар 15, 2020 20:56:21
Пн мар 21, 2022 14:02:28
Вт дек 12, 2023 22:03:51
Вт дек 12, 2023 22:52:29
Чт дек 14, 2023 21:39:52
Вт янв 09, 2024 23:40:54
Ср янв 10, 2024 16:00:21
BDDW писал(а):Partial mode
BDDW писал(а):Даташит - курил. Но по англицки плохо понимаю. Хотелось бы на пальцах.
Пт янв 12, 2024 11:53:12
Пт янв 12, 2024 17:35:26
BDDW писал(а):Я занимаюсь сейчас ровно тем же. Столкнулся с тем, что получаю координаты точки. Xочу вывести ее на экран. Логично было бы дать одну команду - какую ни будь "SET Y" и далее строка Y и цвет точки (X автоматически должен увеличиться на 1) - 5 байт. А фактически получается: 0x2A + 4 байта, 0x2B + 4 байта, 0x2C + 2 байта. И того 13 байт.
Вс янв 14, 2024 04:26:04
#include <SPI.h>
#define SPI1_NSS_PIN PA4
byte data;
//дефайны команд управления дисплеем
#define SWRESET 0x01
#define SLPOUT 0x11
#define DISPON 0x29
#define CASET 0x2A //x0=int,x1=int
#define RASET 0x2B //y0=int,y1=int
#define RAMWR 0x2C
#define MADCTL 0x36 //RGB.3=1, остальные=0
#define COLMOD 0x3A //64k=5
#define INVON 0x21 // invert on0x21
//дефайны выводов порта В для управления дисплеем
#define TFT_CS PA1
#define A0 PA2 //dc
//инициализация дисплея
void disp_init()
{
Send(SWRESET,0); //программный ресет
delay(120);
Send(SLPOUT,0); //будим после ресета
delay(120);
Send(DISPON,0); //включаем экран
Send(MADCTL,0); // RGB и поворачиваем экран
Send(0b01111000,1);
Send(5,1);
Send(INVON,0);
}
void Send(unsigned char DATA, unsigned char DC)
{
unsigned char k;
if(DC) {sbi(A0);} else cbi(A0);
digitalWrite(SPI1_NSS_PIN, LOW); // manually take CSN low for SPI_1 transmission
data = SPI.transfer(DATA); //Send the HEX data 0x55 over SPI-1 port and store the received byte to the <data> variable.
digitalWrite(SPI1_NSS_PIN, HIGH); // manually take CSN high between spi transmissions
}
void Disp_set( unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1)
{
Send(CASET,0);
Send(0,1);
Send(x0+1,1);
Send(0,1);
Send((x0+x1),1);
Send(RASET,0);
Send(0,1);
Send(y0+26,1);
Send(0,1);
Send((y0+y1+25),1);
Send(RAMWR,0);
}
void Cls_disp(uint32_t back_color)
{
Disp_set(0,0,160,80);
for(int k=0;k<12800;k++){
Send((back_color>>16),1);
Send((back_color>>8),1);
Send((back_color&0xFF),1);
}
}
void setup() {
pinMode(PA1, OUTPUT);//sc
pinMode(PA2, OUTPUT);//ds
pinMode(PA3, OUTPUT);//res
pinMode(PA5, OUTPUT);
pinMode(PA7, OUTPUT);
digitalWrite(PA3, HIGH);//1
SPI.begin(); //Initialize the SPI_1 port.
SPI.setBitOrder(MSBFIRST); // Set the SPI_1 bit order
SPI.setDataMode(SPI_MODE0); //Set the SPI_2 data mode 0
SPI.setClockDivider(SPI_CLOCK_DIV8); //SPI_FREQ Slow speed (72 / 16 = 4.5 MHz SPI_1 speed)
pinMode(SPI1_NSS_PIN, OUTPUT);
disp_init();
Cls_disp(white);
}
Чт янв 25, 2024 08:31:05
BDDW писал(а):Программа инициализации для ST7735 подошла к ILI9341. Сейчас заказал еще ST7789.