请选择 进入手机版 | 继续访问电脑版
查看: 11020|回复: 15

lcd显示不清楚

[复制链接]

9

主题

29

帖子

327

积分

高级工程师

Rank: 3Rank: 3

积分
327
发表于 2018-6-20 13:47:40 | 显示全部楼层 |阅读模式
lcd3.jpg lcd2.jpg lcd1.jpg
如上图,这是使用fm33a048内部lcd显示效果,有些段显示不清楚,请问会是什么原因呢?
下面是液晶初始化
  1. //IO配置为液晶功能
  2. void LCD_IO_Init(void)
  3. {
  4.     AnalogIO( GPIOA, GPIO_Pin_5 );                //PA5; //COM0
  5.     AnalogIO( GPIOA, GPIO_Pin_4 );                //PA4; //COM1
  6.     AnalogIO( GPIOA, GPIO_Pin_7 );                //PA7; //COM2
  7.     AnalogIO( GPIOA, GPIO_Pin_6 );                //PA6; //COM3
  8.     AnalogIO( GPIOA, GPIO_Pin_3 );                //PA3; //COM4
  9.     AnalogIO( GPIOA, GPIO_Pin_2 );                //PA2; //COM5
  10.     AnalogIO( GPIOA, GPIO_Pin_1 );                //PA1; //COM6
  11.     AnalogIO( GPIOA, GPIO_Pin_0 );                //PA0; //COM7

  12.     AnalogIO( GPIOA, GPIO_Pin_8 );                //PA8;//SEG1
  13.     AnalogIO( GPIOA, GPIO_Pin_9 );                //PA9;//SEG2
  14.     AnalogIO( GPIOA, GPIO_Pin_10 );                //PA10;//SEG3

  15.     AnalogIO( GPIOA, GPIO_Pin_11 );                //PA11;//SEG4
  16.     AnalogIO( GPIOA, GPIO_Pin_12 );                //PA12;//SEG5
  17.     AnalogIO( GPIOA, GPIO_Pin_13 );                //PA13;//SEG6
  18.     AnalogIO( GPIOB, GPIO_Pin_4 );                //PB4;//SEG7
  19.     AnalogIO( GPIOB, GPIO_Pin_5 );                //PB5;//SEG8

  20.     AnalogIO( GPIOB, GPIO_Pin_6 );                //PB6;//SEG9
  21.     AnalogIO( GPIOB, GPIO_Pin_7 );                //PB7;//SEG10
  22.     AnalogIO( GPIOB, GPIO_Pin_8 );                //PB8;//SEG11
  23.     AnalogIO( GPIOB, GPIO_Pin_9 );                //PB9;//SEG12

  24.     AnalogIO( GPIOB, GPIO_Pin_10 );                //PB10;//SEG13

  25.     AnalogIO( GPIOB, GPIO_Pin_11);                //PB11;//SEG14
  26.     AnalogIO( GPIOB, GPIO_Pin_12 );                //PB12;//SEG15
  27.     AnalogIO( GPIOB, GPIO_Pin_13 );                //PB13;//SEG16
  28.     AnalogIO( GPIOB, GPIO_Pin_14 );                //PB14;//SEG17
  29.     AnalogIO( GPIOB, GPIO_Pin_15 );                //PB15;//SEG18
  30.     AnalogIO( GPIOD, GPIO_Pin_2 );                //PD2;//SEG19
  31.     AnalogIO( GPIOD, GPIO_Pin_3 );                //PD3;//SEG20
  32. }
  33. /*使能液晶COM,SEG驱动波形输出*/
  34. void LCD_COMSEGEN_Init(void)
  35. {
  36.     uint32_t Temp32;

  37.     RCC_PERCLK_SetableEx(LCDCLK, ENABLE);                //LCD时钟使能

  38.     /* LCD COM0~3输出使能控制*/
  39.     Temp32 = (
  40.             LCD_COM_EN_COMEN0_Msk |
  41.             LCD_COM_EN_COMEN1_Msk |
  42.             LCD_COM_EN_COMEN2_Msk |
  43.             LCD_COM_EN_COMEN3_Msk
  44.             );
  45.     LCD_COM_EN_Write(Temp32);

  46.     /* LCD SEG0~31输出使能控制*/
  47.     Temp32 = (LCD_SEG_EN0_SEGEN0_Msk |
  48.             LCD_SEG_EN0_SEGEN1_Msk |
  49.             LCD_SEG_EN0_SEGEN2_Msk |
  50.             LCD_SEG_EN0_SEGEN3_Msk |
  51.             LCD_SEG_EN0_SEGEN4_Msk |
  52.             LCD_SEG_EN0_SEGEN5_Msk |
  53.             LCD_SEG_EN0_SEGEN6_Msk |
  54.             LCD_SEG_EN0_SEGEN7_Msk |
  55.             LCD_SEG_EN0_SEGEN8_Msk |
  56.             LCD_SEG_EN0_SEGEN9_Msk |
  57.             LCD_SEG_EN0_SEGEN10_Msk |
  58.             LCD_SEG_EN0_SEGEN11_Msk |
  59.             LCD_SEG_EN0_SEGEN12_Msk |
  60.             LCD_SEG_EN0_SEGEN13_Msk |
  61.             LCD_SEG_EN0_SEGEN14_Msk |
  62.             LCD_SEG_EN0_SEGEN15_Msk |
  63.             LCD_SEG_EN0_SEGEN16_Msk |
  64.             LCD_SEG_EN0_SEGEN17_Msk |
  65.             LCD_SEG_EN0_SEGEN18_Msk |
  66.             LCD_SEG_EN0_SEGEN19_Msk
  67.             );
  68.     LCD_SEG_EN0_Write(Temp32);

  69.     /* LCD SEG32~43,COM4~7输出使能控制*/
  70.     Temp32 = (
  71.             LCD_SEG_EN1_COM4ENo8COM_Msk |
  72.             LCD_SEG_EN1_COM5ENo8COM_Msk |
  73.             LCD_SEG_EN1_COM6ENo8COM_Msk |
  74.             LCD_SEG_EN1_COM7ENo8COM_Msk
  75.             );
  76.     LCD_SEG_EN1_Write(Temp32);
  77. }

  78. /*显示频率寄存器计算
  79. 输入
  80. uint32_t LMUX        COM数量:LCD_LCDSET_LMUX_4COM,LCD_LCDSET_LMUX_6COM,LCD_LCDSET_LMUX_8COM
  81. uint32_t WFT        驱动波形:LCD_LCDSET_WFT_ATYPE,LCD_LCDSET_WFT_BTYPE
  82. uint32_t FreqWanted        刷新频率:1~100
  83. 输出
  84. 显示频率寄存器配置值
  85. */
  86. uint32_t LCD_DF_Calc(uint32_t LMUX, uint32_t WFT, uint32_t FreqWanted)
  87. {
  88.     uint8_t DivWFT;
  89.     uint32_t DFResult;

  90.     if(LCD_LCDSET_WFT_ATYPE == WFT)
  91.         DivWFT = 2;
  92.     else
  93.         DivWFT = 4;

  94.     if((FreqWanted > 0)&&(FreqWanted <= 100))
  95.     {
  96.         DFResult = (uint32_t)(32768.0/(float)((LMUX*2+4)*FreqWanted*DivWFT) + 0.5);
  97.     }
  98.     else
  99.     {
  100.         DFResult = 32;
  101.     }

  102.     return DFResult;
  103. }

  104. /*Lcd模块初始化*/
  105. void Init_LCD(void)
  106. {
  107.     uint32_t DispBuf[10];
  108.     LCD_InitTypeDef LCD_InitStruct;
  109.     LCD_Boost_InitTypeDef Boost_InitStruct;

  110.     LCD_IO_Init();
  111.     LCD_COMSEGEN_Init();

  112.     RCC_PERCLK_SetableEx(LCDCLK, ENABLE);                //LCD时钟使能

  113.     m_memset(DispBuf, 0xFF, 10*4);
  114.     LCD_DISPDATAx_Refresh(DispBuf);//全屏显示

  115.     //lcd初始化配置
  116.     LCD_InitStruct.LMUX                = LCD_LCDSET_LMUX_8COM;                                /*!<COM数量选择*/
  117.     LCD_InitStruct.ENMODE        = LCD_LCDDRV_ENMODE_INNERRESISTER;        /*!<驱动模式选择*/
  118.     LCD_InitStruct.WFT                = LCD_LCDSET_WFT_ATYPE;                                /*!<驱动波形选择*/
  119.     LCD_InitStruct.DF                = LCD_DF_Calc(LCD_InitStruct.LMUX, LCD_InitStruct.WFT, 0);        /*!<显示频率控制寄存器*/
  120.     LCD_InitStruct.BIASMD        = LCD_LCDSET_BIASMD_3BIAS;                /*!<偏置类型控制*/
  121.     LCD_InitStruct.SCFSEL        = LCD_LCDDRV_SCFSEL_X1;                        /*!<SC频率选择*/  //仅在片外电容模式下有效
  122.     LCD_InitStruct.SC_CTRL        = LCD_LCDDRV_SC_CTRL_ONE;                /*!<片外电容驱动模式下,驱动方式控制*/
  123.     LCD_InitStruct.IC_CTRL        = LCD_LCDDRV_IC_CTRL_L3;                /*!<片内电阻模式下,驱动电流大小*/
  124.     LCD_InitStruct.LCDBIAS        = 15;                                                        /*!<显示灰度设置*/
  125.     LCD_InitStruct.ANTIPOLAR        = ENABLE;                                        /*!<防极化使能控制*/

  126.     LCD_InitStruct.TEST                = DISABLE;                                                /*!<测试模式使能控制,仅在DISPMD=1的情况下有效*/
  127.     LCD_InitStruct.DISPMD        = DISABLE;                                                /*!<测试模式使能控制*/

  128.     LCD_InitStruct.LCCTRL        = LCD_LCDTEST_LCCTRL_0;                        /*!<保持为0*/
  129.     LCD_InitStruct.TESTEN        = DISABLE;                                                /*!<保持关闭*/

  130.     LCD_InitStruct.FLICK        = DISABLE;                                                /*!<显示闪烁使能控制*/
  131.     LCD_InitStruct.TON                = 0;                                                        /*!<闪烁显示时的点亮时间=TON×0.25秒*/
  132.     LCD_InitStruct.TOFF                = 0;                                                        /*!<闪烁显示时的熄灭时间=TOFF×0.25秒*/
  133.     LCD_InitStruct.DONIE        = DISABLE;                                                /*!<显示点亮中断使能控制*/
  134.     LCD_InitStruct.DOFFIE        = DISABLE;                                                /*!<显示熄灭中断使能控制*/

  135.     LCD_InitStruct.LCDEN        = ENABLE;                                                /*!<LCD显示使能控制*/

  136.     LCD_Init(&LCD_InitStruct);


  137.     //boost初始化配置
  138.     Boost_InitStruct.OSC_CFG        = LCD_LCDBSTCON_OSC_CFG_GRADE2;                /*!<BOOST环振频率配置信号,值越大频率越高,驱动越强,功耗越高*/  //推荐使用GRADE1
  139.     Boost_InitStruct.VLCDCFG        = LCD_LCDBSTCON_VLCDCFG_3P0V;                /*!<VLCD输出电压配置*/
  140.     Boost_InitStruct.BUFENB                = ENABLE;                                        /*!<基准源Buffer使能控制*/  //需要打开
  141.     Boost_InitStruct.BUFBYP                = DISABLE;                                        /*!<基准源Buffer Bypass使能控制*/  //需要关闭
  142.     Boost_InitStruct.VLCDPD                = DISABLE;                                        /*!<VLCD下拉使能控制*/  //需要关闭
  143.     Boost_InitStruct.BOOST_TEN        = DISABLE;                                        /*!<Booster测试信号*/  //保持关闭即可
  144.     Boost_InitStruct.BOOST_EN        = DISABLE;                                        /*!<Booster使能控制*/

  145.     LCD_Boost_Init(&Boost_InitStruct);
  146. }
