首页 > 微机单片机 >单片机制作 > 将LCD与STM8微控制器连接的过程

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

来源:互联网发布者:supremeOne 关键词: 微控制器 lcd STM8 更新时间: 2024/03/06

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

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

16x2 LCD 显示器的工作原理

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

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

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

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

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

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

电源管脚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 编程器的连接方式与我们之前的教程一样。我在面包板上完成了完整的连接,我的设置如下图所示。

STM8 LCD 库——STM8S103F3P6 的头文件

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

如果您不确定如何添加头文件和编译程序,请按照本页底部的视频进行操作。如果您对头文件中的代码如何工作感到好奇,您可以查看带有 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 电源。

如您所见,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);
测试变量++;
}
}

提问/讨论

这里还没有内容,您有什么问题吗?

我要提问/讨论

推荐帖子 最新更新时间:2024-11-21 19:54

《小水电站自动控制》项目总结
一、项目背景 本项目是在原有的《小水电站远程控制》项目基础上实施的,远程控制是通过互联网摄像机远程查看水位情况,然后用手机 APP 通过网络继电器来控制水轮发电机组进水闸门的开大或者关小。相关的电气、机械部分是早已完成了的,本项目是在原来的基础上增加单片机控制模块,自动根
 hujjGD32 MCU
【RT-Thread软件包应用作品】多功能天气时钟
多功能天气时钟-微信小程序版 一、项目背景 在不久前的一个早晨,我被一阵闹铃叫醒后,像往常一样去上班,到公司后发现很多同事都带了伞,于是乎打开了兜里的砖块 ( 手机 ) ,晚上回去的时候果然被淋了,虽然雨不是很大,但是被淋总是不爽,于是乎开始思考是否能做一个
 一叶孤沙实时操作系统RTOS
有关mw5.0,directshow中NondelegatingRelease问题
请问,我在debug下就出现1个问题:error LNK2001: unresolved external symbol public: virtual unsigned long __cdecl CBaseFilter::NonDelegatingRelease(void) (
 beyondaymk嵌入式系统
请教这个升压电路的原理
下面的这个电路图能实现5V升压至12V的么 什么原理呢,请教各位老师分析一下 请教这个升压电路的原理 『下面的这个电路图能实现5V升压至12V的么』 可以实现,但该电路效率较低(费电)。 此电路,L1Q2D1C2构成典型的Boost电路。 Q2Q
 kal9623287电源技术
恭喜自己在eeworld上总分突破3000,同时感谢广大网友的慷慨给分,特散分!
从2008年10月20日第一次有网友结贴给我分,实现了0的突破,也在此时我才知道有结贴给分一说,在短短两个月内,我的技术总分上升到了3000分,在这里感谢大家 由于我的可用分并不多,所以只能散200分了,下次有机会再散 希望我们的论坛人气越来越旺! 恭喜自己在eeworld上总
 ljm362430嵌入式系统
UWB背景信息介绍(上)
我们可以说UWB是当今最好、最先进的定位技术,但证据呢?要回答这个问题,我们需要透过现象看本质。本文将探讨UWB技术的内部工作原理,并概述UWB和窄带定位方法之间的差异。 UWB与窄带进行比较 适用于室内和室外定位应用的技术有多种,但UWB最精确、最可靠且最具成本效益;通常
 btty038RF/无线

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

EEWORLD 电路图 站点相关: 下载中心 Datasheet 参考设计

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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