stm32驱动lcd1602的程序
时间: 2023-05-21 16:05:53 浏览: 101
以下是一个简单的驱动LCD1602的STM32程序,希望可以帮到你:
```c
#include "stm32f10x.h"
#define RS_1 GPIO_SetBits(GPIOA, GPIO_Pin_0);
#define RS_0 GPIO_ResetBits(GPIOA, GPIO_Pin_0);
#define RW_1 GPIO_SetBits(GPIOA, GPIO_Pin_1);
#define RW_0 GPIO_ResetBits(GPIOA, GPIO_Pin_1);
#define EN_1 GPIO_SetBits(GPIOA, GPIO_Pin_2);
#define EN_0 GPIO_ResetBits(GPIOA, GPIO_Pin_2);
void GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Write(GPIOA, 0x00);
}
void LCD_WriteCommand(uint8_t command)
{
RS_0;
RW_0;
EN_1;
GPIO_Write(GPIOA, command);
EN_0;
delay_us(5);
}
void LCD_WriteData(uint8_t data)
{
RS_1;
RW_0;
EN_1;
GPIO_Write(GPIOA, data);
EN_0;
delay_us(5);
}
void LCD_Init()
{
delay_ms(20);
LCD_WriteCommand(0x38);
delay_ms(5);
LCD_WriteCommand(0x38);
delay_ms(1);
LCD_WriteCommand(0x38);
delay_ms(1);
LCD_WriteCommand(0x0C);
delay_ms(1);
LCD_WriteCommand(0x06);
delay_ms(1);
LCD_WriteCommand(0x01);
delay_ms(2);
}
void LCD_Print(char *string)
{
while(*string != '\0')
{
LCD_WriteData(*string);
string++;
}
}
int main(void)
{
GPIO_Configuration();
LCD_Init();
while(1)
{
LCD_WriteCommand(0x80);
LCD_Print("Hello, World!");
delay_ms(1000);
LCD_WriteCommand(0x01);
delay_ms(2);
}
}
```
这段程序使用 stm32 的 GPIO 控制LCD1602的各个引脚,实现有条件的简单输出。
注意:这仅是一个示例程序,仅供参考。