用keil5写一个stm32f103c8t6驱动lcd12864的程序
时间: 2023-10-06 16:11:12 浏览: 145
STM32f103C8T6的Lcd12864显示程序
好的,这里提供一个简单的示例程序,使用Keil5和STM32CubeMX来驱动LCD12864。
步骤1:创建一个新的STM32CubeMX项目
- 打开STM32CubeMX,创建一个新项目。
- 选择“STM32F1”系列和正确的芯片型号“STM32F103C8T6”。
- 找到“Pinout”选项卡,配置GPIO口为LCD12864引脚。
- 找到“Clock Configuration”选项卡,配置系统时钟为72MHz。
- 找到“Project Manager”选项卡,生成代码。
步骤2:配置Keil5工程
- 打开Keil5,选择“File” -> “New Project” -> “STM32” -> “STM32F1xx C/C++ Project”。
- 配置“Target”选项卡,选择正确的芯片型号“STM32F103C8T6”。
- 配置“Device”选项卡,选择正确的器件名称“STM32F103C8”。
- 配置“C/C++”选项卡,选择“Add”按钮添加生成的头文件和源文件。
- 配置“Options for Target”选项卡,选择“Debug”选项卡,选择正确的调试器,例如ST-Link。
- 配置“Output”选项卡,选择正确的输出目录和名称。
步骤3:编写LCD12864驱动程序
- 打开生成的“main.c”文件,添加以下代码:
```c
#include "lcd12864.h"
#include "stm32f1xx_hal.h"
int main(void)
{
HAL_Init();
lcd12864_init();
lcd12864_clear();
lcd12864_puts(0, 0, "Hello, World!");
while (1)
{
}
}
```
- 创建一个名为“lcd12864.h”的头文件,添加以下代码:
```c
#ifndef __LCD12864_H
#define __LCD12864_H
#include "stm32f1xx_hal.h"
extern void lcd12864_init(void);
extern void lcd12864_clear(void);
extern void lcd12864_puts(uint8_t x, uint8_t y, char* str);
#endif /* __LCD12864_H */
```
- 创建一个名为“lcd12864.c”的源文件,添加以下代码:
```c
#include "lcd12864.h"
#define RS_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET)
#define RS_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET)
#define RW_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET)
#define RW_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET)
#define EN_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET)
#define EN_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET)
void lcd12864_delay(uint32_t ms)
{
HAL_Delay(ms);
}
void lcd12864_write_cmd(uint8_t cmd)
{
RS_L;
RW_L;
EN_H;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, (cmd & 0x01));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, (cmd & 0x02));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, (cmd & 0x04));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, (cmd & 0x08));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, (cmd & 0x10));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, (cmd & 0x20));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, (cmd & 0x40));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, (cmd & 0x80));
EN_L;
lcd12864_delay(1);
}
void lcd12864_write_data(uint8_t data)
{
RS_H;
RW_L;
EN_H;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, (data & 0x01));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, (data & 0x02));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, (data & 0x04));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, (data & 0x08));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, (data & 0x10));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, (data & 0x20));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, (data & 0x40));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, (data & 0x80));
EN_L;
lcd12864_delay(1);
}
void lcd12864_init(void)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(100);
lcd12864_write_cmd(0x30);
lcd12864_delay(5);
lcd12864_write_cmd(0x30);
lcd12864_delay(1);
lcd12864_write_cmd(0x30);
lcd12864_delay(1);
lcd12864_write_cmd(0x38);
lcd12864_write_cmd(0x08);
lcd12864_write_cmd(0x01);
lcd12864_write_cmd(0x06);
lcd12864_write_cmd(0x0c);
}
void lcd12864_clear(void)
{
lcd12864_write_cmd(0x01);
}
void lcd12864_puts(uint8_t x, uint8_t y, char* str)
{
uint8_t addr;
switch (y)
{
case 0:
addr = 0x80 + x;
break;
case 1:
addr = 0x90 + x;
break;
case 2:
addr = 0x88 + x;
break;
case 3:
addr = 0x98 + x;
break;
default:
break;
}
lcd12864_write_cmd(addr);
while (*str)
{
lcd12864_write_data(*str++);
}
}
```
步骤4:连接STM32F103C8T6和LCD12864
- 将LCD12864的引脚连接到STM32F103C8T6的GPIO口。
- LCD12864引脚:E -> PA3, R/W -> PA2, RS -> PA1, D0-D7 -> PB0-PB7
- 通过ST-Link连接STM32F103C8T6和PC。
步骤5:编译和下载程序
- 编译程序,确保没有错误。
- 下载程序到STM32F103C8T6。
- LCD12864应该会显示“Hello, World!”字样。
这就是一个简单的Keil5和STM32CubeMX驱动LCD12864的程序。
阅读全文