[STM8L]基于STM8L152的TAB段式LCD液晶驱动的分析 - 单片机干货 - 中国电子技术论坛 - 最好最受欢迎电子论坛!.md
主控芯片为STM8L152C4T6自带LCD控制器,低功耗系列,最近公司用到这个芯片,第一次接触STM8,刚毕业第一次做产品,也算是满成功的,发个帖纪念一下, 顺便记录一下自己学习段式LCD的过程,在查找段式LCD工作资料的过程中,确实有几篇好的博客,给了很大的帮助,但是仍然觉得不够详细,希望这次分析能够帮助到大家。首先看STM8的LCD控制器的两个关键寄存器:

一: Port mask registers (LCD_PM)

这是映射LCD控制IO的寄存器,寄存器内容如下:



由图可知,当你使用了对应的IO口作为LCD的控制IO时,将对应的位置一即可,否则做普通IO处理。

二:LCD display memory (LCD_RAM)

这是LCD显示缓冲寄存器,把需要写入的显示数据写入该寄存器即可显示,这个结合下面公司制作的LCD详细分析。

下面是我们公司制作的LCD原理图以及LCD接口原理:

因为截图限制,在此说明LCD另外两个重要的工作参数,LCD_Duty_1_4,LCD_Bias_1_3,内部3V工作电压,这三个参数的具体含义在STM8L手册有关LCD的章节可以查阅到。

由段式LCD原理图可以看到,用户编号为S1,个数为S2,信号为S3,S4,S5,S6,S7,电池电量为S8,S9,S10,S11,五个“8”分别为1,2,3,4,5,以第一个“8”为例,七个段分别为1A,1B,1C,1D,1E,1F,1G,分别由PIN5,6跟COM1,2,3,4一起控制,因此需要将Port mask registers (LCD_PM) 中的SEG20,SEG21置一,同时要在LCD display memory (LCD_RAM)中将显示的数据写入S0,S1,S2,S3对应的20,21位,这样就可以显示你想要的数据,前提是LCD初始化成功,下面分析下LCD初始化,是基于库函数形式的,工程模板是STM8L-EVAL板的LCD TEST工程,这是根据模板移植的初始化函数:

首先是开启LCD工作时需要的时钟:

接着是配置LCD需要的工作参数,即前面提到的三个重要参数以及其他参数,在STM8L参考手册中可查阅,最后使能LCD:

再介绍一下清屏函数:

将显示缓冲寄存器中的所有地址写0即可实现LCD的全屏清除。

接下来在介绍下在初始化完毕后如何向LCD显示缓冲区写入显示数据:

先介绍下显示字符缓冲区的设计:

这是按照ABCDEFG的断码顺序设计的段码表,最后一位没有用到定为0,假设我们要写入0,那么需要将0对应的0XFC写入显示缓冲区,以第一个“8”为例,我们需要写入1A,1B,1C,1D,1E,1F,1G对应的数据,即1A=1,1B=1,1C=1,1D=1,1E=1,1F=0,1G=0,而1A,1B,1C,1D,1E,1F,1G的地址结合LCD原理图,LCD接口原理图,以及显示缓冲寄存器可知1A=S0[21],1B=S1[20],1C=S3[20],1D=S3[21],1E=S2[21],1F=S1[21],1G=S1[20],所以讲上述数据写入这些地址后即可显示“0”。那么问题来了,1A对应[7]位,而S0[21]对应显示缓冲区的[5]位,无法直接写入怎么办?

所以在写入数据前需要对数据进行处理:

过程不多做解释啦,希望大家看得明白。

下面是显示缓冲地址与段码对应的表格,大家或许能看的更清楚:

总结一下:

一:初始化LCD,开启对应时钟,设置好工作模式及工作电压;

二:配置好LCD控制IO;

三:写入显示数据到显示缓冲区;

而关于显示数据的处理办法:先根据段码顺序制作好段码表,在写入时根据对应位做相应处理。

应工作要求只能提供以下附件,程序为EVAL板的程序,非此次LCD相关程序,可供大家参考,抱歉!

STM8L_LCD.rar

(75.52 KB, 下载次数: 264)

STM8L152C4T6Datasheet.pdf

(1.83 MB, 下载次数: 202)

这次也只是做了初步了解,以后有机会再仔细研究!




