stm8单片机的详细说明书(STM8单片机接入1602LCD)

1602 LCD 显示屏爱好者众多也是最常用的显示屏。当您想向用户显示基本信息时,显示非常有用,并且还可以帮助测试或调试我们的代码。这种1602 LCD 模块已经流行了很长时间,并且很容易买到。

在前面我们已经介绍了如何在8051单片机上使用1602LCD,在本文中,我们将继续介绍如何在STM8上使用1602 LCD。

认识1602 LCD

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

stm8单片机的详细说明书(STM8单片机接入1602LCD)(1)

stm8单片机的详细说明书(STM8单片机接入1602LCD)(2)

如上图所示,在 LCD 的背面,你会发现两个黑点,里面是HD44780 LCD 驱动 IC。我们的微控制器与这个 IC 通信,进而控制 LCD 把我们的内容在上面显示出来。

如果您想知道1602 LCD是如何工作的,可以查看16x2 LCD 显示器的工作原理,这里不展开。

在本文中,我们将讨论使用简单的 LCD_print_char和LCD_print_string命令在 1602 LCD 显示器上显示字母字符(字母和数字),这里包含电路图和代码。

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

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

stm8单片机的详细说明书(STM8单片机接入1602LCD)(3)

注意LCD的工作电压为5V, STM8S103F3P6 微控制器工作电压为3.3V,所以必须为 LCD 提供 额外的5V 电源。

LCD Pin 3(VO/VEE)通过一个10k的可变电阻连接到电压(Vcc)以调节LCD的对比度。可变电阻的中间脚连接到 PIN 3,可变电阻其他两个引脚分别连接到Vcc和GND。

然后是RS、读/写 (RW) 和使能 (E) 引脚。

RW引脚接地,因为我们不会从 LCD 读取任何内容,我们只会执行写入操作。

另外两个控制引脚 RS 和 E 分别连接到 PA1 和 PA2 引脚。

数据引脚 DB0 到 DB7。1602 LCD 可以在两种模式下工作,一种是 8 位模式,我们必须使用 LCD 上的所有 8 个数据引脚(DB0-DB7),另一种是 4 位模式,我们只需要 4 个数据引脚(DB4-DB7) 。

因为它需要占用单片机的 GPIO ,由于一般单片机引脚较少,因此我们本次使用了 4 位模式,并且仅将引脚 DB4、DB5、DB6 和 DB7 分别连接到引脚 PD1、PD2、PD3 , 和 PD4。

最后两个引脚 BLA 和 BLK 用于为LCD内部背光灯供电,我们使用了一个 560 欧姆的电阻作为限流电阻。

STM8S微控制器的LCD程序

为了演示,我们将对 STM8S 控制器进行编程以显示一个简单的字符串,例如“Hello World”,然后我们将在第二行中每隔一秒增加一个“Test”值。

我们通过定义引脚并添加所需的头文件来启动我们的程序。在我们上面的电路图中,我们已将LCD_RS连接到 A1,因此我们将其定义为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 #include "STM8S.h" #include "stm8s103_LCD_16x2.h" void main() { int test_var = 0; char d4,d3,d2,d1; Lcd_Begin(); Lcd_Clear(); Lcd_Set_Cursor(1,1); Lcd_Print_String("STM8S103F3P3 LCD"); delay_ms(5000); Lcd_Clear(); Lcd_Set_Cursor(1,1); Lcd_Print_String("Hello World!"); Lcd_Set_Cursor(2,1); Lcd_Print_String("Test: "); while (1) { d4 = test_var '0'; d3 = (test_var/10) '0'; d2 = (test_var/100) '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); delay_ms(1000); test_var ; } }

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页