基于STM32液晶12864COG 初始化程序
时间: 2023-10-10 12:04:30 浏览: 41
以下是基于STM32液晶12864COG的初始化程序示例:
```c
#include "stm32f10x.h"
#include "Delay.h"
#include "LCD12864.h"
// 定义LCD控制引脚
#define LCD_CS_PIN GPIO_Pin_12
#define LCD_CS_PORT GPIOB
#define LCD_RS_PIN GPIO_Pin_13
#define LCD_RS_PORT GPIOB
#define LCD_RW_PIN GPIO_Pin_14
#define LCD_RW_PORT GPIOB
#define LCD_E_PIN GPIO_Pin_15
#define LCD_E_PORT GPIOB
#define LCD_DB0_PIN GPIO_Pin_0
#define LCD_DB0_PORT GPIOC
#define LCD_DB1_PIN GPIO_Pin_1
#define LCD_DB1_PORT GPIOC
#define LCD_DB2_PIN GPIO_Pin_2
#define LCD_DB2_PORT GPIOC
#define LCD_DB3_PIN GPIO_Pin_3
#define LCD_DB3_PORT GPIOC
#define LCD_DB4_PIN GPIO_Pin_4
#define LCD_DB4_PORT GPIOC
#define LCD_DB5_PIN GPIO_Pin_5
#define LCD_DB5_PORT GPIOC
#define LCD_DB6_PIN GPIO_Pin_6
#define LCD_DB6_PORT GPIOC
#define LCD_DB7_PIN GPIO_Pin_7
#define LCD_DB7_PORT GPIOC
// LCD 初始化
void LCD_Init(void)
{
// 配置控制引脚为输出模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = LCD_CS_PIN | LCD_RS_PIN | LCD_RW_PIN | LCD_E_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_CS_PORT, &GPIO_InitStructure);
// 配置数据引脚为输出模式
GPIO_InitStructure.GPIO_Pin = LCD_DB0_PIN | LCD_DB1_PIN | LCD_DB2_PIN | LCD_DB3_PIN
| LCD_DB4_PIN | LCD_DB5_PIN | LCD_DB6_PIN | LCD_DB7_PIN;
GPIO_Init(LCD_DB0_PORT, &GPIO_InitStructure);
// 初始化LCD
LCD_Write_Command(0x30);
Delay_ms(5);
LCD_Write_Command(0x30);
Delay_ms(1);
LCD_Write_Command(0x30);
Delay_ms(1);
LCD_Write_Command(0x38);
LCD_Write_Command(0x08);
LCD_Write_Command(0x01);
LCD_Write_Command(0x06);
LCD_Write_Command(0x0C);
}
// 写命令
void LCD_Write_Command(uint8_t cmd)
{
GPIO_ResetBits(LCD_RS_PORT, LCD_RS_PIN);
GPIO_ResetBits(LCD_RW_PORT, LCD_RW_PIN);
GPIO_SetBits(LCD_CS_PORT, LCD_CS_PIN);
GPIO_Write(LCD_DB0_PORT, (GPIO_ReadOutputData(LCD_DB0_PORT) & 0xFF00) | cmd);
GPIO_ResetBits(LCD_E_PORT, LCD_E_PIN);
Delay_us(10);
GPIO_SetBits(LCD_E_PORT, LCD_E_PIN);
Delay_us(10);
GPIO_ResetBits(LCD_E_PORT, LCD_E_PIN);
Delay_us(10);
}
// 写数据
void LCD_Write_Data(uint8_t data)
{
GPIO_SetBits(LCD_RS_PORT, LCD_RS_PIN);
GPIO_ResetBits(LCD_RW_PORT, LCD_RW_PIN);
GPIO_SetBits(LCD_CS_PORT, LCD_CS_PIN);
GPIO_Write(LCD_DB0_PORT, (GPIO_ReadOutputData(LCD_DB0_PORT) & 0xFF00) | data);
GPIO_ResetBits(LCD_E_PORT, LCD_E_PIN);
Delay_us(10);
GPIO_SetBits(LCD_E_PORT, LCD_E_PIN);
Delay_us(10);
GPIO_ResetBits(LCD_E_PORT, LCD_E_PIN);
Delay_us(10);
}
// 清屏
void LCD_Clear(void)
{
LCD_Write_Command(0x01);
Delay_ms(10);
}
// 显示字符串
void LCD_Show_String(uint8_t x, uint8_t y, char *str)
{
uint8_t i = 0;
switch (y)
{
case 0:
LCD_Write_Command(0x80 + x);
break;
case 1:
LCD_Write_Command(0xC0 + x);
break;
case 2:
LCD_Write_Command(0x90 + x);
break;
case 3:
LCD_Write_Command(0xD0 + x);
break;
default:
break;
}
while (str[i] != '\0')
{
LCD_Write_Data(str[i]);
i++;
}
}
```
这是一个简单的初始化程序示例,可以实现LCD的基本功能,如清屏、显示字符串等。你需要根据自己的硬件环境和需要进行适当的修改。