STM32F103RCT6驱动LCD1602A的代码
时间: 2024-05-02 17:03:29 浏览: 29
以下是一个简单的STM32F103RCT6驱动LCD1602A的代码示例,使用了4位数据线模式,你可以根据自己的需要进行修改:
```c
#include "stm32f10x.h"
#define RS GPIO_Pin_1
#define EN GPIO_Pin_2
#define D4 GPIO_Pin_4
#define D5 GPIO_Pin_5
#define D6 GPIO_Pin_6
#define D7 GPIO_Pin_7
void delay_us(uint32_t us) // 延时函数
{
uint32_t i;
for(i=0;i<us*8;i++);
}
void delay_ms(uint32_t ms) // 延时函数
{
uint32_t i;
for(i=0;i<ms*8000;i++);
}
void GPIO_Configuration(void) // GPIO初始化函数
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 打开GPIOA时钟
GPIO_InitStructure.GPIO_Pin = RS | EN | D4 | D5 | D6 | D7; // 配置引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输出速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA
}
void LCD_write_data(uint8_t data) // 写入数据
{
GPIO_SetBits(GPIOA, RS); // RS为高电平,表示写入数据
GPIO_WriteBit(GPIOA, D4, (BitAction)((data>>0)&0x01)); // 输出D4 ~ D7
GPIO_WriteBit(GPIOA, D5, (BitAction)((data>>1)&0x01));
GPIO_WriteBit(GPIOA, D6, (BitAction)((data>>2)&0x01));
GPIO_WriteBit(GPIOA, D7, (BitAction)((data>>3)&0x01));
GPIO_SetBits(GPIOA, EN); // 使能
delay_us(1);
GPIO_ResetBits(GPIOA, EN); // 禁止
delay_us(40); // 等待液晶屏处理数据
}
void LCD_write_cmd(uint8_t cmd) // 写入命令
{
GPIO_ResetBits(GPIOA, RS); // RS为低电平,表示写入命令
GPIO_WriteBit(GPIOA, D4, (BitAction)((cmd>>0)&0x01)); // 输出D4 ~ D7
GPIO_WriteBit(GPIOA, D5, (BitAction)((cmd>>1)&0x01));
GPIO_WriteBit(GPIOA, D6, (BitAction)((cmd>>2)&0x01));
GPIO_WriteBit(GPIOA, D7, (BitAction)((cmd>>3)&0x01));
GPIO_SetBits(GPIOA, EN); // 使能
delay_us(1);
GPIO_ResetBits(GPIOA, EN); // 禁止
delay_us(40); // 等待液晶屏处理数据
}
void LCD_init(void) // 液晶屏初始化函数
{
LCD_write_cmd(0x02); // 4位数据线模式
LCD_write_cmd(0x28); // 2行,5×8点阵字符
LCD_write_cmd(0x0c); // 开启显示, 光标关闭
LCD_write_cmd(0x06); // 文本写入后光标右移
LCD_write_cmd(0x01); // 清屏,将光标移动到起始位置
}
void LCD_printf(char *str) // 字符串输出函数
{
while(*str)
{
LCD_write_data(*str++);
}
}
int main(void)
{
GPIO_Configuration(); // GPIO初始化
LCD_init(); // LCD初始化
while(1)
{
LCD_write_cmd(0x80); // 光标移动到第一行起始位置
LCD_printf("Hello, world!"); // 输出字符串
delay_ms(1000); // 延时1秒
LCD_write_cmd(0x01); // 清屏
delay_ms(500); // 延时0.5秒
}
}
```
注意,这里使用的是GPIOA口,如果你使用了其他口,请根据需要进行修改。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![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)