你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32G4之LCD的使用

[复制链接]
STMCU小助手 发布时间:2022-7-6 14:46
一、LCD基本介绍
6 Q8 ~; P7 u- H$ i  J8 \! m液晶显示屏原理:液晶显示原理
! D! R; [3 C) D, Y# S
; Q# n5 j. U* \$ F0 WLCD原理图:
8 h2 C- C4 G6 [2 R2 }( w: u4 {4 @1 d. A# Q+ J* k, B/ B2 t
@{FTU{_O82)[3$RT%L{7%WM.png
  Q- l- O# ?; ^! D8 L! s5 y' ^' x6 E4 C4 b' P' f4 q/ _' j
官方会给出LCD的配置的,了解一下就行了
: }( q+ ?% X0 r3 G' F% D! _; B7 \% `7 ~: G. m/ H
注意:屏幕的原点是竖着放着时的左上方
' e; r- |* Q& Z; m, N- R' P. v6 E0 n5 p5 E: T
GHQ9LL6VUZEG4%HM5O_)7AQ.png 2 N. n& |: u; C; W1 b, v  {

2 z+ k4 t7 @$ {0 L在每次LCD初始化后一定要先清屏在进行其他设置,并且LCD的初始化一定要放在系统初始化之后。
8 F- M+ Y& C4 [! l9 U
5 ^1 A- `# A0 `: a一般模板:
  1. .....
    - q, t2 O1 s3 T0 _- f) h
  2. LCD_Init();      // LCD最后初始化
    : o3 a0 ~2 x0 Q( u' Y! ~; Q# S
  3. LCD_Clear(White); // 白色清屏
    ; g* W4 `' R$ j
  4. LCD_SetBackColor(White);  // 设置字体的背景
    $ R* ]0 N: A3 U3 x3 x: ?$ x
  5. LCD_SetTextColor(Red); // 设置字体的颜色3 u6 S+ O. u5 @% |
复制代码

$ d  y8 s2 @* C! c* y$ C二、函数介绍
, V" o9 A3 v0 g9 T2 V* h* K1 R2 B1.颜色设置函数
! |7 ~) G- m: i$ u4 X4 U" E* Ivoid LCD_Clear(u16 Color); // 设置清屏颜色+ k6 q+ o  r2 I, o2 T2 S
void LCD_SetTextColor(vu16 Color); // 设置字体颜色/ E  a5 v+ @0 T
void LCD_SetBackColor(vu16 Color); // 设置背景颜色
6 L) \# |. r# H- w/ X3 a0 B
" [; R2 p' I3 a4 n! m" pLCD_SetTextColor()是设置字体颜色,但是作用效果仅对后面的显示有效! }! o. v& L; ?6 z$ C4 @6 p' o
: t) n9 y% M5 q; H$ M3 g
LCD_SetBackColor()是设置背景颜色,作用效果也仅对后面的显示有效,并且设置的区域是字体的显示区域,其他区域会也清屏时的颜色显示
0 r9 B2 s5 t! y! d
  1. LCD_SetBackColor(Red);
    " D6 M. c, x$ C# y( ~8 R
  2.         LCD_SetTextColor(White);1 o# M* n) [1 H8 a8 K3 H
  3.         LCD_DisplayStringLine(Line2,"White");
    : _) n/ t! ~7 L- {( G/ u  O  j
  4.         ) C( q0 g; G# V
  5.         LCD_SetBackColor(Blue);
    $ p0 \- O3 g7 H
  6.         LCD_SetTextColor(Green);
    % R- p6 w  C/ R- `1 Q5 K. U) G
  7.         LCD_DisplayStringLine(Line5,"Green");
复制代码

% O* k8 n" t) a$ v, `# d! G) X5 I, Y+ P0 p
显示结果:
# {& r5 O% P: R- b# B$ Q% v& V" h2 |7 d! ?$ E; P3 ]8 h
{GK{OHYBMT8GDYV2L0UN$K8.png
6 L$ W, P8 \) a' J. z6 K: |4 }
; t9 l  L. [$ I% z1 Z2.字符显示函数
* a. K6 T  P# h8 j$ d& Lvoid LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii); //任何位置显示字符
) H5 w; F) d# p% [4 |void LCD_DisplayStringLine(u8 Line, u8 *ptr); //行显示字符5 {% H; p# g5 s! v" [( ]+ w+ B
2 G3 p) d/ g( [) j
显示屏为320*240,LCD_DisplayStringLine这个函数根据参数可知,是按行来显示的,显示屏共有Lin0~Lin9,每行可以显示20个字符
% l9 r6 r1 b2 F2 X& v5 X  J8 m# ]. o. m$ e  P/ u
注意:Line一般传入参数Line0-9, 若传入数字则是以像素为单位
5 X& ]* m( J& U5 k2 R
& m0 V, \4 H) j" {若用于显示变量,这种方法需要使用到sprintf()函数(添加头文件stdio.h")
& X# O/ l% l% c7 O) o1 _, E. O6 }# Y; U, N, a/ l- j& {# N
我们要定义一个字符数组,用来存放需要显示的字符串(LCD一行只能显示20个字符,所以数组大小定为21),sprintf()函数的作用就是将指定的字符串存入数组中
: @0 J- j% [) m& }5 S' D  X
" {( @/ M4 f: R3 }: {: Y9 D头文件:stdio.h$ p' ~  W: J' n
函数功能:,格式化字符串,将格式化的数据写入字符串中。
' p4 d/ e) @: B% R& ]函数原型:int sprintf(char *buffer, const char *format, [argument]…)( k+ A& C- Q  I* _5 U/ F5 l
参数:
. h- [6 b7 T( G# q: V/ M# y0 {(1)buffer:是char类型的指针,指向写入的字符串指针;/ m- s9 m8 g: p
(2)format:格式化字符串,即在程序中想要的格式;. s6 `$ L8 `5 I9 z1 Z
(3)argument:可选参数,可以为任意类型的数据;2 V9 Y; o& \1 Q0 \8 |
函数返回值:buffer指向的字符串的长度;0 D1 ^' s% s' p& }
  G0 j1 u7 a, n" y
  1. char buffer[80];( {  J2 B1 O5 a
  2. // 将An approximation of Pi is 3.1415存入buffer数组里面
    ( U5 c2 ]1 }4 Y( N. p
  3. sprintf(buffer, "An approximation of Pi is %f/n", 3.1415);
    ! G" d- G1 h6 J% {/ F5 h9 N6 t0 d" w

  4. 5 X; q6 G8 X4 {
复制代码

6 }; m0 ]* r/ C0 `% P对于LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);
+ h& e" G0 S0 h2 r' k前两个参数是行数和列数,由于官方没有给出每一列的宏定义,所以需要我们自己推一下。这里列选择需要了解一下lcd的分辨率
0 y5 W, b) F$ j. J
+ ?1 i+ K9 T7 w" J8 s; p在官方给的参考资料里面介绍了分辨率是240RGBx320,我们知道lcd一共分为10行,20列,所以一个字符的高实际上是24*16,可以看到lcd.h宏定义里面每一行之间的差值就是24,那么每一列之间的差值就是16,实际上表示一列的时候是反着来的,320表示第一列,320-16表示第二列,那么320-(16 * i)表示第i列
; l& h3 \% Z7 \7 S% N4 S: v! S2 K* H' E
  1. //在Line4,第5列显示字符'A'# l9 ]. D1 o. t# T+ U! u
  2. LCD_DisplayChar(Line4,(320 - (16 * 5)),'A');
    / D' a7 N$ m- g4 F9 I' u: e- h
  3. . P* P: y1 K- t% k' a3 \, G$ U
复制代码
: ?) x* T9 y" q/ F8 z+ R9 y4 g
8 m1 p! ]  V# M/ q: @* B, A
/ R* b6 u; r4 y. p1 r6 W
. d$ J, M. J$ x' Z! @

* r% q2 ?7 b$ h* _- S" M9 y/ O  L: v9 i9 s6 b8 l
赞 收藏 评论0 发布时间:2022-7-6 14:46

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版