[STM8] STM8L052C6T6液晶LCD驱动过程

[复制链接]
873|5
 楼主| 个百zz分点个 发表于 2024-3-30 11:27 | 显示全部楼层 |阅读模式
使用的液晶屏



单片机引脚



液晶的COM1-COM4分别对应单片机LCD_COM0-LCD_COM3



默认LSI(内部低速时钟)是打开的,一般不操作,如果被关闭了,要先打开LSI。

所以先看看程序
  1. void LCD_GLASS_Init(void)
  2. {
  3. /* Enable LCD/RTC clock */
  4.   CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);//打开RTC时钟
  5.   CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);//打开LCD时钟
  6.   CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);//设置RTC时钟源
  7.   
  8.   /* Initialize the LCD */
  9.   LCD_Init( LCD_Prescaler_1,//
  10.             LCD_Divider_31, //
  11.             LCD_Duty_1_4,   //使用的4个COM所以是1/4
  12.             LCD_Bias_1_3,   //
  13.             LCD_VoltageSource_Internal);//内部电压源
  14.             
  15.   LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0x08);//SEG11  0X08
  16.   LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0x3C);//SEG18,SEG19,SEG20,SEG21 0X3C
  17.   
  18.   /* To set contrast to mean value */
  19.   LCD_ContrastConfig(LCD_Contrast_3V1);//设置对比度
  20.   LCD_DeadTimeConfig(LCD_DeadTime_0);//设置死区时间
  21.   LCD_PulseOnDurationConfig(LCD_PulseOnDuration_1);//设置停留时间
  22.   
  23.   /* Enable LCD peripheral */
  24.   LCD_Cmd(ENABLE);//使能驱动
  25. }


 楼主| 个百zz分点个 发表于 2024-3-30 11:28 | 显示全部楼层
配置---哪些段被用来驱动LCD。

板上使用了PA4,PA5,PA6,PD1四个COM,PB1,PD4,PD5,PD6,PD7五个SEG

PB1 - SEG11

PD4 - SEG18

PD5 - SEG19

PD6 - SEG20

PD7 - SEG21

LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0x00);//SEG0-7没有使用
LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0x08);//SEG11 0X08
LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0x3C);//SEG18,SEG19,SEG20,SEG21 0X3C
 楼主| 个百zz分点个 发表于 2024-3-30 11:28 | 显示全部楼层
然后在对应的位置写1显示写0清除,比如下面的清屏

  1. void LCD_GLASS_Clear(void)
  2. {
  3.     uint8_t counter = 0;
  4.     for (counter = 0; counter <= LCD_RAMRegister_13; counter++)
  5.     {
  6.         LCD->RAM[counter] = 0x00;
  7.     }
  8. }
 楼主| 个百zz分点个 发表于 2024-3-30 11:28 | 显示全部楼层
要是想全部显示看看段码都有没有坏,就把清屏的修改一下
  1. void LCD_GLASS_Check(void)
  2. {
  3.     uint8_t counter = 0;
  4.     for (counter = 0; counter <= LCD_RAMRegister_13; counter++)
  5.     {
  6.         LCD->RAM[counter] = 0xff;
  7.     }
  8. }
 楼主| 个百zz分点个 发表于 2024-3-30 11:28 | 显示全部楼层
下面着重记录一下
  1. LCD_Init();函数里面的最后一个参数是LCD_VoltageSource_Internal还是LCD_VoltageSource_External
 楼主| 个百zz分点个 发表于 2024-3-30 11:29 | 显示全部楼层
官方STM8L-DISCOVERY的原理图上

R25这个0R电阻没有焊接,所以代码里使用的是LCD_VoltageSource_Internal

如果焊接了,代码里就要使用LCD_VoltageSource_External

转载于:https://www.cnblogs.com/IdeaMing/p/10985980.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

679

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部