找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7312|回复: 6
收起左侧

STM8L052C6T6驱动段码LCD液晶屏

[复制链接]
ID:276663 发表于 2019-6-12 10:41 | 显示全部楼层 |阅读模式
本帖最后由 IdeaMing 于 2019-6-12 10:51 编辑

前言:
         项目中用到了段码LCD屏选用自带驱动的STM8L052C6,为了加快各位研发人员的开发进度,避免浪费大量的时间走别人踩过的坑,写出个人代码调试的经验。水平有限,如有错误,还请指正mr.li.ming@qq.com

使用的液晶屏
液晶屏.png

对应的使用的单片机
stm8l052c6lcd.png
对应关系
------LCD----------------MCU----------
PIN1(COM1)——LCD_COM0(PA4)
PIN2(COM2)——LCD_COM1(PA5)
PIN3(COM3)——LCD_COM2(PA6)
PIN4(COM4)——LCD_COM3(PD1)
PIN5—————LCD_SEG11(PB1)
PIN6—————LCD_SEG18(PD4)
PIN7—————LCD_SEG19(PD5)
PIN8—————LCD_SEG20(PD6)
PIN9—————LCD_SEG21(PD7)


默认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. }
复制代码

然后在对应的位置写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. }
复制代码



要是想全部显示看看段码都有没有坏,就把清屏的修改一下
  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. }
复制代码



下面着重记录一下踩过的坑:
LCD_Init();函数里面的最后一个参数是LCD_VoltageSource_Internal还是LCD_VoltageSource_External


官方STM8L-DISCOVERY的原理图上
VLCD.png
R25这个0R电阻没有焊接,所以代码里使用的是LCD_VoltageSource_Internal
如果焊接了,代码里就要使用LCD_VoltageSource_External


希望对各位看官有所帮助。
STM8L052C6T6液晶LCD驱动.pdf (621.48 KB, 下载次数: 169)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:385637 发表于 2019-6-14 08:14 | 显示全部楼层
没用过STM8单片机,之前只是用STC的,看STM8性价比更高,请问学起来容易吗?
回复

使用道具 举报

ID:276663 发表于 2019-6-17 14:54 | 显示全部楼层
shenyuqiu 发表于 2019-6-14 08:14
没用过STM8单片机,之前只是用STC的,看STM8性价比更高,请问学起来容易吗?

很多人建议STM8像STC一样直接操作寄存器,可能是我用STM32库习惯了,所以STM8也是使用库方式。学习起来没什么问题。想要实现什么功能先百度一下,肯定会有所收获。
性价比确实比STC高。轻松实现在线调试。
回复

使用道具 举报

ID:601763 发表于 2019-9-4 17:31 | 显示全部楼层
最近也准备搞液晶,这个寄存器里面值和具体的段码是怎么联系的呢?
回复

使用道具 举报

ID:465227 发表于 2020-2-5 00:22 | 显示全部楼层
感谢楼主分享!
回复

使用道具 举报

ID:694926 发表于 2020-2-18 23:18 | 显示全部楼层
不错,正要用到,谢谢
回复

使用道具 举报

ID:735272 发表于 2020-4-29 14:01 | 显示全部楼层
楼主有没有stm8串口通信的文章,我在这遭遇到问题
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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