OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2105|回复: 0

[LCD模块] 请教各位大侠液晶不显示原因

[复制链接]

1

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2021-12-15
在线时间
5 小时
发表于 2022-6-11 17:05:27 | 显示全部楼层 |阅读模式
我采用的是LM6020FCW液晶模块,用到的引脚功能如下图,采用的控制芯片是ST7565,采用控制模式是8080。
编写的程序如下:
#include "at32f413.h"
#include "at32f413_gpio.h"
#include "at32f413_conf.h"


void delay_ms(uint16_t m);void delay_us(uint8_t m);
void LCD_GPIO_init(void);
void WriteCom(uint8_t ComData);
void WriteData(uint8_t Data);
void hz_disp16(uint8_t x,uint8_t y,const uint8_t *DisplayData);
void num_disp8(uint8_t x,uint8_t y,const uint8_t *DisplayData);
void LCD_Init(void);
void LCM_Clear(void);
void hz_disp16f(uint8_t x,uint8_t y,const uint8_t *DisplayData);
void num_disp8f(uint8_t x,uint8_t y,const uint8_t *DisplayData);
void NOP(void);


const uint8_t char_0[]=
{0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00,0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00};
const uint8_t char_1[]=
{0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00};
const uint8_t wan[]=
{0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,
0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00};
const uint8_t zhou[]=
{0x10,0x60,0x02,0x8C,0x00,0xC0,0x00,0xFF,0x40,0x80,0xFE,0x40,0x80,0xFF,0x00,0x00,
0x04,0x04,0x7E,0x01,0x01,0x80,0x60,0x1F,0x00,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00};

void NOP(void)
{

}


void LCD_GPIO_init(void)
{
  gpio_init_type gpio_init_struct;
  crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
        crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
        crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
        crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
  gpio_default_para_init(&gpio_init_struct);

/************PA12 背光******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  gpio_init_struct.gpio_pins = GPIO_PINS_12;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOA, &gpio_init_struct);

/************PA15 CS******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  gpio_init_struct.gpio_pins = GPIO_PINS_15;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOA, &gpio_init_struct);

/************PC10 RES******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  gpio_init_struct.gpio_pins = GPIO_PINS_10;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOC, &gpio_init_struct);

/************PC11 A0******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  gpio_init_struct.gpio_pins = GPIO_PINS_11;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOC, &gpio_init_struct);

/************PC12 WR******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  gpio_init_struct.gpio_pins = GPIO_PINS_12;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOC, &gpio_init_struct);  

/************PD2 RD******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  gpio_init_struct.gpio_pins = GPIO_PINS_2;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOD, &gpio_init_struct);  

/************PB0 D0******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  =GPIO_OUTPUT_OPEN_DRAIN;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pins = GPIO_PINS_0;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOB, &gpio_init_struct);   

/************PB1 D1******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  =GPIO_OUTPUT_OPEN_DRAIN;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pins = GPIO_PINS_1;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOB, &gpio_init_struct);

/************PB2 D2******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  =GPIO_OUTPUT_OPEN_DRAIN;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pins = GPIO_PINS_2;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOB, &gpio_init_struct);

/************PB3 D3******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pins = GPIO_PINS_3;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOB, &gpio_init_struct);

/************PB4 D4******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pins = GPIO_PINS_4;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOB, &gpio_init_struct);

/************PB5 D5******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pins = GPIO_PINS_5;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOB, &gpio_init_struct);

/************PB6 D6******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pins = GPIO_PINS_6;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOB, &gpio_init_struct);

  /************PB7 D7******************/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pins = GPIO_PINS_7;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOB, &gpio_init_struct);


}

void WriteCom(uint8_t ComData)   
{   
                            gpio_bits_reset(GPIOA, GPIO_PINS_15);//CS=0
               gpio_bits_reset(GPIOC, GPIO_PINS_11);// A0 = 0;
               gpio_bits_set(GPIOD, GPIO_PINS_2);// RD = 1;
               gpio_bits_reset(GPIOC, GPIO_PINS_12);//WR=0
                                 delay_us(3);
                gpio_port_wirte(GPIOB, (gpio_output_data_read(GPIOB)&0xff00)+ComData);
                delay_us(3);
         gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
                      gpio_bits_set(GPIOA, GPIO_PINS_15);//CS=1
              
    /*        gpio_bits_reset(GPIOC, GPIO_PINS_11);// A0 = 0;
             gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
             gpio_bits_set(GPIOD, GPIO_PINS_2);// RD = 1;
             delay_us(3);
             gpio_port_wirte(GPIOB, (gpio_output_data_read(GPIOB)&0xff00)+ComData);
             delay_us(3);
             gpio_bits_reset(GPIOA, GPIO_PINS_15);//CS=0
             gpio_bits_reset(GPIOC, GPIO_PINS_12);//WR=0
             delay_us(3);
             gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
             gpio_bits_set(GPIOA, GPIO_PINS_15);//CS=1  */
}   

void WriteData(uint8_t Data)   
{   
             gpio_bits_reset(GPIOA, GPIO_PINS_15);//CS=0
                          gpio_bits_set(GPIOC, GPIO_PINS_11);// A0 = 1;   
                    gpio_bits_set(GPIOD, GPIO_PINS_2);// RD = 1;
                         gpio_bits_reset(GPIOC, GPIO_PINS_12);//WR=0
       delay_us(3);
       gpio_port_wirte(GPIOB,(gpio_output_data_read(GPIOB)&0xff00)+Data);
       delay_us(3);
       gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
                          gpio_bits_set(GPIOA, GPIO_PINS_15);//CS=1

     /* gpio_bits_set(GPIOC, GPIO_PINS_11);// A0 = 1;
             gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
             gpio_bits_set(GPIOD, GPIO_PINS_2);// RD = 1;
             delay_us(3);
             gpio_port_wirte(GPIOB, (gpio_output_data_read(GPIOB)&0xff00)+Data);
             delay_us(3);
             gpio_bits_reset(GPIOA, GPIO_PINS_15);//CS=0
             gpio_bits_reset(GPIOC, GPIO_PINS_12);//WR=0
             delay_us(3);
             gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
             gpio_bits_set(GPIOA, GPIO_PINS_15);//CS=1    */

}  

