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

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

[复制链接]
STMCU小助手 发布时间:2022-7-6 14:46
一、LCD基本介绍
7 p3 n3 @2 R5 W" z液晶显示屏原理:液晶显示原理
" q: [0 \* k6 w% g/ m, W
5 S% l, H( O- I$ n( VLCD原理图:
9 l. Q+ \9 f( m* t% w& V$ j
% g# F8 z: L: w& v/ G1 E @{FTU{_O82)[3$RT%L{7%WM.png
1 @: s0 G  s  r' I8 L/ o+ }6 T9 }# y1 m. D2 \  O" L3 b& K
官方会给出LCD的配置的,了解一下就行了0 J/ ]0 y( I9 q8 ?+ C, _
& R6 C4 s6 w& n' P* g2 n
注意:屏幕的原点是竖着放着时的左上方- V7 R  h! C7 T" Y

: O2 b  g" L* M8 j* B2 u& @/ U GHQ9LL6VUZEG4%HM5O_)7AQ.png 0 D' T# t% b2 d
" A: c. C7 d( P8 H  c
在每次LCD初始化后一定要先清屏在进行其他设置,并且LCD的初始化一定要放在系统初始化之后。
. y6 ?" s7 }5 i2 G( i, N% ~+ s* |
一般模板:
  1. .....- \% j( {, ~3 W& Y& ]# y
  2. LCD_Init();      // LCD最后初始化# m, q. T4 e( v$ g
  3. LCD_Clear(White); // 白色清屏  U3 |2 p/ h2 j( m
  4. LCD_SetBackColor(White);  // 设置字体的背景
    : r9 U0 t9 `0 @, T4 t
  5. LCD_SetTextColor(Red); // 设置字体的颜色( ~6 _9 X  H/ l- w& N1 H
复制代码
% G2 g% y* O0 W( H1 E/ V; n  }! ~2 _
二、函数介绍
9 E2 C0 y! n3 {: x1.颜色设置函数6 f( g1 S/ e- m7 X5 C, {
void LCD_Clear(u16 Color); // 设置清屏颜色1 f+ y0 r& {+ r2 L1 h
void LCD_SetTextColor(vu16 Color); // 设置字体颜色: M0 y% U+ {) J
void LCD_SetBackColor(vu16 Color); // 设置背景颜色1 n" T+ f! d( g$ H9 s
) H" J, x/ n9 i' y+ ^2 B: E5 R
LCD_SetTextColor()是设置字体颜色,但是作用效果仅对后面的显示有效
) |6 G& r3 ]4 t2 X) O/ N9 K2 H+ }5 O9 A  G
LCD_SetBackColor()是设置背景颜色,作用效果也仅对后面的显示有效,并且设置的区域是字体的显示区域,其他区域会也清屏时的颜色显示
0 A" N! _7 Z7 `
  1. LCD_SetBackColor(Red);
    9 E' h2 s3 K. T( `
  2.         LCD_SetTextColor(White);, b* {5 w( g' |8 [' f. g+ y1 ?+ K$ r
  3.         LCD_DisplayStringLine(Line2,"White");5 T9 _0 y0 |2 k7 o5 }
  4.         2 `0 \% Z# k6 H+ Y
  5.         LCD_SetBackColor(Blue);" f, n3 H% @, ?3 R6 P" P8 ?
  6.         LCD_SetTextColor(Green);
    7 z: k5 E7 L! B# P7 @3 b) F
  7.         LCD_DisplayStringLine(Line5,"Green");
复制代码

" h" x, Z* G" f' \* L
9 g; ~% t. r$ N! s' Q显示结果:' s4 y. ^! S" P, }! i" g$ ^  \4 h
/ [% {$ m/ y4 S6 }& [
{GK{OHYBMT8GDYV2L0UN$K8.png
. L4 e% L+ P) Y
2 N" q! U# \3 H0 j9 ?2.字符显示函数0 d: t+ K; \- o% n- f0 d, S2 m
void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii); //任何位置显示字符3 I5 O' ]- a- B! z- J& V: k
void LCD_DisplayStringLine(u8 Line, u8 *ptr); //行显示字符; U5 T4 g2 ]- @: R# n: ~! C3 C

/ `% \* o7 T/ w4 a显示屏为320*240,LCD_DisplayStringLine这个函数根据参数可知,是按行来显示的,显示屏共有Lin0~Lin9,每行可以显示20个字符0 i+ @  ~! |7 B# b/ _
  P- K$ k7 a) Z4 F
注意:Line一般传入参数Line0-9, 若传入数字则是以像素为单位
' V; }5 t$ x  F+ j& H$ O7 O8 B, Q/ w1 [8 B4 L( E
若用于显示变量,这种方法需要使用到sprintf()函数(添加头文件stdio.h")3 [/ |; f: I& K6 n% c4 ]

6 M4 m. [- [- H, [$ @我们要定义一个字符数组,用来存放需要显示的字符串(LCD一行只能显示20个字符,所以数组大小定为21),sprintf()函数的作用就是将指定的字符串存入数组中3 G- k+ a- ^3 u

( j  i: v, H- i1 }. z头文件:stdio.h
1 f9 e# d& B' l! d5 m函数功能:,格式化字符串,将格式化的数据写入字符串中。
3 F9 J9 J: f- e$ p0 C* g函数原型:int sprintf(char *buffer, const char *format, [argument]…)
% k# i( o, F7 M; M, a参数:
6 ]! s. O1 k5 e& ?0 e(1)buffer:是char类型的指针,指向写入的字符串指针;/ m0 Z1 V% t! H; s
(2)format:格式化字符串,即在程序中想要的格式;& d; O7 q- v" x0 C- h( z  S
(3)argument:可选参数,可以为任意类型的数据;( H6 K, f. {, U* o3 v/ v
函数返回值:buffer指向的字符串的长度;' q, d: ?: E& J- ~8 I! C9 R9 c
. D; u- i( K# J3 s4 S7 d
  1. char buffer[80];
    0 h- v! T6 \- W: l
  2. // 将An approximation of Pi is 3.1415存入buffer数组里面
    1 d- v5 A6 p7 O4 v( h( J
  3. sprintf(buffer, "An approximation of Pi is %f/n", 3.1415);% P" O4 ?, T8 ]3 G
  4. ! Z( @% L  Z: q; K$ V
复制代码

8 K) T$ J) l" k! u! K对于LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);6 I, s* b" O1 Z7 L- C' `9 E. r
前两个参数是行数和列数,由于官方没有给出每一列的宏定义,所以需要我们自己推一下。这里列选择需要了解一下lcd的分辨率& N0 i- N; k+ l. a0 S- c9 x
8 Y' L9 t) l. k
在官方给的参考资料里面介绍了分辨率是240RGBx320,我们知道lcd一共分为10行,20列,所以一个字符的高实际上是24*16,可以看到lcd.h宏定义里面每一行之间的差值就是24,那么每一列之间的差值就是16,实际上表示一列的时候是反着来的,320表示第一列,320-16表示第二列,那么320-(16 * i)表示第i列: v' @, p+ q$ _6 j

2 A! z& t* S9 d  d
  1. //在Line4,第5列显示字符'A'
    " V$ r# U! P, H; ~7 ~" h- E6 y8 B
  2. LCD_DisplayChar(Line4,(320 - (16 * 5)),'A');
    : X- r5 U5 e- N
  3. 9 h9 r/ u4 l8 x
复制代码
, M6 f" A2 _# g9 v! ^9 y& E

/ G3 j& g* e/ F
) o& V1 G4 ]4 V* N  H& Q1 q4 W" n2 ]0 W* m2 R

9 K) I1 h5 g" c0 Z! J2 c+ R7 M! Y3 `$ u6 x$ d- g
赞 收藏 评论0 发布时间:2022-7-6 14:46

举报

0个回答

所属标签

相似技术帖

官网相关资源

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