基于STM8L152的TAB段式LCD液晶驱动的分析

发布者:达文西happy最新更新时间:2020-02-26 来源: eefocus关键字:STM8L152  TAB段式  LCD液晶驱动 手机看文章 扫描二维码
随时随地手机看文章

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


首先看STM8的LCD控制器的两个关键寄存器
一: Port mask registers (LCD_PM)
这是映射LCD控制IO的寄存器,寄存器内容如下:
215532y4wn4w4jijjt4eok.png.thumb.jpg

由图可知,当你使用了对应的IO口作为LCD的控制IO时,将对应的位置一即可,否则做普通IO处理。
二:LCD display memory (LCD_RAM)
215828xd0v9dtfuu9cfkcf.png.thumb.jpg
这是LCD显示缓冲寄存器,把需要写入的显示数据写入该寄存器即可显示,这个结合下面公司制作的LCD详细分析。
下面是我们公司制作的LCD原理图以及LCD接口原理:
220150wu7q7dy2n5i2qund.png.thumb.jpg220208aj252o4fg2elsv57.png.thumb.jpg220957kgf477wwrfvv7gv4.png.thumb.jpg
因为截图限制,在此说明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工程,这是根据模板移植的初始化函数:
221549y12cho5z7vofedjj.png.thumb.jpg

首先是开启LCD工作时需要的时钟:
221702v5xoxb88ctxxf88x.png.thumb.jpg

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



221825ijkvzaajvx5vlcjt.png.thumb.jpg

再介绍一下清屏函数:
221933ayh4qwwq01qoch10.png.thumb.jpg

将显示缓冲寄存器中的所有地址写0即可实现LCD的全屏清除。
接下来在介绍下在初始化完毕后如何向LCD显示缓冲区写入显示数据:
先介绍下显示字符缓冲区的设计:
222134txybb1v4yn09kvqn.png.thumb.jpg

这是按照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]位,无法直接写入怎么办?
所以在写入数据前需要对数据进行处理:
223240vc8l94pfrlkn4dil.png.thumb.jpg
过程不多做解释啦,希望大家看得明白。
下面是显示缓冲地址与段码对应的表格,大家或许能看的更清楚:
223508pk71p9xwwk7fprh9.png.thumb.jpg

总结一下:
一:初始化LCD,开启对应时钟,设置好工作模式及工作电压;
二:配置好LCD控制IO;
三:写入显示数据到显示缓冲区;
而关于显示数据的处理办法:先根据段码顺序制作好段码表,在写入时根据对应位做相应处理。

关键字:STM8L152  TAB段式  LCD液晶驱动 引用地址:基于STM8L152的TAB段式LCD液晶驱动的分析

上一篇:SM8L显示屏的LCD_WriteRAM怎么用
下一篇:STM8L15X液晶初始化程序

推荐阅读最新更新时间:2024-11-03 11:24

51单片机驱动 LCD1602液晶显示系统
废话不多说先上实物图 LCD1602+51单片机最小系统应用仿真及制作 好了,接下来正式进入制作环节: 第一步:仿真 绘制好原理图,仿真时单片机最小系统只放一个单片机就可以了,但实际电路中需要加上电源模块、复位模块。如下图: 原理图文件请在附件中找。 原理图绘制好后,编写代码并生成hex文件。参考代码如下: /*功能/ /使用外部中断INTO改变LED状态,并且用1602显示出其状态/ #include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char uchar code table = H
[单片机]
51单片机<font color='red'>驱动</font> <font color='red'>LCD</font>1602<font color='red'>液晶</font>显示系统
PIC单片机驱动LCD1602液晶循环显示两行字符串程序
#include pic.h __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 //LCD控制线宏定义 #define rs RA0 #define rw RA1 #define e RA2 char web = { www.51hei.com }; char tel = { QQ:776860123 }; void init(); //申明I/O口初始化函数 void lcd_init(); //申明LCD初始化函数 void write(char x); //申明显示1字节数据函数 voi
[单片机]
液晶显示器LCD12864驱动程序
#include msp430g2553.h #include lcd12864.h #include typedef.h #define cyCS BIT0 //P2.0,片选信号 #define cySID BIT1 //P2.1,串行数据 #define cyCLK BIT2 //P2.2,同步时钟 #define cyPORT P2OUT #define cyDDR P2DIR void Write_8bits(u8 W_bits) { u8 i; cyDDR |= cyCLK + cySID; //设置输出方向 for(i = 0; i 8; i++) {
[单片机]
新唐M051驱动LCD1602液晶屏程序
共享一个 新唐M051驱动LCd1602液晶屏显示的程序: #include "LCD1602.h" /*************************************************** * 大量宏定义,便于代码移植和阅读 ***************************************************/ #define LCD1602_LINE1 0 #define LCD1602_LINE2 1 #define LCD1602_LINE1_HEAD 0x80 #define LCD1602_LINE2_HEAD 0xC0 #define L
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved