Better 发表于 2021-5-25 10:28:26

【LCD】段式液晶显示很暗 芯片型号:FM33LG048

#include "lcd.h"

void LcdInit(void)
{
    FL_GPIO_InitTypeDef gpioInitStruction;
    FL_LCD_InitTypeDef lcdInitStruction;

    // GPIO Init
    gpioInitStruction.mode = FL_GPIO_MODE_ANALOG;
    gpioInitStruction.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    gpioInitStruction.pull = FL_DISABLE;
    gpioInitStruction.analogSwitch = FL_DISABLE;

    gpioInitStruction.pin = FL_GPIO_PIN_0 | FL_GPIO_PIN_1 | FL_GPIO_PIN_2 |
      FL_GPIO_PIN_3 | FL_GPIO_PIN_4 ;
    FL_GPIO_Init(GPIOA, &gpioInitStruction);

    gpioInitStruction.pin = FL_GPIO_PIN_4 | FL_GPIO_PIN_5 | FL_GPIO_PIN_6 |
      FL_GPIO_PIN_7 | FL_GPIO_PIN_8 | FL_GPIO_PIN_9 | FL_GPIO_PIN_10 |
      FL_GPIO_PIN_11 | FL_GPIO_PIN_13 | FL_GPIO_PIN_14;
    FL_GPIO_Init(GPIOB, &gpioInitStruction);

    gpioInitStruction.pin = FL_GPIO_PIN_4 | FL_GPIO_PIN_5 | FL_GPIO_PIN_6 |
      FL_GPIO_PIN_7 | FL_GPIO_PIN_8 | FL_GPIO_PIN_9 | FL_GPIO_PIN_10 |
      FL_GPIO_PIN_11 | FL_GPIO_PIN_12;
    FL_GPIO_Init(GPIOC, &gpioInitStruction);

    gpioInitStruction.pin = FL_GPIO_PIN_0 | FL_GPIO_PIN_1 | FL_GPIO_PIN_2 |
      FL_GPIO_PIN_3 | FL_GPIO_PIN_4 | FL_GPIO_PIN_5;
    FL_GPIO_Init(GPIOD, &gpioInitStruction);

    // LCD Init
    lcdInitStruction.biasCurrent         =   FL_LCD_BIAS_CURRENT_HIGH;
    lcdInitStruction.mode                =   FL_LCD_DRIVER_MODE_INNER_RESISTER;
    lcdInitStruction.biasVoltage         =   FL_LCD_BIAS_VOLTAGE_LEVEL15;
    lcdInitStruction.biasMode            =   FL_LCD_BIAS_MODE_3BIAS;
    lcdInitStruction.waveform            =   FL_LCD_WAVEFORM_TYPEA;
    lcdInitStruction.COMxNum             =   FL_LCD_COM_NUM_4COM;
    lcdInitStruction.displayFreq         =   64;
    lcdInitStruction.flickOnTime         =   0;
    lcdInitStruction.flickOffTime      =   0;               
    FL_LCD_Init(LCD, &lcdInitStruction);

    // COM and SEG Init
    FL_LCD_EnableCOMEN(LCD, FL_LCD_COMEN_COM0);
    FL_LCD_EnableCOMEN(LCD, FL_LCD_COMEN_COM1);
    FL_LCD_EnableCOMEN(LCD, FL_LCD_COMEN_COM2);
    FL_LCD_EnableCOMEN(LCD, FL_LCD_COMEN_COM3);

    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG3);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG4);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG5);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG6);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG7);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG8);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG9);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG10);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG11);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG12);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG13);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG14);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG15);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG16);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG17);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG18);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG19);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG20);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG21);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG22);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG23);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG24);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG25);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG26);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG27);
    FL_LCD_EnableSEGEN0(LCD, FL_LCD_SEGEN0_SEG28);   
    FL_LCD_Enable(LCD);
}

void LcdDisplayAll(bool state)
{
    if (state == true)
    {
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG0, 0xffffffff);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG1, 0xffffffff);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG2, 0xffffffff);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG3, 0xffffffff);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG4, 0xffffffff);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG5, 0xffffffff);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG6, 0xffffffff);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG7, 0xffffffff);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG8, 0xffffffff);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG9, 0xffffffff);
    }
    else
    {
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG0, 0x00000000);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG1, 0x00000000);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG2, 0x00000000);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG3, 0x00000000);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG4, 0x00000000);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG5, 0x00000000);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG6, 0x00000000);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG7, 0x00000000);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG8, 0x00000000);
      FL_LCD_WriteData(LCD, FL_LCD_DATA_REG9, 0x00000000);
    }
}

uint32_t dispBuf = {0};

void LcdDisplayRefresh(void)
{
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG0, dispBuf);
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG1, dispBuf);
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG2, dispBuf);
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG3, dispBuf);
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG4, dispBuf);
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG5, dispBuf);
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG6, dispBuf);
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG7, dispBuf);
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG8, dispBuf);
    FL_LCD_WriteData(LCD, FL_LCD_DATA_REG9, dispBuf);
}

// true: 点亮; false: 熄灭
void LcdDisplayBIT(uint32_t x, uint32_t y, bool value)
{   
    FL_LCD_4COMDisplay(dispBuf, x - 1, y - 1, value);
    LcdDisplayRefresh();
}


顾博文 发表于 2021-5-25 15:19:13

这种情况 一般是 某个引脚配错,或者开启了,不该开启的seg_en,
将引脚减少到最小,只保留com 与 一个seg脚 ,seg_en也只开启一个。看看是否正常。如果正常,那就是某个引脚配错了

Better 发表于 2021-5-31 11:54:16

顾博文 发表于 2021-5-25 15:19
这种情况 一般是 某个引脚配错,或者开启了,不该开启的seg_en,
将引脚减少到最小,只保留com 与 一个seg ...

你好安照你说的方式测试过了现象依旧,显示还是很暗!

顾博文 发表于 2021-6-1 09:12:55

Better 发表于 2021-5-31 11:54
你好安照你说的方式测试过了现象依旧,显示还是很暗!

你确认下这个液晶是不是3V的。这个不应该啊。量下vdd是不是3V,再用示波器量下com与seg。com脚当接示波器探头的地,看看波形是不是 3V,
页: [1]
查看完整版本: 【LCD】段式液晶显示很暗 芯片型号:FM33LG048