0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

将LCD与STM8微控制器连接的过程

科技观察员 来源:circuitdigest 作者:Aswinth Raj 2022-08-10 16:07 次阅读

16x2 字母数字 LCD 显示屏是爱好者和爱好者中最常用的显示屏。当您想向用户显示基本信息时,显示非常有用,并且还可以帮助测试或调试我们的代码。这种特殊的 16x2 LCD 模块很容易获得,并且已经流行了很长时间。您可以在链接文章中了解有关16x2 LCD模块基础知识的更多信息。

为了继续我们的STM8 微控制器系列教程,在本教程中,我们将学习如何将 LCD 与 STM8 微控制器连接。

16x2 LCD 显示器的工作原理

顾名思义,16x2 LCD 将有 16 列和 2 行。所以总的来说,我们将能够在这个显示器上显示 32 个字符,这些字符可以是字母或数字,甚至是符号。我们在本教程中使用的一个简单的16x2 LCD 引脚如下所示 -

pYYBAGLzZuKAb7urAABBXCWoL24833.png

如您所见,显示器有 16 个引脚,我们可以将其分为五类,电源引脚、对比度引脚、控制引脚、数据引脚和背光引脚,如下表所示。在讨论本教程的电路图时,我们将详细介绍每个引脚。

pYYBAGLzZt-APqKfAAAtQ93Lphs192.png

在 LCD 的背面,如下图所示,你会发现两个黑点,里面是HD44780 LCD 驱动 IC(红色圈出)。我们的微控制器应该与这个 IC 通信,这反过来将控制 LCD 上显示的内容。如果您想知道这一切究竟是如何工作的,您应该查看16x2 LCD 显示器的工作原理,我们已经详细讨论了 LCD 的工作原理。

pYYBAGLzZtuAeQuBAAV5aqzfjmM176.png

在本教程中,我们将讨论使用简单的 LCD_print_char和LCD_print_string命令在 16x2 LCD 显示器上显示字母字符(字母和数字)的电路图和代码。这些命令在包含我们的头文件后可以直接在程序中使用。头文件为您处理所有大部分内容,因此不必了解显示器或 HD44780 驱动 IC 的工作原理。

将 LCD 与 STM8 微控制器连接的电路图

完整的STM8 LCD 电路如下图所示。如您所见,STM8S103F3P6 控制器与 LCD的连接非常简单,我们将 LCD 显示器直接连接到我们的开发板,并且还连接了 ST-link 以对开发板进行编程

poYBAGLzZteAZogYAACrm_hUjgc898.png

电源管脚Vss和Vcc接STM8S板上的5V管脚,注意LCD的工作电压为5V,接上工作在3.3V。因此,即使 STM8S103F3P6 微控制器在 3.3V 上运行必须为 LCD 提供 5V 电源,您可以通过使用充电控制器 IC 来避免这种情况,但我们不会在本教程中讨论这个问题。

接下来,我们有用于设置 LCD 对比度的对比度引脚,我们将其连接到电位器,以便我们可以控制对比度。我们使用了 10k 电位器,但您也可以使用其他附近的值,电位器充当分压器,为对比度引脚提供 0-5 V,通常您也可以直接使用电阻器提供 2.2V 左右的合理对比度价值。然后我们有复位 (RS)、读/写 (RW) 和启用 (E) 引脚。读写引脚接地,因为我们不会从 LCD 读取任何内容,我们只会执行写入操作。另外两个控制引脚 Rs 和 E 分别连接到 PA1 和 PA2 引脚。

然后我们有数据引脚 DB0 到 DB7。16x2 LCD 可以在两种模式下运行,一种是 8 位操作模式,我们必须使用 LCD 上的所有 8 个数据引脚(DB0-DB7),另一种是 4 位操作模式,我们只需要 4 个数据引脚(DB4-DB7) 。通常使用 4 位模式,因为它需要控制器的 GPIO 引脚较少,因此我们在本教程中也使用了 4 位模式,并且仅将引脚 DB4、DB5、DB6 和 DB7 连接到引脚 PD1、PD2、PD3 , 和 PD4 分别。

最后两个引脚 BLA 和 BLK 用于为内部背光 LED 供电,我们使用了一个 560 欧姆的电阻作为限流电阻。ST-Link 编程器的连接方式与我们之前的教程一样。我在面包板上完成了完整的连接,我的设置如下图所示。

poYBAGLzZtOAAHxqAASn1q_o38o584.png

STM8 LCD 库——STM8S103F3P6 的头文件

您可以下载完整的 repo 并获取stm8s103_LCD_16x2.h文件,也可以简单地从上面的链接中获取代码。在设置项目时,请确保在 inc 目录中包含所有必需的头文件以及此头文件。

poYBAGLzZs-AU3XLAAGwLx1Mu5s361.png

如果您不确定如何添加头文件和编译程序,请按照本页底部的视频进行操作。如果您对头文件中的代码如何工作感到好奇,您可以查看带有 LCD 教程的 PIC。这个项目中使用的头文件与那里解释的非常相似,所以我们不会详细介绍。

STM8S微控制器的LCD程序

