lcd1602对于stm32的连接方式
时间: 2023-07-07 13:21:48 浏览: 612
下面是LCD1602与STM32的连接方法:
LCD1602引脚 | 连接到的STM32引脚
--- | ---
RS | 任意GPIO口
RW | GND
E | 任意GPIO口
D0 ~ D7 | 任意GPIO口
VSS | GND
VDD | 5V
VO | 通过10K电位器连接到GND和5V之间
A | 5V
K | GND
需要注意的是,为了使LCD1602正常工作,需要先将其初始化,具体步骤可以参考下面的代码:
```c
#include "stm32f10x.h"
#define LCD_RS_GPIO_RCC RCC_APB2Periph_GPIOB
#define LCD_RS_GPIO_PORT GPIOB
#define LCD_RS_GPIO_PIN GPIO_Pin_0
#define LCD_EN_GPIO_RCC RCC_APB2Periph_GPIOB
#define LCD_EN_GPIO_PORT GPIOB
#define LCD_EN_GPIO_PIN GPIO_Pin_1
#define LCD_D4_GPIO_RCC RCC_APB2Periph_GPIOB
#define LCD_D4_GPIO_PORT GPIOB
#define LCD_D4_GPIO_PIN GPIO_Pin_10
#define LCD_D5_GPIO_RCC RCC_APB2Periph_GPIOB
#define LCD_D5_GPIO_PORT GPIOB
#define LCD_D5_GPIO_PIN GPIO_Pin_11
#define LCD_D6_GPIO_RCC RCC_APB2Periph_GPIOB
#define LCD_D6_GPIO_PORT GPIOB
#define LCD_D6_GPIO_PIN GPIO_Pin_12
#define LCD_D7_GPIO_RCC RCC_APB2Periph_GPIOB
#define LCD_D7_GPIO_PORT GPIOB
#define LCD_D7_GPIO_PIN GPIO_Pin_13
void LCD_GPIO_Config(void);
void LCD_Init(void);
void LCD_SendCommand(uint8_t cmd);
void LCD_SendData(uint8_t data);
void LCD_WriteString(char *str);
int main(void)
{
LCD_GPIO_Config();
LCD_Init();
LCD_WriteString("Hello World!");
while(1);
}
void LCD_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(LCD_RS_GPIO_RCC | LCD_EN_GPIO_RCC | LCD_D4_GPIO_RCC | LCD_D5_GPIO_RCC | LCD_D6_GPIO_RCC | LCD_D7_GPIO_RCC, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = LCD_RS_GPIO_PIN;
GPIO_Init(LCD_RS_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LCD_EN_GPIO_PIN;
GPIO_Init(LCD_EN_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LCD_D4_GPIO_PIN;
GPIO_Init(LCD_D4_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LCD_D5_GPIO_PIN;
GPIO_Init(LCD_D5_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LCD_D6_GPIO_PIN;
GPIO_Init(LCD_D6_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LCD_D7_GPIO_PIN;
GPIO_Init(LCD_D7_GPIO_PORT, &GPIO_InitStructure);
}
void LCD_Init(void)
{
LCD_SendCommand(0x33);
LCD_SendCommand(0x32);
LCD_SendCommand(0x28);
LCD_SendCommand(0x0C);
LCD_SendCommand(0x06);
LCD_SendCommand(0x01);
}
void LCD_SendCommand(uint8_t cmd)
{
GPIO_ResetBits(LCD_RS_GPIO_PORT, LCD_RS_GPIO_PIN);
GPIO_ResetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
GPIO_WriteBit(LCD_D4_GPIO_PORT, LCD_D4_GPIO_PIN, (cmd & 0x10) >> 4);
GPIO_WriteBit(LCD_D5_GPIO_PORT, LCD_D5_GPIO_PIN, (cmd & 0x20) >> 5);
GPIO_WriteBit(LCD_D6_GPIO_PORT, LCD_D6_GPIO_PIN, (cmd & 0x40) >> 6);
GPIO_WriteBit(LCD_D7_GPIO_PORT, LCD_D7_GPIO_PIN, (cmd & 0x80) >> 7);
GPIO_SetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
GPIO_ResetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
GPIO_WriteBit(LCD_D4_GPIO_PORT, LCD_D4_GPIO_PIN, (cmd & 0x01));
GPIO_WriteBit(LCD_D5_GPIO_PORT, LCD_D5_GPIO_PIN, (cmd & 0x02) >> 1);
GPIO_WriteBit(LCD_D6_GPIO_PORT, LCD_D6_GPIO_PIN, (cmd & 0x04) >> 2);
GPIO_WriteBit(LCD_D7_GPIO_PORT, LCD_D7_GPIO_PIN, (cmd & 0x08) >> 3);
GPIO_SetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
GPIO_ResetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
delay_ms(1);
}
void LCD_SendData(uint8_t data)
{
GPIO_SetBits(LCD_RS_GPIO_PORT, LCD_RS_GPIO_PIN);
GPIO_ResetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
GPIO_WriteBit(LCD_D4_GPIO_PORT, LCD_D4_GPIO_PIN, (data & 0x10) >> 4);
GPIO_WriteBit(LCD_D5_GPIO_PORT, LCD_D5_GPIO_PIN, (data & 0x20) >> 5);
GPIO_WriteBit(LCD_D6_GPIO_PORT, LCD_D6_GPIO_PIN, (data & 0x40) >> 6);
GPIO_WriteBit(LCD_D7_GPIO_PORT, LCD_D7_GPIO_PIN, (data & 0x80) >> 7);
GPIO_SetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
GPIO_ResetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
GPIO_WriteBit(LCD_D4_GPIO_PORT, LCD_D4_GPIO_PIN, (data & 0x01));
GPIO_WriteBit(LCD_D5_GPIO_PORT, LCD_D5_GPIO_PIN, (data & 0x02) >> 1);
GPIO_WriteBit(LCD_D6_GPIO_PORT, LCD_D6_GPIO_PIN, (data & 0x04) >> 2);
GPIO_WriteBit(LCD_D7_GPIO_PORT, LCD_D7_GPIO_PIN, (data & 0x08) >> 3);
GPIO_SetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
GPIO_ResetBits(LCD_EN_GPIO_PORT, LCD_EN_GPIO_PIN);
delay_ms(1);
}
void LCD_WriteString(char *str)
{
while(*str)
{
LCD_SendData(*str++);
}
}
```
在上述代码中,我们使用了STM32的6个GPIO口来连接LCD1602,其中4个引脚用于控制LCD的数据线,另外两个引脚用于控制LCD的RS和EN引脚。需要注意的是,为了使LCD正常工作,需要提供一个1ms的延时函数。