[STM8L]基于STM8L152的TAB段式LCD液晶驱动的分析 - 单片机干货 - 中国电子技术论坛 - 最好最受欢迎电子论坛!的更多相关文章

  1. 基于等待队列及poll机制的按键驱动代码分析和测试代码

    按键驱动分析: #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> ...

  2. 页面显示LCD液晶字体或者其他特殊字体

    如果web项目中需要用到LCD液晶字体显示数值(如下图所示)该怎么办? 在这就需要用到@font-face(具体看一下语法) /* 定义 */ @font-face { font-family: 'M ...

  3. 基于FPGA的5寸LCD显示屏的显示控制

    基于FPGA的5寸LCD显示屏的显示控制 作者:lee神 1,图像处理基础知识 数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.图像处理最早出现于 20 世纪 50 年代,当时 ...

  4. 单片机中不带字库LCD液晶屏显示少量汉字

    单片机中不带字库LCD液晶屏如何显示少量汉字,一般显示汉字的方法有1.使用带字库的LCD屏,2.通过SD 卡或者外挂spi flash存中文字库,3.直接将需要的汉字取模存入mcu的flash中. 第 ...

  5. 【雕爷学编程】MicroPython动手做(05)——零基础学MaixPy之LCD液晶屏

    配套 2.4寸LCD屏 ST7789驱动器芯片(24P 320X240) ST7789驱动器芯片2.4寸LCD屏(24P 320X240)主要参数 1. 模块名称:液晶显示模块2. 型号:KD024C ...

  6. linux lcd设备驱动剖析一

    s3c2440 lcd驱动源码文件是:drivers/video/s3c2410fb.c 看驱动源码首先当然是先看入口函数,这里是s3c2410fb_init函数 [cpp] view plain? ...

  7. 水电表/燃气表/压力表/传感器/仪器仪表等,超低功耗段码LCD液晶显示驱动IC-VKL144A/B 超低工作电流,36*4COM显示,替代PCF8551/MCP144/BU9792/9B92/BL55072B等

    煤气罐的使用安全隐患较大,现在大部分城市使用管道输送燃气,燃气表的计费大都是通过远程抄表的方式,或者充值的方式,为了让用户更好地了解自家燃气表的使用情况,需要一款液晶屏来显示燃气表的状态和用气量等信息 ...

  8. 基于Spark和SparkSQL的NetFlow流量的初步分析——scala语言

    基于Spark和SparkSQL的NetFlow流量的初步分析--scala语言 标签: NetFlow Spark SparkSQL 本文主要是介绍如何使用Spark做一些简单的NetFlow数据的 ...

  9. 基于MT6752/32平台 Android L版本驱动移植步骤

    基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Mediatek Turnkey架构 ...

随机推荐

  1. DotnetBrowser高级教程-(4)使用MVC框架1-搭建基础框架

    我们这次重点介绍下MVC框架的使用. 如果您之前使用过微软的mvc web框架,那么dotnetbrowser的mvc框架相信您也会很快上手,两者之间相似度约有80%. 所谓的mvc,以一个例子为例: ...

  2. DailyMasalaCMS升级记录

    手头上是一个比较老的工程,Jdk1.7 + Tomcat7.0 + Spring 3.x + Hibernate 3.x + Elasticseach 2.x 最近Elasticsearch升级,ja ...

  3. 可软件定义的存储逻辑——Efficient and agile storage management in software defined environments

            note:写这个或许算是翻译,又或算是对这个论文[1]的理解,又或者仅仅是我的看法.         这篇论文和IOFlow相比較,更加注重软件定义存储的框架(利用已有的框架来创建新的 ...

  4. UNP学习笔记(第二十六章 线程)

    线程有时称为轻权进程(lightweight process) 同一进程内的所有线程共享相同的全局内存.这使得线程之间易于共享信息,然后这样也会带来同步的问题 同一进程内的所有线程处理共享全局变量外还 ...

  5. Android UI开发神兵利器之Icon

    好的设计离不开Icon 话不多.介绍2个国外的站点,一个用来找Icon,一个用来搞页面设计 http://dryicons.com/free-icons/ http://www.webdesignsh ...

  6. 面试题 15:链表中倒数第 k 个结点

    面试题 15:链表中倒数第 k 个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯, 本题从 1 开始计数,即链表的尾结点是倒数第一个结点.例如一个有 6 个结点的 链 ...

  7. python 使用微信远程控制电脑

    今天来分享一个"高大上"的技术--使用python编写一个能够用微信远程控制电脑的程序! 先来分析一下控制的详细流程: 我们使用微信给特定的邮箱发送一封邮件,当中包括了我们想要电脑 ...

  8. python学习(二)python中的核心数据类型

    数据类型是编程语言中的很重要的一个组成部分,我所知道的有数据类型的好处有:在内存中存放的格式知道,规定了有哪几种可用的操作. 我的埋点:为什么要有数据类型 那么python中的数据类型有哪几种呢? 对 ...

  9. HDFS源码分析心跳汇报之DataNode注册

    HDFS源码分析心跳汇报之DataNode注册,近期推出!

  10. Ubuntu 14.04lts安装vncserver

    之前有在centos上安装过非常多次vncserver,也写过一个centos 7上的安装文档.近来常识了好几次在ubuntu上安装都没有成功,这次最终搞定了.ubuntu自带的桌面是unity.这个 ...