void hz_disp16(uint8_t x,uint8_t y,const uint8_t *DisplayData)
{
                 uint8_t i,j;
                 for(i=0;i<2;i++)
                        {       
                                WriteCom(0xb0|(2*x+i));
                                WriteCom(0x10|((y>>4)&0x0f));
                                WriteCom(0x01|(y&0x0f));
                                 for(j=0;j<16;j++)
                      {
                                                        WriteData(*DisplayData++);
                                        }
                  }
       
}

void num_disp8(uint8_t x,uint8_t y,const uint8_t *DisplayData)
{
                 uint8_t i,j;
                 for(i=0;i<2;i++)
                        {       
                                WriteCom(0xb0|(2*x+i));
                                WriteCom(0x10|((y>>4)&0x0f));
                                WriteCom(0x01|(y&0x0f));
                                 for(j=0;j<8;j++)
                      {
                                                        WriteData(*DisplayData++);
                                        }
                  }
}  


void LCD_Init(void)
{   
   gpio_bits_set(GPIOC, GPIO_PINS_10);//RES=1
         gpio_bits_reset(GPIOC, GPIO_PINS_10);//RES=0
         delay_ms(50);
         gpio_bits_set(GPIOC, GPIO_PINS_10);//RES=1
          delay_ms(800);
               
                //WriteCom(0xaf);//CMD_DISPLAY_ON
                //delay_ms(5);
                WriteCom(0x40);// display start line=0
                delay_ms(5);
                WriteCom(0xa0);//ADC正序
                delay_ms(5);
                WriteCom(0xa6);//正常显示,a7反白显示
                delay_ms(5);
                WriteCom(0xa4);//CMD_DISPLAY_ALL_POINTS_OFF非全屏显示
                delay_ms(5);
                WriteCom(0xa2);//偏压1/9 a3偏压1/7
                delay_ms(5);
                WriteCom(0xc8);//CMD_COM_OUTPUT_MODE_SET模块上端为第0行
                delay_ms(5);
                WriteCom(0x2f);//CMD_POWER_CONTROL_SET模块内部开关电路电源
                delay_ms(5);
                WriteCom(0x27);//CMD_V0显示对比度,20-27
                delay_ms(5);
                WriteCom(0xf8);
                delay_ms(5);
                WriteCom(0x00);//倍压比
                delay_ms(5);
                WriteCom(0x81);
                delay_ms(5);
                WriteCom(0x24);//亮度0-3f
                delay_ms(5);
                WriteCom(0xaf);//CMD_DISPLAY_ON显示开


}

void LCM_Clear(void)
{
   uint8_t i,j;
    for (i=0xb0;i<0xb9;i++)
   {
        // Set Page Address
        WriteCom(i);

       // Set Column Address = 0
        WriteCom(0x10);
        WriteCom(0x00);   

        for (j=0;j<128;j++)
        {
            WriteData(0xaa);
        }
    }
}

void hz_disp16f(uint8_t x,uint8_t y,const uint8_t *DisplayData)
{
                                 WriteCom(0xa7);
                                 hz_disp16(x,y,DisplayData);
                                WriteCom(0xa6);
}


void num_disp8f(uint8_t x,uint8_t y,const uint8_t *DisplayData)
{
                                 WriteCom(0xa7);
                                 num_disp8(x,y,DisplayData);
                                WriteCom(0xa6);
}
int main(void)
{
        LCD_GPIO_init();
        LCD_Init();
        LCM_Clear();
        while(1)
    {
               
                        gpio_bits_set(GPIOA, GPIO_PINS_12);
                        hz_disp16f(0,4,wan);
                        delay_ms(2000);
                        LCM_Clear();
                        num_disp8f(0,0,char_0);
                        hz_disp16(0,4,wan);
                        delay_ms(2000);
                        gpio_bits_reset(GPIOA, GPIO_PINS_12);
                        delay_ms(2000);
                         LCM_Clear();

    }
}


/*void delay_ms(uint16_t nms)
{
  uint32_t temp = 0;
  while(nms)
  {
    if(nms > 50)
    {
      SysTick->LOAD = (uint32_t)(50 * 12000);
      nms -= 50;
    }
    else
    {
      SysTick->LOAD = (uint32_t)(nms * 12000);
      nms = 0;
    }
    SysTick->VAL = 0x00;
    SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
    do
    {
      temp = SysTick->CTRL;
    }
                while((temp & 0x01) && !(temp & (1 << 16)));
               
                        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
                        SysTick->VAL = 0x00;
               
  }
}*/
void delay_ms(uint16_t m)        // 12MHz Xtal, close to ms value
{
        uint16_t j;
        uint16_t i;
       
        for(i=0; i<m; i++)
            for(j=0; j<109; j++)
                NOP();
}

void delay_us(uint8_t m)
{
      while(m--);
}



下载后运行,只看到背光灯能够亮灭,液晶屏没有字迹显示。
请各位大侠指点一下是哪里不对!!!!


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 06:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表