stm32f103zet6LCD12864显示光标的初始化代码
时间: 2023-09-10 21:09:47 浏览: 116
以下是在STM32F103ZET6单片机上使用LCD12864显示屏初始化光标的示例代码:
```c
#include "stm32f10x.h"
#include "delay.h" //需要使用延时函数的库,可以自行添加
#define LCD_DATA_PORT GPIOA // 设置LCD12864的数据端口
#define LCD_RS_PORT GPIOB // 设置LCD12864的RS引脚所在的端口
#define LCD_RS_PIN GPIO_Pin_0 // 设置LCD12864的RS引脚
#define LCD_RW_PORT GPIOB // 设置LCD12864的RW引脚所在的端口
#define LCD_RW_PIN GPIO_Pin_1 // 设置LCD12864的RW引脚
#define LCD_EN_PORT GPIOB // 设置LCD12864的EN引脚所在的端口
#define LCD_EN_PIN GPIO_Pin_2 // 设置LCD12864的EN引脚
void LCD_WriteCommand(uint8_t command) {
GPIO_ResetBits(LCD_RS_PORT, LCD_RS_PIN); // 将RS引脚置低,表示发送命令
GPIO_ResetBits(LCD_RW_PORT, LCD_RW_PIN); // 将RW引脚置低,表示写入数据
LCD_DATA_PORT->ODR = command; // 将命令写入数据端口
GPIO_SetBits(LCD_EN_PORT, LCD_EN_PIN); // 在EN引脚上产生一个上升沿
delay_us(1); // 等待一段时间以确保命令被处理
GPIO_ResetBits(LCD_EN_PORT, LCD_EN_PIN); // 在EN引脚上产生一个下降沿
}
void LCD_WriteData(uint8_t data) {
GPIO_SetBits(LCD_RS_PORT, LCD_RS_PIN); // 将RS引脚置高,表示发送数据
GPIO_ResetBits(LCD_RW_PORT, LCD_RW_PIN); // 将RW引脚置低,表示写入数据
LCD_DATA_PORT->ODR = data; // 将数据写入数据端口
GPIO_SetBits(LCD_EN_PORT, LCD_EN_PIN); // 在EN引脚上产生一个上升沿
delay_us(1); // 等待一段时间以确保数据被处理
GPIO_ResetBits(LCD_EN_PORT, LCD_EN_PIN); // 在EN引脚上产生一个下降沿
}
void LCD_Init() {
// 初始化LCD12864显示屏的硬件连接
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOA和GPIOB的时钟
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 设置为推挽输出模式
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; // 设置输出速度为10MHz
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All; // 设置所有引脚
GPIO_Init(LCD_DATA_PORT, &GPIO_InitStruct); // 初始化数据端口
GPIO_InitStruct.GPIO_Pin = LCD_RS_PIN;
GPIO_Init(LCD_RS_PORT, &GPIO_InitStruct); // 初始化RS引脚
GPIO_InitStruct.GPIO_Pin = LCD_RW_PIN;
GPIO_Init(LCD_RW_PORT, &GPIO_InitStruct); // 初始化RW引脚
GPIO_InitStruct.GPIO_Pin = LCD_EN_PIN;
GPIO_Init(LCD_EN_PORT, &GPIO_InitStruct); // 初始化EN引脚
// 初始化LCD12864显示屏的光标
delay_ms(50); // 等待LCD12864显示屏上电稳定
LCD_WriteCommand(0x30); // 设置8位数据总线,基本指令集
delay_us(50);
LCD_WriteCommand(0x01); // 清屏
delay_us(50);
LCD_WriteCommand(0x0C); // 显示开,光标不闪烁
delay_us(50);
LCD_WriteCommand(0x06); // 光标右移
delay_us(50);
}
int main() {
SystemInit(); // 初始化系统
LCD_Init(); // 初始化LCD12864显示屏
while (1) {
// 在这里可以实现其他功能或者显示内容
}
}
```
以上代码是一个简单的示例,涉及到了LCD12864的硬件连接和初始化过程。注意,需要根据你的具体硬件连接情况和使用的引脚进行相应的修改。同时,你可能需要添加其他功能或者显示内容到主循环中。
请确保你已经正确配置了STM32F103ZET6单片机的系统时钟和GPIO引脚,并正确包含了相关的库文件。
阅读全文