lcd12864 A0接GPIOA_Pin8, WR接GPIOA_Pin9, RD接GPIOA_Pin10, CS接GPIOA_Pin11,数据选择端DB0-DB1接GPIOA_Pin0-GPIO_Pin7基于stm32103如何写初始化显示代码
时间: 2024-01-21 13:20:08 浏览: 33
首先,需要在STM32CubeMX中配置这些引脚为输出模式。然后,在代码中使用以下代码初始化LCD:
```c
// 定义引脚号
#define PIN_A0 GPIO_PIN_8
#define PIN_WR GPIO_PIN_9
#define PIN_RD GPIO_PIN_10
#define PIN_CS GPIO_PIN_11
#define PIN_DB0 GPIO_PIN_0
#define PIN_DB1 GPIO_PIN_1
#define PIN_DB2 GPIO_PIN_2
#define PIN_DB3 GPIO_PIN_3
#define PIN_DB4 GPIO_PIN_4
#define PIN_DB5 GPIO_PIN_5
#define PIN_DB6 GPIO_PIN_6
#define PIN_DB7 GPIO_PIN_7
// 初始化LCD
void LCD_Init(void)
{
// 设置引脚为输出模式
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = PIN_A0 | PIN_WR | PIN_RD | PIN_CS | PIN_DB0 | PIN_DB1 | PIN_DB2 | PIN_DB3 | PIN_DB4 | PIN_DB5 | PIN_DB6 | PIN_DB7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 初始化时序
HAL_GPIO_WritePin(GPIOA, PIN_CS, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, PIN_RD, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, PIN_A0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, PIN_DB0 | PIN_DB1 | PIN_DB2 | PIN_DB3 | PIN_DB4 | PIN_DB5 | PIN_DB6 | PIN_DB7, GPIO_PIN_RESET);
// 进入复位状态
HAL_GPIO_WritePin(GPIOA, PIN_CS, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, PIN_RD, GPIO_PIN_SET);
HAL_Delay(5);
HAL_GPIO_WritePin(GPIOA, PIN_A0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_RESET);
HAL_Delay(5);
HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_SET);
HAL_Delay(5);
// 初始化寄存器
LCD_WriteCommand(0x3F);
LCD_WriteCommand(0xC0);
LCD_WriteCommand(0xB8);
LCD_WriteCommand(0x40);
LCD_WriteCommand(0xF3);
LCD_WriteCommand(0x80);
// 退出复位状态
HAL_GPIO_WritePin(GPIOA, PIN_CS, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, PIN_A0, GPIO_PIN_SET);
}
// 写入命令
void LCD_WriteCommand(uint8_t command)
{
HAL_GPIO_WritePin(GPIOA, PIN_A0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_RESET);
LCD_WriteData(command);
HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_SET);
}
// 写入数据
void LCD_WriteData(uint8_t data)
{
HAL_GPIO_WritePin(GPIOA, PIN_DB0, (data & 0x01) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_DB1, (data & 0x02) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_DB2, (data & 0x04) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_DB3, (data & 0x08) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_DB4, (data & 0x10) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_DB5, (data & 0x20) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_DB6, (data & 0x40) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, PIN_DB7, (data & 0x80) ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
```
这里的初始化时序和初始化寄存器命令是根据LCD的型号确定的,需要根据实际情况进行修改。具体的命令可以参考LCD的数据手册。