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

【经验分享】STM8 微控制器接入1602 LCD

[复制链接]
STMCU小助手 发布时间:2022-6-21 17:47
1602 LCD 显示屏是爱好者和最常用的显示屏。当您想向用户显示基本信息时,显示非常有用,并且还可以帮助测试或调试我们的代码。这种1602 LCD 模块已经流行了很长时间,并且很容易买到。0 l! U, D5 ^! V
  t0 s+ l$ _0 C( Q2 ?4 ~7 x
在前面我们已经介绍了如何在8051单片机上使用1602LCD,在本文中,我们将继续介绍如何在STM8上使用1602 LCD。2 \( B/ b: G4 A
/ q( j+ r" I0 r0 \
如果您是 STM8 新手,请查看STM8 相关入门文章,了解控制器板和编程环境的基础知识。8 Z) z# ]( m: v
( D$ Q* C2 m  K" g% o: c. \
认识1602 LCD
) E! W* P& I3 t& q0 f4 W; _
1602 LCD 有 16 列和 2 行。所以总的来说,我们将能够在这个显示器上显示 32 个字符,这些字符可以是字母或数字,甚至是符号。我们在本文中使用的一个简单的1602 LCD 引脚如下所示:
3 L% K7 |, |( J1 u4 E0 Q( B8 _9 l' b' n6 g: X- _! |* D7 r: Q
c6568e99c9d3f4b65ef16ff65580bfd6.png
/ h% P5 C# @3 ^0 G1 s9 y8 p# [# ]0 ?/ N) j
62f99c4f83888162bc1fe695854a4b18.png
% \) z4 y8 g0 x- {+ B* G9 y5 ^1 z
- O9 X6 Q, m3 e! s( E1 E) s& j% Z如上图所示,在 LCD 的背面,你会发现两个黑点,里面是HD44780 LCD 驱动 IC。我们的微控制器与这个 IC 通信,进而控制 LCD 把我们的内容在上面显示出来。
, `  E; A# p6 |
1 J- {% ?7 c! ~9 n: X+ Y如果您想知道1602 LCD是如何工作的,可以查看16x2 LCD 显示器的工作原理,这里不展开。( n5 j- z( @+ J' v
9 @7 A2 J( S" p6 F( s+ _
在本文中,我们将讨论使用简单的 LCD_print_char和LCD_print_string命令在 1602 LCD 显示器上显示字母字符(字母和数字),这里包含电路图和代码。2 \. b! ^5 J2 m) d7 Z  E5 T

# f# A$ K9 ]; T$ M6 P* S* f将 LCD 与 STM8 微控制器连接的电路图" Y; A3 v2 H) ]4 L* w6 h
完整的STM8—LCD 电路如下图所示。如您所见,STM8S103F3P6 控制器与 LCD的连接非常简单,我们将 LCD 显示器直接连接到我们的开发板,并且还连接了 ST-link 以对开发板进行编程。
# w" O* ?2 b, r; K( T
! S- X- L! z6 q7 Y) Y6 c- A8 U- n bd060b90725a77d41407845df0d0877e.png ) B7 Z! f: T5 D+ k; Q

6 a! ~- k$ o7 G& U9 C  F注意LCD的工作电压为5V, STM8S103F3P6 微控制器工作电压为3.3V,所以必须为 LCD 提供 额外的5V 电源。
* }+ I- [$ r# G0 F2 i, k' O; {# \& {
( A# Z+ I8 o# s& ]LCD Pin 3(VO/VEE)通过一个10k的可变电阻连接到电压(Vcc)以调节LCD的对比度。可变电阻的中间脚连接到 PIN 3,可变电阻其他两个引脚分别连接到Vcc和GND。+ `# F* U7 d4 V: B$ G
! r$ ~  b4 H% T
然后是RS、读/写 (RW) 和使能 (E) 引脚。2 n9 @+ y( G$ t  q

1 x% o) A- ^7 V, vRW引脚接地,因为我们不会从 LCD 读取任何内容,我们只会执行写入操作。' x4 W! I2 K- C* J  \& E, R
* a! H/ H7 {/ y' e: J& J
另外两个控制引脚 RS 和 E 分别连接到 PA1 和 PA2 引脚。' d' K. d: l& h/ T. c
* ^) J: j+ t; Z0 ?- E6 u
数据引脚 DB0 到 DB7。1602 LCD 可以在两种模式下工作,一种是 8 位模式,我们必须使用 LCD 上的所有 8 个数据引脚(DB0-DB7),另一种是 4 位模式,我们只需要 4 个数据引脚(DB4-DB7) 。. s( G) ~5 @& V1 V
$ e9 w* Q$ p2 H( d
因为它需要占用单片机的 GPIO ,由于一般单片机引脚较少,因此我们本次使用了 4 位模式,并且仅将引脚 DB4、DB5、DB6 和 DB7 分别连接到引脚 PD1、PD2、PD3 , 和 PD4。
6 k" S9 Y! _, I* A4 z+ H" H* l1 E! C4 [4 a+ z4 T: j
最后两个引脚 BLA 和 BLK 用于为LCD内部背光灯供电,我们使用了一个 560 欧姆的电阻作为限流电阻。
2 _$ g! F3 i5 V! ^7 H% c: e8 s2 }4 G3 x
STM8S微控制器的LCD程序3 R" {, F- J4 o. u" X  Y$ D. Z
为了演示,我们将对 STM8S 控制器进行编程以显示一个简单的字符串,例如“Hello World”,然后我们将在第二行中每隔一秒增加一个“Test”值。
  u; s3 x! L  U% Q* |9 [9 }* `" l) ^- W: a9 }1 }3 S$ W! P7 k
我们通过定义引脚并添加所需的头文件来启动我们的程序。在我们上面的电路图中,我们已将LCD_RS连接到 A1,因此我们将其定义为LCD_RS GPIOA、GPIO_PIN_1。 同样,我们对其他引脚也做了同样的事情。如果你使用了不同电路,相应地更改这些值。
+ `; G8 q, j" l/ d9 `5 {
8 h; W* o# P6 w! X1 B/ c5 S程序
3 i. I( L  q- s* E
  1. #define LCD_RS GPIOA, GPIO_PIN_1* V5 s3 ^: D/ z3 c$ L9 U
  2. #define LCD_EN GPIOA, GPIO_PIN_2& M# `) H5 s7 G  v
  3. #define LCD_DB4 GPIOD, GPIO_PIN_1; U3 v+ i+ W) W. N# ~( i
  4. #define LCD_DB5 GPIOD, GPIO_PIN_2; u- k* v) l0 x/ x# b  o
  5. #define LCD_DB6 GPIOD, GPIO_PIN_38 i! S4 B0 @1 u9 _
  6. #define LCD_DB7 GPIOD, GPIO_PIN_4
    9 }6 W1 r3 j4 l  F, t+ f* p
  7. #include "STM8S.h"
    1 [8 Y" ?# O/ Z3 O& @
  8. #include "stm8s103_LCD_16x2.h"
    % }) P' y  f$ {! _6 j# i
  9. void main()
    ' W- _1 w. l$ [8 m$ R9 y" P. V
  10. {1 r0 V1 m8 i9 a8 j' E( Y( W
  11.     int test_var = 0;
    ) e8 u9 X% a% G3 z7 v. T$ I! u
  12.     char d4,d3,d2,d1;/ ~5 ^' ?8 p- U; G
  13.     Lcd_Begin();8 _  H) J) {: @. q3 \) R; L: ~
  14.     Lcd_Clear();
    ! R9 a' \# i/ e( e; ~) C1 j
  15.     Lcd_Set_Cursor(1,1);1 X9 p& |; ~1 U8 ?; ?' o1 r3 M
  16.     Lcd_Print_String("STM8S103F3P3 LCD");1 B0 w. M! p+ S% M
  17.     delay_ms(5000);& [, O- G1 @7 s1 G1 e
  18.     Lcd_Clear();+ @- i2 t3 M, `2 J
  19.     Lcd_Set_Cursor(1,1);$ B( Q  |4 ]- \# E+ d; J
  20.     Lcd_Print_String("Hello World!");
      Y# V3 e$ {2 J+ L" j, Q/ V$ H
  21.     Lcd_Set_Cursor(2,1);" x0 r. g( q% q# h; ~1 C/ Q# v
  22.     Lcd_Print_String("Test: ");
    , ^9 W  x& y1 ?
  23.     while (1)3 h2 d/ ^& ?5 d4 U1 `
  24.     {, }3 Y$ D( i: r$ A  L
  25.         d4 = test_var%10 + '0';0 ~& z8 w' F- \3 p: v
  26.         d3 = (test_var/10)%10 + '0';" ]3 U; z/ ?- u) U% P8 F
  27.         d2 = (test_var/100)%10 + '0';
    4 Y2 h$ Q' G" Z- R- ?
  28.         d1 = (test_var/1000) + '0';9 D( E) w) _$ b, v8 X+ V
  29.         Lcd_Set_Cursor(2,6);
    ' Z5 |: M6 O2 @3 Y
  30.         Lcd_Print_Char(d1);
      q" N( T! d4 f" `
  31.         Lcd_Print_Char(d2);! f" K1 V0 Q2 C1 W2 r
  32.         Lcd_Print_Char(d3);" r1 ]: S  y; a6 u" F, L/ n( J' S
  33.         Lcd_Print_Char(d4);% @4 B% ~+ `' W; Y7 \3 ?
  34.         delay_ms(1000);8 `- I& A' s8 J
  35.         test_var++;
    ( K5 k& ^% ]6 g" }8 g% l. Z
  36.     }& J  M- ?& |6 o1 w8 ]( q
  37. }; A* m3 [$ g" }' A
  38. " \' q8 w. @1 V  |" n2 x/ r1 \
复制代码
& v  {& V: i1 N% u5 v' Z
赞 收藏 评论0 发布时间:2022-6-21 17:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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