为了演示,我们将对 STM8S 控制器进行编程以显示一个简单的字符串,例如“Circuit Digest”,然后我们将在第二行中每隔一秒增加一个“Test”值。完整的程序可以在本页底部找到。说明如下。

我们通过定义引脚并像往常一样添加所需的头文件来启动我们的程序。在我们上面讨论的电路图中,我们已将LCD_RS连接到 PA1,因此我们将其定义为LCD_RS GPIOA、GPIO_PIN_1。 同样,我们对其他引脚也做了同样的事情。如果它们遵循不同的电路,请确保相应地更改这些值。

#define LCD_RS GPIOA,GPIO_PIN_1

#define LCD_EN GPIOA, GPIO_PIN_2

#define LCD_DB4 GPIOD,GPIO_PIN_1

#define LCD_DB5 GPIOD,GPIO_PIN_2

#define LCD_DB6 GPIOD,GPIO_PIN_3

#define LCD_DB7 GPIOD,GPIO_PIN_4

#包括“STM8S.h”

#include “stm8s103_LCD_16x2.h”

接下来在我们的主程序中,我们声明了此示例代码所需的变量。我们有一个名为test_var 的测试变量,它被初始化为零,我们将增加变量并将其显示在 LCD 上。d1 到 d4 字符代表测试变量的 4 位,因为我们的 LCD 不能直接显示 int 值,我们必须将它们转换为字符。

//变量声明

int test_var = 0;

字符 d4,d3,d2,d1;

LCD_Begin () 函数用于初始化 LCD。该函数将初始化所有需要的 GPIO 引脚并将 LCD 设置为 16x2 LCD 模式。然后我们有LCD_Clear()函数,用于清除 LCD 上的所有值,这将擦除 LCD 上的所有内容,以便写入新值是干净的。然后我们有LCD_Set_Cursor(x,y)函数,其中 x 和 y 是我们需要写入新字符的位置。例如,(1,1) 表示第一行和第一列,同样,(2,12) 表示第二行 12 列,同样。请注意,如前所述,我们在这里有 2 行和 16 列。

液晶开始();

液晶清除();

Lcd_Set_Cursor(1,1);

现在,LCD 已设置、清除,并且光标在该位置。接下来是在屏幕上打印一些东西。我们可以使用LCD_Print_String(“Sample String”) 将字符串打印到 LCD 并使用 LCD_Print_Char(a)将字符值打印到 LCD。在我们的程序中,我们打印了“STM8S103F3P3 LCD”并使用以下代码创建了 5 秒的延迟。

Lcd_Print_String(“STM8S103F3P3 LCD”);

延迟毫秒(5000);

5 秒延迟后,我们再次清除 LCD,第一行显示“Circuit Digest”,第二行显示“Test:”。

液晶清除();

Lcd_Set_Cursor(1,1);

Lcd_Print_String(“电路文摘”);

Lcd_Set_Cursor(2,1);

Lcd_Print_String(“测试:”);

在while循环中,我们将整数变量test_var上的值拆分为单个字符,以便可以使用简单的除法和模数运算符将其显示在 LCD 上。我们还添加了“0”来将 ASCII 值转换为字符。

d4 = test_var%10 + ‘0’;

d3 = (test_var/10)%10 + ‘0’;

d2 = (test_var/100)%10 + ‘0’;

d1 = (test_var/1000) + ‘0’;

然后我们将光标设置为 (2,6),因为我们已经在第二行写了“Test:”,即 6 个字符。如果我们覆盖,现有字符将被 LCD 上的新字符替换。我们还添加了 1 秒的延迟并增加了变量。

Lcd_Set_Cursor(2,6);

Lcd_Print_Char(d1);

Lcd_Print_Char(d2);

Lcd_Print_Char(d3);

Lcd_Print_Char(d4);

延迟毫秒(1000);

测试变量++;

带 LCD 的 STM8 – 工作

要测试我们的程序,只需将代码上传到我们的控制器并使用微型 USB 端口为其供电。请注意,LCD 需要 5V 才能工作,因此必须从 USB 端口为电路板供电。我们之前直接从 ST-link 为其供电,因为我们不需要 5V 电源。

poYBAGLzZsiAKWOqAAXTiUKUSOY592.png

如您所见,LCD 按预期工作,测试变量值大约每秒递增一次。另外,请注意,我们没有使用计时器,只使用了延迟函数来创建此延迟,因此不要期望延迟持续时间是准确的,我们稍后将在另一个教程中使用计时器来实现此目的。



/*LCD --> STM8s
* LCD_RS --> PA1
* LCD_EN --> PA2
* LCD_DB4 --> PD1
* LCD_DB5 --> PD2
* LCD_DB6 --> PD3
* LCD_DB7 --> PD4
*/

#define LCD_RS GPIOA,GPIO_PIN_1
#define LCD_EN GPIOA, GPIO_PIN_2
#define LCD_DB4 GPIOD,GPIO_PIN_1
#define LCD_DB5 GPIOD,GPIO_PIN_2
#define LCD_DB6 GPIOD,GPIO_PIN_3
#define LCD_DB7 GPIOD,GPIO_PIN_4
#包括“STM8S.h”
#include “stm8s103_LCD_16x2.h”
主要的()

