stm32f103rbt6驱动rt12864-1
时间: 2023-12-01 10:02:35 浏览: 33
驱动RT12864-1液晶屏需要使用STM32F103芯片的GPIO进行控制。以下是一个简单的驱动程序,可供参考:
```c
#include "stm32f10x.h"
#include "delay.h"
// 定义液晶屏接口
#define LCD_EN_CLK RCC_APB2Periph_GPIOA
#define LCD_EN_PORT GPIOA
#define LCD_EN_PIN GPIO_Pin_6
#define LCD_RS_CLK RCC_APB2Periph_GPIOA
#define LCD_RS_PORT GPIOA
#define LCD_RS_PIN GPIO_Pin_5
#define LCD_RW_CLK RCC_APB2Periph_GPIOA
#define LCD_RW_PORT GPIOA
#define LCD_RW_PIN GPIO_Pin_4
#define LCD_DATA_CLK RCC_APB2Periph_GPIOB
#define LCD_DATA_PORT GPIOB
#define LCD_D0_PIN GPIO_Pin_0
#define LCD_D1_PIN GPIO_Pin_1
#define LCD_D2_PIN GPIO_Pin_2
#define LCD_D3_PIN GPIO_Pin_3
#define LCD_D4_PIN GPIO_Pin_4
#define LCD_D5_PIN GPIO_Pin_5
#define LCD_D6_PIN GPIO_Pin_6
#define LCD_D7_PIN GPIO_Pin_7
// 定义液晶屏命令
#define LCD_CLR 0x01
#define LCD_HOME 0x02
#define LCD_MODE 0x06
#define LCD_DISP 0x0C
#define LCD_CURS 0x0E
#define LCD_CURS_BL 0x0F
#define LCD_FUNC 0x38
// 定义液晶屏函数
void lcd_init(void);
void lcd_cmd(uint8_t cmd);
void lcd_data(uint8_t data);
void lcd_puts(char *str);
void lcd_gotoxy(uint8_t x, uint8_t y);
int main(void)
{
// 初始化时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
// 初始化液晶屏
lcd_init();
// 显示字符串
lcd_puts("Hello, world!");
while (1) {
// 循环执行
}
}
// 初始化液晶屏
void lcd_init(void)
{
// 初始化液晶屏接口
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = LCD_EN_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_EN_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LCD_RS_PIN;
GPIO_Init(LCD_RS_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LCD_RW_PIN;
GPIO_Init(LCD_RW_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LCD_D0_PIN | LCD_D1_PIN | LCD_D2_PIN | LCD_D3_PIN |
LCD_D4_PIN | LCD_D5_PIN | LCD_D6_PIN | LCD_D7_PIN;
GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure);
// 初始化液晶屏
delay_ms(20);
lcd_cmd(0x30);
delay_ms(5);
lcd_cmd(0x30);
delay_ms(1);
lcd_cmd(0x30);
lcd_cmd(0x02);
lcd_cmd(LCD_FUNC);
lcd_cmd(LCD_DISP);
lcd_cmd(LCD_CLR);
lcd_cmd(LCD_MODE);
}
// 发送命令到液晶屏
void lcd_cmd(uint8_t cmd)
{
GPIO_ResetBits(LCD_RS_PORT, LCD_RS_PIN);
GPIO_ResetBits(LCD_RW_PORT, LCD_RW_PIN);
GPIO_Write(LCD_DATA_PORT, cmd);
GPIO_SetBits(LCD_EN_PORT, LCD_EN_PIN);
delay_us(10);
GPIO_ResetBits(LCD_EN_PORT, LCD_EN_PIN);
delay_ms(2);
}
// 发送数据到液晶屏
void lcd_data(uint8_t data)
{
GPIO_SetBits(LCD_RS_PORT, LCD_RS_PIN);
GPIO_ResetBits(LCD_RW_PORT, LCD_RW_PIN);
GPIO_Write(LCD_DATA_PORT, data);
GPIO_SetBits(LCD_EN_PORT, LCD_EN_PIN);
delay_us(10);
GPIO_ResetBits(LCD_EN_PORT, LCD_EN_PIN);
delay_ms(2);
}
// 显示字符串
void lcd_puts(char *str)
{
while (*str) {
lcd_data(*str++);
}
}
// 光标移动到指定位置
void lcd_gotoxy(uint8_t x, uint8_t y)
{
uint8_t addr;
if (y == 0) {
addr = 0x80 + x;
} else {
addr = 0xC0 + x;
}
lcd_cmd(addr);
}
```
需要注意的是,以上代码仅供参考,具体实现可能需要根据液晶屏型号和引脚分配进行调整。同时,为了保证液晶屏的稳定性,还需要进行一定的初始化和延时操作。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)