lcd1602液晶显示屏STM32f103hal库
时间: 2025-06-18 09:19:37 浏览: 15
### STM32F103 HAL库驱动LCD1602液晶显示屏示例代码及教程
使用STM32F103的HAL库驱动LCD1602液晶显示屏是一种高效的方式,能够简化开发流程并提高代码的可移植性。以下是一个基于HAL库的完整示例代码和相关说明。
#### 1. 硬件连接
在硬件设计中,LCD1602通过I2C接口与STM32F103通信。通常,LCD1602模块上会集成一个I2C转接芯片(如PCF8574),用于将I2C信号转换为LCD所需的并行信号。硬件连接如下:
- SDA(数据线)连接到STM32F103的I2C SDA引脚。
- SCL(时钟线)连接到STM32F103的I2C SCL引脚。
- VCC和GND分别连接到电源和地[^1]。
#### 2. 初始化代码
初始化代码包括配置I2C外设和初始化LCD1602。以下是具体的实现:
```c
#include "stm32f1xx_hal.h"
#include <string.h>
// 定义LCD1602的I2C地址
#define LCD1602_ADDR 0x27 // 根据实际模块调整
// I2C句柄
I2C_HandleTypeDef hi2c1;
// 写命令到LCD1602
void LCD_WriteCommand(uint8_t cmd) {
uint8_t data[2];
data[0] = 0x00; // 指令模式
data[1] = cmd;
HAL_I2C_Master_Transmit(&hi2c1, LCD1602_ADDR << 1, data, 2, HAL_MAX_DELAY);
}
// 写数据到LCD1602
void LCD_WriteData(uint8_t data) {
uint8_t buf[2];
buf[0] = 0x40; // 数据模式
buf[1] = data;
HAL_I2C_Master_Transmit(&hi2c1, LCD1602_ADDR << 1, buf, 2, HAL_MAX_DELAY);
}
// 初始化LCD1602
void LCD_Init(void) {
__HAL_RCC_I2C1_CLK_ENABLE(); // 启用I2C1时钟
HAL_Delay(50); // 上电延时
LCD_WriteCommand(0x38); // 设置为16x2显示模式
HAL_Delay(1);
LCD_WriteCommand(0x0C); // 显示开,光标关
HAL_Delay(1);
LCD_WriteCommand(0x06); // 自增地址,无移屏
HAL_Delay(1);
LCD_WriteCommand(0x01); // 清屏
HAL_Delay(2);
}
// 在指定位置写入字符
void LCD_SetCursor(uint8_t row, uint8_t col) {
uint8_t addr;
if (row == 0) {
addr = 0x80 + col;
} else if (row == 1) {
addr = 0xC0 + col;
}
LCD_WriteCommand(addr);
}
// 显示字符串
void LCD_ShowString(uint8_t row, uint8_t col, char *str) {
LCD_SetCursor(row, col);
while (*str) {
LCD_WriteData(*str++);
}
}
// 主函数
int main(void) {
HAL_Init(); // 初始化HAL库
SystemClock_Config();// 配置系统时钟
MX_I2C1_Init(); // 初始化I2C1
LCD_Init(); // 初始化LCD1602
LCD_SetCursor(0, 0);
LCD_ShowString(0, 0, "Hello World");
LCD_SetCursor(1, 0);
LCD_ShowString(1, 0, "STM32F103");
while (1) {
HAL_Delay(1000);
}
}
```
#### 3. 代码说明
- **I2C初始化**:通过`MX_I2C1_Init()`函数完成I2C外设的初始化。该函数通常由CubeMX生成。
- **LCD指令发送**:通过`LCD_WriteCommand()`函数发送控制指令,例如设置显示模式、清屏等。
- **数据写入**:通过`LCD_WriteData()`函数向LCD发送字符数据。
- **光标定位**:通过`LCD_SetCursor()`函数设置显示光标的位置。
- **字符串显示**:通过`LCD_ShowString()`函数在指定位置显示字符串[^1]。
#### 4. 注意事项
- 确保正确配置I2C外设的时钟频率,以避免通信失败。
- 如果LCD1602模块的I2C地址不是默认值(如0x27),需要根据模块手册进行调整[^3]。
---
###
阅读全文
相关推荐

















