没资料的屏幕怎么点亮?思路分享

这次尝试调通一个没资料的屏幕,型号是HYT13264,这个是淘宝上面的老王2.9元屏,成色很好但是长期库存没有资料和代码能点亮,仅仅只有一个引脚定义。这里我使用Arduino Nano作为控制器尝试点亮这个模块。

首先,已知别人找出来的线序如下

1 - CS
2 - RST	
3 - DC
4 - SCK
5 - SDA
6 - VCC
7 - GND
8 - K5
9 - K4
10 - LEDA 需接100欧左右限流电阻
11 - K3
12 - K2
13 - K1
14 - NC

根据这个打板,引出所有的线用于测试

没资料的屏幕怎么点亮?思路分享_第1张图片

那么这里对于控制芯片是未知的,所以直接按照SPI的先接上再说,电压VCC=5V
 

#define OLED_MOSI   11

#define OLED_CLK   13

#define OLED_DC    8

#define OLED_CS    10

#define OLED_RESET 9

此类点阵LCD屏幕模块,常见的主控芯片主要有这几个,ST7920,SSD1306,SSD1312,SH1106,其中前两者最多。

先测试ST7920,这里是使用Adafruit的代码demo,结果就是完全没有效果,屏幕上面根本没反应

没资料的屏幕怎么点亮?思路分享_第2张图片

然后测试,换用Adafruit的SSD1306的demo,使用的代码居然有反应了,但是乱码,根本看不见有什么,说明很接近,但不是没资料的屏幕怎么点亮?思路分享_第3张图片

 

接着我又去搜索,发现13264其实是比较少见的一个规格,所以我发现还有一种主控是ST7567以及类似型号ST7565,ST7567的代码根本不能用,连清屏都做不到

尝试使用ST7565,我发现可以用了,但是有问题,对比度被设置到了最高,而且图片也显示的不太对劲,很明显是因为图片的buffer是根据12864来设置的。

 使用的ST7565库的代码,我做了一下调试,发现是屏幕实例化 begin 时候就发送了一个对比度设置指令,导致变成这种黑屏,查找和搜索发现就在最下面部分,setContrast(contrast)这一句是设置对比度,我看示例代码还以为是设置DAT引脚,因为引脚D13是Arduino Nano的MISO

void ST7565_LCD::begin(uint8_t contrast)
{
  if (isHardwareSPI())
  {
    // Setup hardware SPI.
    SPI.begin();
    SPI.setClockDivider(ST7565_SPI_CLOCK_DIV);
    SPI.setDataMode(SPI_MODE3);
    SPI.setBitOrder(MSBFIRST);
  }
  else
  {
    // Setup software SPI.
    pinMode(sid, OUTPUT);
    pinMode(sclk, OUTPUT);

    // Set software SPI ports and masks.
    clkport = portOutputRegister(digitalPinToPort(sclk));
    clkpinmask = digitalPinToBitMask(sclk);
    mosiport = portOutputRegister(digitalPinToPort(sid));
    mosipinmask = digitalPinToBitMask(sid);
  }

  pinMode(a0, OUTPUT);
  pinMode(rst, OUTPUT);
  if (cs > 0)
  {
    pinMode(cs, OUTPUT);
    digitalWrite(cs, HIGH);
  }

  // reset the ST7565 display controller
  digitalWrite(rst, LOW);
  delay(500);
  digitalWrite(rst, HIGH);

  // LCD bias select
  command(CMD_SET_BIAS_7);
  // ADC select
  command(CMD_SET_ADC_NORMAL);
  // SHL select
  command(CMD_SET_COM_NORMAL);
  // Initial display line
  command(CMD_SET_DISP_START_LINE);

  // turn on voltage converter (VC=1, VR=0, VF=0)
  command(CMD_SET_POWER_CONTROL | 0x4);
  // wait for 50% rising
  delay(50);

  // turn on voltage regulator (VC=1, VR=1, VF=0)
  command(CMD_SET_POWER_CONTROL | 0x6);
  // wait >=50ms
  delay(50);

  // turn on voltage follower (VC=1, VR=1, VF=1)
  command(CMD_SET_POWER_CONTROL | 0x7);
  // wait
  delay(10);

  // set lcd operating voltage (regulator resistor, ref voltage resistor)
  command(CMD_SET_RESISTOR_RATIO | 0x6);
  command(CMD_DISPLAY_ON);
  command(CMD_SET_ALLPTS_NORMAL);
  setContrast(contrast);
  setRotation(0);
}

在库的头文件里面,重新配置分辨率并且上传后,屏幕太黑的问题解决了!显示的图案不对,极大可能是因为预置的图片是128x64的。

 

 经过了一些调整后,现在可以显示方块


#include 
#include 
#include 

// ST7565 LCD connection with Arduino board using software SPI
// #define LCD_DIN    11
// #define LCD_SCLK   13
// #define LCD_A0     8
// #define LCD_RESET  9
// #define LCD_CS     10
// ST7565_LCD display = ST7565_LCD(LCD_DIN, LCD_SCLK, LCD_A0, LCD_RESET, LCD_CS);

// Comment out above, uncomment this block to use hardware SPI
// connect LCD 'DIN' & 'SCLK' to board's hardware SPI pins
#define LCD_A0     8
#define LCD_RESET  9
#define LCD_CS     10
ST7565_LCD display = ST7565_LCD(LCD_A0, LCD_RESET, LCD_CS);


#define NUMFLAKES     10 // Number of snowflakes in the animation example

#define LOGO_HEIGHT   16
#define LOGO_WIDTH    16


void setup()   {                
  Serial.begin(9600);

  // initialize the ST7565 LCD display with contrast = 12 (0 <= coontrast <= 63)
  display.begin(3);

  display.display();
  delay(2000); // Pause for 2 seconds

 // testscrolldisplay();    // scroll whole display in different directions

  // Clear the buffer
  display.clearDisplay();
  display.drawRect(20,20,20,20,0);
  display.drawRect(0,0,40,50,0);
  display.display();


}

// main loop (nothing here!)
void loop() {
}

但是我发现显示的还是不对,怎么会从中间分开来了呢,明显是buff部分写入的代码还有问题。

  display.clearDisplay();
  display.drawRect(20,20,20,20,0);
  display.display();

 这种问题有可能是因为地址错位,或者是页面地址错位引起的,所以搜索后发现是在头文件里面定义。但是修改后发现没有改善,所以可能并不是这个引起

#define CMD_SET_COLUMN_UPPER 0x10

#define CMD_SET_COLUMN_LOWER 0x00

#define CMD_SET_PAGE 0xB0

继续查找其他部分,发现列地址其实是对的,但起始行不对,所以直接修改命令

command(CMD_SET_DISP_START_LINE);

检测发现,是向上偏移了32,所以我们进行修正,最终可以实现正确的显示设置的方块

 command(CMD_SET_DISP_START_LINE | 32);

 需要修改好的库,从这里下载:https://download.csdn.net/download/u012388993/89724021

 

你可能感兴趣的:(fpga开发)