مشکل در راه اندازی ال سی دی 0.96 اینچ با درایور st7735

با سلام خدمت مسئولین زحمت کش کافه ربات

بنده حدود چند روز پیش ماژول نمایشگر 0.96 اینچ OLED رنگی با ارتباط SPI و درایور ST7735 رو از سایت کافه روبات خریداری نمودم و برای راه اندازی این ال سی دی از چند لایبری آردینو موجود برای این ماژول استفاده کردم.(بوردی که سعی در راه اندازی ال سی دی با اون رو داشتم بورد ESP266 F بود) همچنین برای راه اندازی ال سی دی از برد STM32F103CUT6 نیز استفاده کردم و لایبری STM32 مربوط به این ال سی دی را نیز تست کردم. اما یک مشکل عجیبی که در راه اندازی در تمام حالت های فوق برای من پیش می آید این است که صفحه ال سی دی به طور ناقص روشن میشود و همیشه حدود یک چهارم آن خاموش باقی میماند.من مثال های آماده خود اردینو را روی این ال سی دی اجرا کردم. مثال ها به طور کامل اجرا میشوند ولی همچنان یک چهارم صفحه خاموش باقی میماند. 
نمیدانم چه نکته ای را در راه اندازی این ال سی دی رعایت نمیکنم که منجر به ایجاد این مشکل میشود. ممنون میشم اگه کسی پیشنهادی داره کمک کنه 

با تشکر

سلام وقت بخیر

این مورد مربوط به توابع راه اندازی اولیه oled هست. از طرف دیگه ایی اصلا نباید انتظار داشته باشید که کد ها و لایبراری های آماده برای شما همیشه درست کار کنند، یه جایی باید خودتون دست به کار بشید و شروع به ویرایش کنید تا مسئله حل بشه.

اینه که مهارت و تجربه شما رو بالا میبره نه صرفا استفاده از کد آماده و چشم بسته پروگرام کردن.

در این مورد هم یه نمونه کد قرار میدم که طبق همین بقیه لایبراری ها رو هم میتونید ادیت کنید.

 

#include <SPI.h>

#define CS 10
#define DC 8
#define RST 9
#define BL 7

#define uchar unsigned char
#define uint unsigned int
#define Xoffset 24
#define Yoffset 0

#define RED 0xf800
#define GREEN 0x07e0
#define BLUE 0x001f
#define WHITE 0xffff
#define BLACK 0x0000
#define YELLOW 0xFFE0
#define GRAY0 0xEF7D
#define GRAY1 0x8410
#define GRAY2 0x4208

void Contrast_Adjust();

//code uint typFNT_GBK16 hz16;

void Output_Pixel(uint x, uint y);

void delay_ms(uint time)
{
delay(time);
}

void SPI_WriteData(uchar Data)
{
SPI.transfer(Data);
}

void Lcd_WriteIndex(uchar Data)
{
digitalWrite(CS, LOW);
digitalWrite(DC, LOW);
SPI_WriteData(Data);
digitalWrite(CS, HIGH);
}
//ÏòÒº¾§ÆÁдһ¸ö8λÊý¾Ý
void Lcd_WriteData(uchar Data)
{
digitalWrite(CS, LOW);
digitalWrite(DC, HIGH);
SPI_WriteData(Data);
digitalWrite(CS, HIGH);
}
//ÏòÒº¾§ÆÁдһ¸ö16λÊý¾Ý
void LCD_WriteData_16Bit(unsigned int Data)
{
digitalWrite(CS, LOW);
digitalWrite(DC, HIGH);
SPI_WriteData(Data >> 8); //дÈë¸ß8λÊý¾Ý
SPI_WriteData(Data); //дÈëµÍ8λÊý¾Ý
digitalWrite(CS, HIGH);
}

void Reset()
{
digitalWrite(RST, LOW);
delay_ms(100);
digitalWrite(RST, HIGH);
delay_ms(100);
}