复制代码
原理图
FM33A0x.pdf (334.31 KB, 下载次数: 206)
回复

使用道具 举报

5

主题

22

帖子

2253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2253
发表于 2018-6-21 09:19:29 | 显示全部楼层
按如下配置打开boost功能试试看,另外,//LCD时钟使能要在配置之前就打开
    //boost初始化配置
    Boost_InitStruct.OSC_CFG        = LCD_LCDBSTCON_OSC_CFG_GRADE1;                /*!<BOOST环振频率配置信号,值越大频率越高,驱动越强,功耗越高*/  //推荐使用GRADE1
    Boost_InitStruct.VLCDCFG        = LCD_LCDBSTCON_VLCDCFG_5P0V;                /*!<VLCD输出电压配置*/
    Boost_InitStruct.BUFENB                = ENABLE;                                        /*!<基准源Buffer使能控制*/  //需要打开
    Boost_InitStruct.BUFBYP                = DISABLE;                                        /*!<基准源Buffer Bypass使能控制*/  //需要关闭
    Boost_InitStruct.VLCDPD                = DISABLE;                                        /*!<VLCD下拉使能控制*/  //需要关闭
    Boost_InitStruct.BOOST_TEN        = DISABLE;                                        /*!<Booster测试信号*/  //保持关闭即可
    Boost_InitStruct.BOOST_EN        = ENABLE;                                        /*!<Booster使能控制*/