{

//变量声明

int test_var = 0;
字符 d4,d3,d2,d1;
液晶开始();
液晶清除();
Lcd_Set_Cursor(1,1);
Lcd_Print_String("STM8S103F3P3 LCD");

延迟毫秒(5000);
液晶清除();
Lcd_Set_Cursor(1,1);
Lcd_Print_String("电路文摘");
Lcd_Set_Cursor(2,1);
Lcd_Print_String("测试:");

而 (1)
{
d4 = test_var%10 + '0';
d3 = (test_var/10)%10 + '0';
d2 = (test_var/100)%10 + '0';
d1 = (test_var/1000) + '0';

Lcd_Set_Cursor(2,6);
Lcd_Print_Char(d1);
Lcd_Print_Char(d2);
Lcd_Print_Char(d3);
Lcd_Print_Char(d4);
延迟毫秒(1000);
测试变量++;
}
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6789

    浏览量

    147565
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4272

    浏览量

    163912
  • STM8
    +关注

    关注

    18

    文章

    391

    浏览量

    56226
收藏 人收藏

    评论

    相关推荐

    我们应该希望长期使用stm8吗?

    大家好,最近,该公司一直积极提供您的项目从8微控制器转移到32位微控制器。鉴于此,我对使用STM8进行未来发展的可行性表示担忧。我喜欢这
    发表于 11-09 09:52

    是否有任何软件库允许使用STM8微控制器构建USB硬件而无需任何额外芯片?

    你好, 是否有任何软件库允许使用STM8微控制器构建USB硬件而无需任何额外芯片? 我正在寻找它,但到目前为止我还没有找到任何东西。这样的库大大提高STM8
    发表于 12-28 16:07

    如何配置微控制器运行?

    你好我们正在开发微控制器并使用发现板进行调试。我们的应用程序在没有电源时使用电池。在这种情况下,我们只需要两个I / O中断,LCD就可以工作。当我们不需要使用LCD时以及需要使用LCD
    发表于 04-30 07:48

    STM8微控制器系列产品

    STM8系列微控制器8微控制器平台基于高性能8位内核和先进外设集,在8位单片机行业中占据着举
    发表于 07-10 07:00

    不同微控制器版的特性

    要开始嵌入式开发,我们需要两个主要的东西,即开发板和IDE(集成开发环境)。微控制器开发板是一种印刷电路板(PCB),其电路和硬件设计用于促进某些微控制器板功能的实验。开发板与处理,存储
    发表于 08-07 08:53

    STM8S主流系列8微控制器STM8S003F3P6

    STM8S主流系列8微控制器意法半导体的STM8S系列主流8微控制器适于工业、消费类和计算机
    发表于 10-30 12:07

    如何微控制器与FPGA连接

    晚上好,如何微控制器与FPGA连接?如何使用微控制器配置FPGA?如何使用微控制器或软件程序为FPGA创建.bit文件以使用
    发表于 03-25 09:22

    用于外部微控制器的SPI连接器

    BlueNRG-MS设备,用于天线或测量仪器的SMA连接器以及用于外部微控制器的SPI连接器。该主板基于STM32L,作为驱动BlueNRG-MS设备的外部微控制器。 JTAG
    发表于 06-01 17:03

    STM8微控制器有哪些类型?

    STM8微控制器有哪些类型
    发表于 11-11 08:02

    STM32微控制器主要分为四大类

    STM32微控制器主要分为四大类:1、STM32 ARM Cortex 32位微控制器。2、STM32 ARM Cortex MPUs。3、STM8 8位MCU。4、经典MCU。如下图
    发表于 08-11 07:42

    基于微控制器设计的行车灯控制器

    描述基于微控制器的行车灯控制器该项目通过连接在其输出端的灯泡的闪烁模式提供了一些照明效果。在连接器 CN2 到 CN9 之间最多可以连接
    发表于 08-15 07:10

    STM8S微控制器参考手册

    导言本参考手册为应用开发人员提供了关于如何使用STM8S微控制器的存储和外设的完整信息。STM8S是一个拥有不同存储大小,封装和外设的
    发表于 09-25 07:33

    基于单片机的STM8在线编程

    抽象的工业生产经常会带来问题在更新MCU(微控制器单元)的程序时过程参数不能根据需要实时更新time.in以便于STM8的在线更新微控制器,本文设计了u
    发表于 10-10 06:46

    用于STM8微控制器的A/D转换精度改进技术

    STM8系列微控制器包括一个开关电容型模数转换。这种ADC类型使用SAR(逐次逼近寄存)原理, 通过该方法在几个步骤中执行转换。转换步骤数为等于ADC转换
    发表于 10-10 06:42

    STM8微控制器A/D转换器的精密改进技术

    电子发烧友网站提供《STM8微控制器A/D转换器的精密改进技术.pdf》资料免费下载
    发表于 10-07 15:27 0次下载
    <b class='flag-5'>STM8</b><b class='flag-5'>微控制器</b>A/D转换器的精密改进技术