//////////////////////////////////////////////////////////////////////////////////////////////
//Òº¾§ÆÁ³õʼ»¯
void initial(void)
{

Lcd_WriteIndex(0xfe);
Lcd_WriteIndex(0xfe);
Lcd_WriteIndex(0xfe);
Lcd_WriteIndex(0xef);

Lcd_WriteIndex(0xb3);
Lcd_WriteData(0x03);

Lcd_WriteIndex(0x36);
Lcd_WriteData(0xd8);

Lcd_WriteIndex(0x3a);
Lcd_WriteData(0x05);

Lcd_WriteIndex(0xb6);
Lcd_WriteData(0x11);
Lcd_WriteIndex(0xac);
Lcd_WriteData(0x0b);

Lcd_WriteIndex(0xb4);
Lcd_WriteData(0x21);

Lcd_WriteIndex(0xb1);
Lcd_WriteData(0xc0);

Lcd_WriteIndex(0xe6);
Lcd_WriteData(0x50);
Lcd_WriteData(0x43);
Lcd_WriteIndex(0xe7);
Lcd_WriteData(0x56);
Lcd_WriteData(0x43);

Lcd_WriteIndex(0xF0);
Lcd_WriteData(0x1f);
Lcd_WriteData(0x41);
Lcd_WriteData(0x1B);
Lcd_WriteData(0x55);
Lcd_WriteData(0x36);
Lcd_WriteData(0x3d);
Lcd_WriteData(0x3e);
Lcd_WriteData(0x0);
Lcd_WriteData(0x16);
Lcd_WriteData(0x08);
Lcd_WriteData(0x09);
Lcd_WriteData(0x15);
Lcd_WriteData(0x14);
Lcd_WriteData(0xf);

Lcd_WriteIndex(0xF1);

Lcd_WriteData(0x1f);
Lcd_WriteData(0x41);
Lcd_WriteData(0x1B);
Lcd_WriteData(0x55);
Lcd_WriteData(0x36);
Lcd_WriteData(0x3d);
Lcd_WriteData(0x3e);
Lcd_WriteData(0x0);
Lcd_WriteData(0x16);
Lcd_WriteData(0x08);
Lcd_WriteData(0x09);
Lcd_WriteData(0x15);
Lcd_WriteData(0x14);
Lcd_WriteData(0xf);

Lcd_WriteIndex(0xfe);
Lcd_WriteIndex(0xff);

Lcd_WriteIndex(0x35);
Lcd_WriteData(0x00);
Lcd_WriteIndex(0x44);
Lcd_WriteData(0x00);
Lcd_WriteIndex(0x11);
delay_ms (120);
Lcd_WriteIndex(0x29);
//Lcd_WriteIndex(0x2c);

Lcd_WriteIndex(0x2A); //Set Column Address
Lcd_WriteData(0x00);
Lcd_WriteData(0x18);
Lcd_WriteData(0x00);
Lcd_WriteData(0x67);
Lcd_WriteIndex(0x2B); //Set Page Address
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
Lcd_WriteData(0x9f);
Lcd_WriteIndex(0x2c);

}

void Lcd_SetRegion(unsigned int x_start, unsigned int y_start, unsigned int x_end, unsigned int y_end)
{

Lcd_WriteIndex(0x2a);
Lcd_WriteData(0x00);
Lcd_WriteData(x_start + Xoffset);
Lcd_WriteData(0x00);
Lcd_WriteData(x_end + Xoffset);

Lcd_WriteIndex(0x2b);
Lcd_WriteData(0x00);
Lcd_WriteData(y_start + Yoffset);
Lcd_WriteData(0x00);
Lcd_WriteData(y_end + Yoffset);
Lcd_WriteIndex(0x2c);

}

void PutPixel(uint x_start, uint y_start, uint color)
{
Lcd_SetRegion(x_start, y_start, x_start + 1, y_start + 1);
LCD_WriteData_16Bit(color);
}

void fillRect(uint x, uint y, uint w, uint h, uint color)
{
Lcd_SetRegion(x, y, x + w - 1, y + h - 1);
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
LCD_WriteData_16Bit(color);
}
}
}

void drawRect(uint x, uint y, uint w, uint h, uint color)
{
fillRect(x, y, w, 1, color);
fillRect(x, y + h - 1, w, 1, color);
fillRect(x, y, 1, h, color);
fillRect(x + w - 1, y, 1, h, color);
}

void dsp_single_colour(int color)
{
fillRect(0, 0, 80, 160, color);
drawRect(0, 0, 80, 160, WHITE); //outer rectangle
drawRect(8, 8, 64, 144, BLACK); //inner rectangle
delay(1000);
}

void setup()
{
SPI.begin();
pinMode(CS, OUTPUT);
pinMode(DC, OUTPUT);
pinMode(RST, OUTPUT);
pinMode(BL, OUTPUT);
digitalWrite(BL, HIGH);
Reset();
initial();
}

void loop(void)
{
//Font_Test();
dsp_single_colour(0xf800);//RED
dsp_single_colour(0x07e0);//GREEN
dsp_single_colour(0x001f);//BLUE
delay_ms(5000);
}

#if 0
{
// my style of init table: (cmd), N, data…
(0xfe), 0,
(0xfe), 0,
(0xfe), 0,
(0xef), 0,
(0xb3), 1, 0x03,
(0x36), 1, 0xd8,
(0x3a), 1, 0x05,
(0xb6), 1, 0x11,
(0xac), 1, 0x0b,
(0xb4), 1, 0x21,
(0xb1), 1, 0xc0,
(0xe6), 2, 0x50, 0x43,
(0xe7), 2, 0x56, 0x43,
(0xF0), 12, 0x1f, 0x41, 0x1B, 0x55, 0x36, 0x3d, 0x3e, 0x0, 0x16, 0x08, 0x09, 0x15, 0x14, 0xf,
(0xF1), 12, 0x1f, 0x41, 0x1B, 0x55, 0x36, 0x3d, 0x3e, 0x0, 0x16, 0x08, 0x09, 0x15, 0x14, 0xf,
(0xfe), 0,
(0xff), 0,
(0x35), 1, 0x00,
(0x44), 1, 0x00,
(0x11), 0,
delay_ms (120);
(0x29), 0,
/*** (0x2c), 0,***/
(0x2A), 4, /Set Column Address/ 0x00, 0x18, 0x00, 0x67,
(0x2B), 4, /Set Page Address/ 0x00, 0x00, 0x00, 0x9f,
(0x2c), 0,
};
#endif