回复

使用道具 举报

9

主题

29

帖子

327

积分

高级工程师

Rank: 3Rank: 3

积分
327
 楼主| 发表于 2018-6-21 13:37:04 | 显示全部楼层
李杰 发表于 2018-6-21 09:19
按如下配置打开boost功能试试看,另外,//LCD时钟使能要在配置之前就打开
    //boost初始化配置
    Boost ...

你好,按照改了好像还是没啥效果;另外,请问LCD->DISPDATA0~LCD->DISPDATA9全部置成0xff,为什么没任何图形显示了
回复

使用道具 举报

5

主题

22

帖子

2253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2253
发表于 2018-6-21 15:13:38 | 显示全部楼层
pin59脚上的电容焊了没有,焊上再试试看
回复

使用道具 举报

9

主题

29

帖子

327

积分

高级工程师

Rank: 3Rank: 3

积分
327
 楼主| 发表于 2018-6-22 10:24:22 | 显示全部楼层
李杰 发表于 2018-6-21 15:13
pin59脚上的电容焊了没有,焊上再试试看

焊接了,效果一样,pin59脚电压为4V
回复

使用道具 举报

5

主题

22

帖子

2253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2253
发表于 2018-6-22 12:33:04 | 显示全部楼层
LCD_InitStruct.DF                = LCD_DF_Calc(LCD_InitStruct.LMUX, LCD_InitStruct.WFT, 0);        /*!<显示频率控制寄存器*/
这里为什么输入0呢?
回复

