STM32F103 连接 LCD1602 显示屏教程
要将 LCD1602 与 STM32F103 连接,需要使用以下引脚:
| LCD1602 引脚 | STM32F103 引脚 | |---|---| | VSS | GND | | VDD | +5V | | VO | 可变电阻器(10kΩ)与 GND 连接 | | RS | PB0 | | RW | GND | | E | PB1 | | D0-D7 | 不使用 | | A | +5V | | K | GND |
其中,RS、RW 和 E 引脚连接到 STM32F103 的 GPIO 引脚,可以通过 STM32 的编程来控制它们。VO 引脚连接到一个可变电阻器,可以通过调节电压来控制 LCD 的对比度。A 和 K 引脚连接到 +5V 和 GND,分别提供正极和负极电源。
在 STM32 的程序中,需要定义 GPIO 引脚并进行初始化。例如:
#include "stm32f10x.h"
#define RS_PIN GPIO_Pin_0
#define E_PIN GPIO_Pin_1
#define RS_PORT GPIOB
#define E_PORT GPIOB
#define LCD_PORT GPIOB
void lcd_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Pin = RS_PIN | E_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void lcd_send_cmd(uint8_t cmd)
{
GPIO_ResetBits(RS_PORT, RS_PIN);
GPIO_Write(GPIOB, cmd);
GPIO_SetBits(E_PORT, E_PIN);
delay(1);
GPIO_ResetBits(E_PORT, E_PIN);
}
void lcd_send_data(uint8_t data)
{
GPIO_SetBits(RS_PORT, RS_PIN);
GPIO_Write(GPIOB, data);
GPIO_SetBits(E_PORT, E_PIN);
delay(1);
GPIO_ResetBits(E_PORT, E_PIN);
}
void lcd_clear(void)
{
lcd_send_cmd(0x01);
}
void lcd_init(void)
{
lcd_send_cmd(0x38);
lcd_send_cmd(0x0C);
lcd_send_cmd(0x06);
lcd_send_cmd(0x01);
}
void lcd_display_string(char *str)
{
while(*str)
{
lcd_send_data(*str++);
}
}
在这个例子中,我们使用 GPIOB0 和 GPIOB1 引脚来控制 LCD 的 RS 和 E 引脚,使用 GPIOB10 到 GPIOB15 引脚来控制 LCD 的 D0 到 D7 引脚。在 lcd_init() 函数中,我们发送了一些初始化命令,以便正确配置 LCD。lcd_send_cmd() 和 lcd_send_data() 函数用于向 LCD 发送命令和数据,lcd_clear() 函数用于清除 LCD 屏幕,lcd_display_string() 函数用于在 LCD 屏幕上显示字符串。
原文地址: https://www.cveoy.top/t/topic/lJIk 著作权归作者所有。请勿转载和采集!