使用道具 举报

9

主题

29

帖子

327

积分

高级工程师

Rank: 3Rank: 3

积分
327
 楼主| 发表于 2018-6-22 13:04:07 | 显示全部楼层
本帖最后由 pengwang 于 2018-6-22 13:07 编辑
李杰 发表于 2018-6-22 12:33
LCD_InitStruct.DF                = LCD_DF_Calc(LCD_InitStruct.LMUX, LCD_InitStruct.WFT, 0);        / ...

1~6会闪,现在设置成7,不闪了;请问应该设置成多少呢? lcd.png
回复

使用道具 举报

5

主题

22

帖子

2253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2253
发表于 2018-6-22 15:12:56 | 显示全部楼层
本帖最后由 李杰 于 2018-6-22 15:16 编辑

请参考示例程序或查阅芯片手册
回复

使用道具 举报

9

主题

29

帖子

327

积分

高级工程师

Rank: 3Rank: 3

积分
327
 楼主| 发表于 2018-6-22 15:23:44 | 显示全部楼层
李杰 发表于 2018-6-22 15:12
请参考示例程序或查阅芯片手册

你好,按照示例程序设置了,效果没啥变化
回复

使用道具 举报

5

主题

22

帖子

2253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2253
发表于 2018-6-22 18:46:09 | 显示全部楼层
怎么设置的?
回复

使用道具 举报

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

本版积分规则

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